Predicting Molecular Properties-5
*1週間程度の予定で、過去のKaggleコンペ、Predicting Molecular Properties、に取り組む。
*目的は、DNNがどのような課題に対して、どのように貢献できるのかを、実例を通して学ぶこと。
*今回は、まず、グラフネットワークを理解し、次に、GilmerのMPNNを理解し、その後で、コードの理解に進むという流れにしようと思う。
*本日の課題:プログラムコードの理解(手本と論文を対比させながら)
・MPNN, edge, node, update, aggregationなどに関係する図や式を再掲する。
・MPNNはモデル全体の呼び名。
・edgeは直訳すれば端部ということだが、nodeとnodeを結び付けているもので分子モデルの場合は結合(1重結合とか二重結合とか)のことだが、実際に使う値としては原子の3次元座標になるのかな。
・nodeは直訳すれば節ということで分子モデルの場合は原子をあらわすのだと思うが、スカラーカプリングは原子間の相互作用だから実際に使う値は原子のペアかな。
・updateは下に示す式(2)ではNNとなっているのでなにがしかのニューラルネットを使って値を更新するということかな。
・aggregationは同じく下に示す式(2)ではΣ記号が付いているから和をとるということかな。
*プログラムの検討
・Message passenger
・Aggregator
・Node update
・Edge update
・Output layer
・Put it together to form a MPNN
・Define the loss functions
・Define some callbacks
・Finally create the model
・Let the learning begin
・Prediction done
*プログラムの概要はなんとなく見えてきたような気がするが、残念なことに、使っているメインのデータベースがプライベートなものらしくて消去されているようである。
・プログラムの本体は、MPNNに間違いなさそうなので、残念である。
<雑談>
*以前にも書いたことがあるが、斎藤康毅のゼロから作るDeep Learning②の中で、RNNによる文章作成のseq2seqのところで、足し算をやってみせるところがある。
・50000件ほどの例を使って学習させると、正解率が、baselineで10%程度、それがreverseにより50%以上に、peeky(Encoderの出力hをすべての時刻のLSTMレイヤとAffineレイヤに与える)により100%近くにまで上がるというものである。
・以前は、これはすごい、と思った。足し算の方法を教えずに、膨大な量ではあるが、問題と答えの組を示しただけで、正解できるようになるのだから、驚きだ。
・といっても、今では、量子力学の計算をしないで、分子中の原子の種類と3次元座標を与えるだけで、量子力学で計算したのと同等の情報が得られるのだから、いまさらではある。とはいえ、やっていることは、原理的に、同じだ。
・ほかの方法で計算して得られた大量のデータを、大規模非線形変換装置(DNN)に学習させることができて、かつ、未知のモデルに対して学習させたデータと同レベルの正確さで予測できる、ということができればいいだけなのだ。
・レイ・カーツワイルが提唱した、シンギュラリティーというのがある。技術的進化速度は指数関数的に増大していて、2029年にはヒトを超え、2045年には、技術的進化速度が無限大になるというものだ。
・ヒトと比較すること、ヒトの技術開発力と比較することに意味があるとは思われないが、いろいろな領域で、ヒトの能力、既存の技術力を超えた、もしくは超えようとしているのは間違いなさそうだ。
・ヒトが開発したものがヒトを超えたと言っても、これもヒトの能力だと言ってしまえば、ヒトを超えることはない、ともいえるかもしれない。
・現状でも、既存の技術を超えたり、超えようとしているのであれば、その領域においては、計算機は、予測能力を駆使し、GANのような技術も駆使して、教師データをどんどん増やすというのは出来そうな気がするのだがどうだろう。
・教師データが、新たな教師データを生み出す仕組みができれば、それは、自律的に精度を向上させることができるということになる。
・どうなんだろうな。
*本題に戻ろう。
・このまま続けるには、大きな問題がある。
1)TensorFlow2が使われていること。何か月か前に、TF2をインストールすると、常用しているプログラムが動かなくなった。
2)プライベートなデータベースを用いてトレーニングしているらしく、そのデータベースは削除されている。
3)コンペのデータベースをダウンロードしたが、データ量が多すぎるようで、自分のパソコン環境で、エクセルでは開けなかった。
・とはいえ、ここでやめるわけにはいかない。
*まずは、コンペのデータベースの中身を調べる。
・ゼロから、notebookを作る。
・言語は、KerasとTensorFlowをベースとする。
・A. Geron氏のHands-On Machine Learning with Scikit-Learn & Tensouflowと、F. Chollet氏のDEEP LEARNING with Pythonを参照しながらすすめる。
・まずは、 train.csvを読み込んで、一部を表示してみる。
import os
import pandas as pd
PATH = 'C:Users/・・・・/champs-scalar-coupling'
train_df = pd.read_csv(PATH + 'train.csv')
train_df.head()
・これまでは、データベースをダウンロードしたら、いつも、ファイル名をダブルクリックして、エクセルで表示していたが、今日は、A, Geronのテキストを見ながら、train_df.info(), train_df.describe(), train_df.hist(bins=50, figsize=(20,15):plt.show()などを試した。
・非常にスムーズに動作した。
・structures.csvに対しても同様のコマンドを試した。
・これで、元素ペア、スカラーカップリングコンスタント、分子構造情報(構成元素のx,y,z情報)の場所がわかり、イメージが湧いてきた。
・しかし、なんにせよ、前処理に難があるのは自覚しており、今はまだ、動くプログラムで、勉強するしかない。
*Kerasで、Kaggleのデータベースを使って、動くプログラムが見つかったので、それで学ぶことにする。
*このつづきは、土曜日の予定。