fitpot — FIT machine-learning POTential parameters
MD シミュレーションの妥当性は,シミュレーションで使用する原子間ポテンシャルの精度に大きく依存する.したがって,特定のシステムのシミュレーションを行う場合は,想定する現象を再現できる原子間ポテンシャルを準備する必要がある.
ここでは,nap パッケージに含まれる fitpot プログラムを用いた機械学習ポテンシャルのパラメータ・フィッティング方法を紹介する.
NOTE
現在,fitpot プログラムはニューラルネットワークポテンシャルと uf3 ポテンシャルにのみ対応している.その他の古典的なポテンシャルについては,optzer を使用すること.
fitpot は何をするものか
fitpot では,次の損失関数を最小化するように,ポテンシャルパラメータ を最適化する.
ここで,エネルギーと力,応力を参照データとする場合を考えている.
- はサンプル番号
- はサンプルの総数
- はサンプル 内の原子数
- は項 に対する重みで, を満たす
- は参照データの標準偏差
- で割ることで異なる単位の量を比較可能にしている
上記の損失関数を最小化するために,fitpot では以下の勾配法が利用可能である.
- 最急降下法(Steepest descent, SD)
- 準ニュートン法(Quasi-Newton method; L-BFGS)
- 確率的勾配降下法(Stochastic gradient descent, SGD)
入手
GitHubのnapパッケージに同梱されている.サイトからzipをダウンロードするか次のコマンドを実行する.
git clone https://github.com/ryokbys/nap.git ./nap
コンパイル方法
fitpot をコンパイルする前に,pmd のいくつかのモジュールが必要となるため,先に pmd をコンパイルすること.
$ cd /path/to/nap/
$ ./configure --prefix=$(pwd)
$ cd pmd/
$ make pmd lib #<-- lib must be made in addition to pmd
$ cd ../fitpot/
$ make fitpot
Quick start
fitpot の動作を確認するための最小限のデータセットを用いたサンプルがある.
examples/fitpot_DNN_SiO/
ディレクトリに移動し,README.md
を読んだ後,fitpot を実行し,いくつかの出力ファイルを確認する.
フィッティング手順
以下では,参照データが ab-initio 計算プログラム VASP を使用して取得されたものと仮定する. ポテンシャルパラメータのフィッティングは,次の手順で行う.
入力ファイルの準備
fitpot を実行するためには,以下のファイルが必要である.
in.fitpot
in.vars.fitpot
— 最適化するパラメータの初期値と範囲を含むファイル.
また,一部のケースでは,追加のファイルが必要になることがある.
in.params.DNN
— DNN力場の詳細については DNN の説明を参照.in.params.desc
— DNN力場の詳細については DNN の説明を参照.in.params.uf3
— UF3力場の最適化の際に必要.in.params.Coulomb
— 特殊な場合に,各smpl_XXX
ディレクトリ内に配置する必要がある.
また,in.fitpot
内の記述で,dataset/
ディレクトリ内のサンプルの数(num_samples
)を指定する必要がある.
次のコマンドでサンプルファイル(smpl_
)の数をカウントすることができる.
$ ls /path/to/dataset/smpl_* | wc -l