背景
僕が興味を持っている数値光散乱シミュレーションの分野では、非球形粒子単体の光散乱を研究したい研究者は世界で300人くらいではないかと思います (応用研究を除く)。
その300人の中で、審査を勝ち抜いて数億円予算のsupercomputerを扱える資格を持つ人はだいたい世界で30人くらいではないかと思います。
残り270人はそれぞれの扱える予算内や共同研究利用などを申請して上記よりは非力な環境での数値計算をする、というのが現状です。
supercomputerの計算については、数ヶ月動かし続けて得られた結果が論文に掲載されたり、「データベース」として公開されたりすることがあります。
しかしながら、その「データベース」というのは計算条件が使いたい条件と異なっているなどして、あくまで参考意見程度の扱いとなります。
残り270人がそれぞれ使える環境で、supuercomputer並の結果(その1/100でもいい)が使えるようになれば、コミュニティが活性化するのでは、と思います。
その結果、うっかり彗星の起源の研究が進んだり、うっかり大気粒子による気候変動影響の研究が進んだり、各種光学機器の開発が進んだりすると面白いし、それらの発展を生きている間に目にしたいと感じています。
270人の計算環境を良くするにはどうするか。
シナリオ
- 30人の誰かがsupercomputerでGPUをふんだんに使用して計算を行う
- 計算結果をsupercomputerでDeep Learningしてその結果を公開する
- 公開した結果を元に、残り270人が学習結果を用いてそれぞれの希望する条件で数値計算を行う
アイデアの種は以下の情報から来ています。
- Weta DigitalのSpherical Harmonics cache
- http://qiita.com/7of9/items/c04b08c5e719dc6f8593
- cache計算はsupercomputerを用いて、アーティストが非力なdesktop computerでリアルタイム性の高いCG生成を見ながら作業している
- 2000年に試したNeural Network
- そして、QiitaのCNN/Deep Learning関連記事
- 前々からsupercomputerの結果をもっと有効利用できないかと考えてきたこと
- TensorFlowの転移学習
- まだ言葉しか知らない知識レベル
- http://qiita.com/7of9/items/88e9ae26017105436c28
上記のシナリオを実現するためのプロトタイプを作り、30人の何名かに連絡したいと思っています (連絡が取れ、かつ対応もいい人は1名(U国のYさん)、その人が多くの時間を費やして管理しているuser groupで広まると良い)。
プロトタイプ作成に必要なもの
パラメータ(サイズ、化学組成、形状、入射光の方向、波長など)の値が様々な場合での計算結果を元にDeep Learningをする。
多次元補間と同等のことをすることになるのだろうか。
多次元補間用のテーブルと学習結果、どちらを保存するほうが得策かというのも検討事項。
つまりは多次元関数を学習することになり、そのfirst stepとしてsine curveを近似しようとしている。
sine curve近似の進捗
誤差は0.01程度になりました。
http://qiita.com/7of9/items/7e45a69c822900a80c67
weightとbiasをファイル出力して、別プログラムからも再現できるようになりました。
http://qiita.com/7of9/items/ce58e66b040a0795b2ae
ただし、Fully connected neural networkを使っているだけで、近年のDeep Learningの研究で得られた事項はまだ使っていない状況です (TensorFlowという良いツールは使っています)。
sine curveやPower Loadなどの関数を近似する方法としてRNNのLSTMもあると認識しています。
http://qiita.com/7of9/items/d4fc540c1dc92f2f0c85
http://qiita.com/7of9/items/11500a5c26d4c8828062
RNNやLSTMを自分が理解して使えるようになるにはまだしばらくかかりそうです。
RNNやLSTMを使わなくても10倍くらい高速化できれば、それはそれで影響力があるとも考えています。
(とりあえず誤差0.01程度で近似できたので、それを使って様子をみます)
(RNNやLSTMは「時系列の次の値」(forecast)を得られる、という特徴を持つようで、それは自分が今行いたいこととは違うかもしれない。勾配消失問題など関係しそうな時に考えるかもしれない。)
対象コード
ADDAというコードにより計算できる結果を学習しようと考えています。
関連記事はADDAタグで整理しています。
http://qiita.com/tags/ADDA
(一方でDeep Learning関連の試行錯誤はborgWarpタグにまとめています)
ADDAタグの方はいずれU国のYさんに連絡するため、英語で書いています。
また、他の29名および270名も対象としているので英語です。
おわり
上記を実現しようとして作業中です。
性能が出るかわかりませんが、プロトタイプ完成が一区切りになります。
他にやりたい電子工作などはスポット的作業はするかもしれませんが、基本的にはこちらの作業を優先します。こちらの作業が行き詰った時は他のことをします。
本業はこちらの作業とは無関係のため、空き時間(週10時間ほど)で進めていきます。
。
。
。
到着したAmazon Dash Buttonをどう使うか。