Predicting Molecular Properties-7
*1週間程度の予定で、過去のKaggleコンペ、Predicting Molecular Properties、に取り組む。
*目的は、DNNがどのような課題に対して、どのように貢献できるのかを、実例を通して学ぶこと。
*今回は、まず、グラフネットワークを理解し、次に、GilmerのMPNNを理解し、その後で、コードの理解に進むという流れにしようと思う。
*残された課題:お手本プログラムコード(1つはTF2.0とsklearnによるMPNNモデル、もう1つはkerasとsklearnによるベーシックな5層の全結合NNモデルの理解(手本と論文を対比させながら)
*本日の課題:Molecular Propertiesの予測においてMPNNモデルよりも高い性能を持っているように見えるDTNNおよびSchNetを理解すること。
・昨日に続き、これらのプログラムを開発したK. T. Schüttらの論文を読む。
・nature communicationに掲載されたQuantum-chemical insights from deep tensor neural networksのプログラムの構造を理解しよう。
・プログラムの模式図を再掲する。
*GitHubに、開発者らのチームが作成したdtnnのコードがアップされているので、それに取り組んでみよう。
The deep tensor neural network (DTNN) enables spatially and chemically resolved insights into quantum-mechanical observables of molecular systems.
Requirements:
- python 3.4
- ASE
- numpy
- tensorflow (>=1.0)
・pythonとnumpyとtensorflowがあれば動くということらしいが、KerasやPyTorchを使っていないと、プログラムは見た目が複雑になる。
・SchNetは、SchNetPackという統合環境になっていて、PyTorchを使って書かれている。
・ASE:The Atomic Simulation Environment (ASE) is a set of tools and Python modules for setting up, manipulating, running, visualizing and analyzing atomistic simulations. The code is freely available under the GNU LGPL license.
・ASEは、conda install -c matsci ase で、3.16.2をインストールできた。
・荷が重いな。
・実際に動かすときは、目的を明確にし、データベースを準備し、前処理等もやってから、という感じかな。
・いろいろ手をひろげすぎて収拾がつかなくなってきた。
・ここで、コンペに戻ろう。
<雑感>
*Kaggleの良いところは、機械学習の具体的な適用例を知ることができることであり、メーカーや研究者などのニーズが幅広く実現されているところだと思っている。
・予測結果を提出して、スコアを得て、順位を知って、上位を目指して、改良したモデルで予測結果を出して、スコアを得て、順位を知って、上位を目指して、・・・。
・予測結果を出力できるようになるまでのプロセスと、そこから、改良を加えていくプロセスがある。
・予測結果を出力できるようになることは、プログラミング技術が無い場合でも、Kaggle内での手順がわかれば、ちょっとしたことでつまづくことはあったとしても、たいていは、できるようになる。
・Kaggleの真骨頂は、他の人のモデルを参考にしたり、議論を参考にしたり、議論に加わったりしながら、モデルを改良したり、新しいモデルを適用してみたりしながら、スコアをアップさせていくことであろう。
・このプロセスに入り込んで、スコアを上げていくためには、少なくとも、プログラムを書き換える能力を身に着ける必要がある。
・スコアアップの手段は理解できても、プログラムに反映する技術がないと、立ち往生するだけである。
・この段階、すなわち、借り物のプログラムでスタートしても、いつも、借り物をそのまま使うだけで、画素数、学習率、バッチサイズ、dropout率、学習済みDNNの種類や組合せ、エポック数、augmentationのパターンやパラメータなど、数値もしくは名称を変更するだけの作業によるスコアアップに留まっている人は、自分を含め、非常に多いのではなかろうか。
・トップレベルの人のコンペ終了後の感想で、理想的だなと思ったのは、借り物でスタートしたが、論文を読み漁り、課題解決のために、より適切なモデルを探し出して、そのモデルを組み込んで、スコアアップにつなげた、というものである。
<雑感>
*最初に本格的に参加したKaggleのコンペは、画像分類だったので、KerasでCNNを1か月程度勉強したところであったが、F. Schollet氏のテキストを片手に、モデルをつくって、テストデータの予測結果を出力して、提出できた。ただし、データの前処理は、Kaggleのnotebookを参考にさせてもらった。ただし、スコアはエラーでつかなかった。
・テキスト片手にモデルを作れる、というレベルでない場合には、どうすればよいのか。鉄鋼表面の欠陥検出では、自分でモデルを作れず、前処理も難しく、結局、前処理の一部を自分で少しできるようになっただけで終わった。
・コンペ終了後に再度挑戦してみたが、他人のコードで概要を把握して、前処理方法を学んだところまでで終えた。借用したnotebookのハイパーパラメータの一部を変更して計算結果を提出したが、改善作業は進まず、課題にしていた損失関数の改善とaugmentationの拡張は実現できずに終わった。
・いま取り組んでいるカップリング定数の予測にしても、自分でしっかりとしたモデルを組めるようなものではないので、借り物のモデルであっても、内容を理解して改善にもっていきたいのであるが、モデル自体が複雑になってくると、改善の仕方を考えるところまでたどり着けない。
・計算環境の貧弱さも大きな問題になってくる。クラウドを借りる資金もない。
・今回の過去コンペへの取り組みも、そろそろ終わろうかと思ったが、ここで引き下がるわけにはいかない。第一原理計算は、ずっと前からやってみたいと思っていたし、ディープラーニングとバイオインフォマティクスを勉強して両方の資格を取れたタイミングなので、このコンペは、最後までやり切らなければならないと思っているところである。
・このコンペにLate Submissionすることだけではなく、SchNetPackを使いこなし、DeepChemなども使えるようになって、バイオインフォマティクスの分野へも踏み込みたいと思っている。
<雑感>
*GitHubのDTNNがtensorflowで書かれている。KerasでもPyTorchでもない。
・2017年の春にディープラーニングの勉強を始めようとして、何冊かテキストを購入した。ひとりで勉強していたのだが、さっぱり進まなかった。
・進展が見られたのは、2018年春にゲームパソコンを購入してからである。なんとなく、GPUが必要だということを覚えていたので、GTX1050Tiを選んだ。
・なんとなくディープラーニングをやろうとして、斎藤康毅氏のゼロから作るDeep Learningの本を参考に、Anacondaをインストールし、GitHubからプログラムをダウンロードし、Spyderでプログラムを動かした。
・斎藤康毅氏は、Python3とMumPyとMatplotlibだけでプログラムを組み立てていた。
・そのため、内容が深くなってくると、別の場所に格納してある関数を引き出して使うようになり、途中からついていけなくなった。
*とはいえ、fastai, pytorch, kerasなどでは見えにくくなっている、プログラムの中身(パラメータ設定の詳細やテンソル演算の詳細など)が具体的に見えて、演算内容とニューラルネットの構造との対応がよくわかるので、一度は通っておくべき道かもしれない。
・そのままディープラーニングの世界にのめりこんでいればよかったのだが、2018年の5月から2019年の3月まで、違うことをやっていたのは、今思えば悔やまれる。
・しかし、2019年の3月13日に、ディープラーニングを再開し、この道を極めたいと思うようになった。
*明日は、コンペのプログラムに戻ろう!
つづく