2023年3月26日日曜日

Dissipative Lagrangian Neural Networksについて

最近まで学業で研究をしていました。

その内容がDissipative Lagrangian Neural Networks(github)という先行研究のDissipative Hamiltonian Neural Networks(arxiv.org,github.com)とLagrangian Neural Networks(arxiv.org,github) を合体したものです。

具体的にどういうものかというと

ラグランジュ方程式に基づき、エネルギー散逸を考慮した力学系の学習が可能なニューラルネットワーク

  • Dissipative Hamiltonian Neural Networksでは必要であった正準座標系に依存しない
    • つまり、重さを知らなくても良い。 
  • Lagrangian Neural Networksでは考慮できない散逸を考慮できる
    • 保存場のみの計算が可能であるが、散逸場を含むと計算できない。
    • 空気抵抗などの粘性抵抗、摩擦などのエネルギーロスがあっても良い。

という感じです。
物理屋ではないので間違っていたら、書き換えると思います。たぶん。


ここでは苦労話を書こうと思います。


  1. DLNNで予測するモデル構造には複数のモデルが存在する

    ラグランジュ方程式を解くのですが、
    $$ \ddot{q} = - {\nabla _q \nabla _\dot{q} \cal{L}} + {\nabla _q \cal{L}} - {\nabla _\dot{q} \cal{D}} $$
    という微分方程式で表現することが最終的に求めることなのですが、この過程でヘッシアンで直接求めるか、頑張って二階微分するかです。
    ここで頑張って二階微分するとモデルとしての柔軟性が失われますが、一括で処理することができ、大幅な高速化が見込まれます。
    しかし、今回はvmapで並列化するという手法を取りました。
    これはすべての計算をニューラルネットワークのもつ自動微分で行わないので追跡性(backward?)を損なうと考えております。
    実際にはこのヘッシアンを使っています。
    なぜかそのほうが精度が良かったです。

  2. optimizerなにが良いのかがわからない
    投稿した現在もたくさんのoptimizerが出てきており、投稿時点ではLionというものがここ数週間で出てきた感じとなります。
    最初から備え付けのAdam,AdamW,自分でインストールしたDadapAdam,Lionを試しました。めんどくさくなって、サンプル結果だけAdanとかSGDとか見ました。
    他の方の検証によってはAdamWが良かったり、Adanが良かったり、Lionのタイパが良かったりするなどありました。

  3. optimizerやschedulerの扱いがよくわからない。

    今はdadaptationのAdamとtimmのCosineLRSchedulerを使っています。
    ただ、使用方法に書いてあるとおりに使用しておりません。
    何故かその通りに使用するとあまり芳しい結果が得られませんでした。
    dadaptationは
    「dadaptationがlrも管理するのでスケジューラーは使わないでね。それとd0は1r-6、lr=1でお願いね。」
    というふうに書いてあるように読み取れましたが、そのとおりにするとあんまり芳しくないんですよね。
    なんか試行錯誤の末、選んだ感じになりました。

  4. dadaptationはエポック数を稼ぎにくい

    試行回数が増えるほどnanやなんかdadaptのパラメータがおかしくなります。
    やだねぇ...。

  5. Lossの取り方がよくわからない

    一般的にMSE、平均二乗誤差を取るかと思います。
    これは一般的に有用であると考えます。バッチサイズにも影響を受けず、安定した値を返します。
    ただ、逆に細かな値の調整や外れ値に弱いと考えております。
    今回のような小さな値(0~100)を取り扱い、外れ値のような結果も外れではないという場合にはあまり良くないのではないかと考えております。
    $$ sum(abs(predict-train)) $$ という形でLossを取る場合、ノイズに弱くなると思うところがあるので、今後の課題の一つであるかと思います。

  6. バッチサイズが一般論とは違う
    リソースが許す限り、一般的にバッチサイズは大きければ大きいほど良いみたいな感じがあるのですが、これはそうではないです。
    なぜならば、Lossの取り方が$$ sum(abs(predict-train)) $$になっている場合、バッチサイズが大きくなればなるほどLossが大きくなります。
    しかし、エポック数を無闇矢鱈に増やす訳にはいかない...普通のものと比べるとエポック数を多少増やす必要があるようには思います。

  7. 活性化関数がよくわからない
    結局swishを使っているのですが、形としてはtanhshrinkが合いそうな気がするんですよね。
    結局は使っている活性化関数が答えですね。理由はわからないです。

  8. 隠れ層やその種類について
    現状はdenseで512次元です。
    これは最近になってどうするか考え出したので、結局答えはわからずじまいです。

以上より、なかなかに苦労したところでもあり、今後の参考になる部分ではないかと思います。

 

まとめ

 最近は力学系ニューラルネットワークが盛んになってきている傾向があると思います。これはHamiltonian Neural Networks(arxiv.org,github.com)を提案したSam Greydanus氏が恐ろしいほどすごい人であるからと考えております。

普通こんな事考えないよねと思ったりもしますが、いつの日かこういうニューラルネットワークが普通になるのかもしれない日が来るのかもしれないですし、来ないのかもしれないです...。 


余談

LNNは自身の環境では再現できませんでした。

再現できた方はおめでとうございます。

再現できた環境をネットの海に放流してください。

2022年12月17日土曜日

Google Pixel 6aを買いました


最近、スマートフォンの機種変をしました。

 

 

機種変更先はGoogleのPixel 6a(以降 Pixel 6a)です。

よくCMで流れているPixelの最新の廉価モデルです。

それまでは、この記事で紹介したOppo Reno Aを2022/11/30まで使っておりました。

機種変更の理由は、上記の記事と同じ理由で、「もたつきが増えた」という理由に加え、「バッテリーの持ちが悪くなった」という理由です。

  

買い替えたことによる「Pixel 6a」の良いところと悪いところを書いていこうかと思います。

 

「Pixel 6a」とは

Googleが発売するPixelシリーズのスマートフォンの一つです。

2022/7/28に販売され、セールなしでは53900円で販売されているスマートフォンとなります。

セールであったり、店舗の独自値下げなどで、2022/12/17現在では、30000円から45000円ほどで購入できる事が多く、白ロムで最安値では22001円(MNP一括で1円というもの)で購入できる機種となっています。

特徴としては、Googleが開発した独自SoCである「Google Tensor」を搭載しており、上位の無印やProと同じCPUであります。

しかしながら、他の特筆すべき点はなく、ありふれたスマートフォンという感じです。

逆に言うと、オールマイティに使える万能さがあります。

 

使い勝手について

私が使ったことのある「ASUS Zenfone 2(Zenfone 2)」、「Motorola Moto g5s(g5s)」、「Oppo Reno A(Reno A)」と比べます。

使用用途は上記の記事から変わっていません。

一言でいうと、「微妙」です。

モダンで使いやすい位置にある指紋認証ですが、Reno Aのように顔認証には対応していません。安全性の確保やチップの制限による判断だと思います。後継のPixel 7シリーズにはあるので。

そして、ピュアAndroidが最速で降ってくるので、下のバーを消せなかったり、Reno Aで出来ていた事ができずに、少々不便なところもあります。

また、同様の理由でUIが一貫性がないようにも思います。Android 12で不評である2回下にスワイプしないと設定を細かく変えることのできない、WiFiは自分で選びにくいなどなど...。

加えて、ゲームスペースが拡張性がなく、設定が甘いことがあります。

さらに、GPSの精度はReno Aよりも少々悪いように体感します。

一部機種では健在のイヤホンジャックとSDカードスロットがありません。

そのうえで、Reno Aよりも、重さは重く、奥行きが厚く、 横幅は細くなっています。

そのせいで少々持ちにくく感じます。

 最後にRAMが6GBしかないので、タスクキルがReno Aよりも多いように感じました。

 

しかしながら、この値段でハイエンドのCPU,GPUを積み、ベンチマークでも上位に位置する性能であるため、操作は快適です。

Reno AでもTwitterやDiscord、Web閲覧、動画視聴などなど普通にもたつくことなくできるので、本領を発揮するのはゲームとなります。

 

ゲームの動作について

 これも上記の記事と同じことを述べてしまうのですが、「以前使っていたものよりもサクサク動きます」。

SoCの性能が上がっているからですね。

具体的に言いますと、ミリシタを3D高画質で「レイジーレイジー」をプレイしても、13人ライブの「ESPADA」をプレイしても、カクつくことはほぼありません。一瞬負荷が高くなって、60fps貼り付きは難しいですが、十分に耐えれる程度です。

 


Reno Aだと3D超軽量でも13人ライブはカクつき、「レイジーレイジー」は一瞬止まってしまったのではないかと見間違うほどでした。

 

デレステに関しては、3Dリッチでも基本的にカクつくことがありません。

しかし、プレイ中にエフェクトなどで非常に見ずらいのでやめます。

「Majoram Therapie」 ではSSRやTextureRenderなど結構重い処理が走っているのですが、普通にほぼカクつくことがなく動作しました。

 

逆にSSRやTextureRenderとかPS3で搭載されたか否かくらいの技術だと思うので、それがモバイル端末で60fps付近で動くというのは驚きがありました。

Reno Aでは3D軽量にしていても、3人の「UNIQU3 VOICES!!!」ですら、怪しい挙動でフルコンが難しいと明らかに感じるほどでした。


とはいえ、CPU,GPUがハイエンドとは言え、RAMはLPDDR5なのですが、6GBでミドルレンジかそれ以下くらいです。

アプリを複数起動した状態で、ゲームをするとカクつきがより顕著に感じました。


まとめ

Felicaがついていて、SoCのスコアがハイエンド級、その割に30000万から45000円程度、コスパモンスターという感じがします。

コスパモンスターと言えば、中華系でXiaomi系の会社が強く、2022/12/17現在では「Xiaomi 11 T Pro(Amazon)」や「POCO F4 GT(Amazon)」がハイエンド帯ではあり得るのかなぁと思います。MIUI系なのでCRIWAREを使用している音ゲーとは相性がすこぶる悪いと聞くのですが。

 

※Amazonのリンクをすぐ検索して見れるように貼っている(パートーナーではないので、アフィリエイトはないです。そのため、正しくリンクに飛べる確証はありません。)のですが、公式サイトや楽天、Yahooショッピング、回線販売事業者などをチェックするとよりお安く求めることができると思うので、ご購入を検討の方はご自身で情報を集めてください。


ミドル帯でもほぼ同様で、Xiaomi,Oppo,Motoloraなのかなぁと思います。

 

そのため、安定していて、欲張りセットでお安く求めることができるハイエンド端末として、75%くらいの方々におすすめできるスマートフォンです。


余談

予算が30000円から60000円ほどですと、スマートフォンは基本的にSDM695 5Gがメインとなっていましたね。

鬼のようにSDM695 5G を搭載する端末が多くて嫌になりました。

中途半端に性能が良いが、中途半端に悪いのがいらっとするんですよね。


Oppoを検討していたのですが、Reno 5AはSoCは良いものの、液晶な上に、背面に指紋認証があり嫌でしたし、Reno 7AはSoCが劣化していましたので、予算を上げることを検討しました。

 

引用元

1.価格.com,Google Pixel 6a スペック・仕様・特長 ,https://kakaku.com/keitai/smartphone/model/M0000000951/spec/

2.Google, Google Pixel 6aの技術仕様,https://store.google.com/jp/product/pixel_6a_specs?hl=ja

3.Google,Compare Pixel Phone and Specs,https://store.google.com/jp/magazine/compare_pixel?hl=ja