最適化対象パラメータファイル in.vars.fitpot
最適化するパラメータの初期値と範囲を指定するファイル.
294 6.000 3.000
0.0000 -1.0000e+10 1.0000e+10
0.0000 -1.0000e+10 1.0000e+10
0.0000 0.0000e+00 1.0000e+10
0.0000 0.0000e+00 1.0000e+10
...
- 1行目: パラメータ数,2体のカットオフ長,3体のカットオフ長
- 2行目以降:
- 1行に1パラメータ
- 左から順に: 初期パラメータ値,下限,上限
fitpot設定用入力ファイル in.fitpot
次のコードは in.fitpot
の中身の例.#
から始まる行はコメント行で,無視される.
num_samples 14
num_iteration 100
num_iter_eval 1
converge_num 3
test_ratio 0.1
sample_file "dataset/smpl_*"
param_file in.vars.fitpot
normalize_input none
init_params read
# Whether or not match energy, force, and/or stress
energy_match T
force_match T
stress_match T
# Currently available potentials: DNN, linreg, uf3, uf3l
potential uf3l
# Weights for energy, force, stress
weights 0.5 0.5 0.5
# Fitting algorithm: bfgs, lbfgs
fitting_method bfgs
ftol 1.0e-5
xtol 1.0e-4
penalty none
penalty_weight 1d-3
# Species order: 1) Al, 2) Mg, 3) Si
specorder Al Mg Si
# Whether or not to change weight on each force|stress in samples
force_scale_type exp
stress_scale_type exp
force_scale 1.0
stress_scale 1.0
# Reducing number of forces to be matched (random selection of forces)
reduce_fmatch 0.20
いくつかの項目についての説明
num_samples
Default: none
サンプル構造の数(training, testの合計数).
sample_list
Default: none
サンプルファイル名のリストの指定.ここで指定されたファイルからサンプルのリストを取得する.指定がなければ で指定されたディレクトリ内の smpl_*
を指定したことになる.
ファイルリストの形式として次のように書かれている場合は training と test のデータの区別をせずに指定したことになる.
smpl_001
smpl_002
smpl_003
...
一方,次のようにファイル名に続いて 1 (training) か 2 (test) を指定することもできる.
smpl_001 1
smpl_002 2
smpl_003 1
...
ここで training と test が指定されると test_ratio は無視される.
test_ratio
Default: 0.1
テストデータセットの割合. 全体のサンプル数を としたら,テストセットデータ数は となる.
num_iteration
Default: 1
最大反復回数.
num_iter_eval
Default: 1
何ステップ毎にRMSEなどの統計情報を出力するか.
fitting_method
Default: test
最適化手法. 現在指定できる手法は以下:
cg
/CG
— 共役勾配法(Conjugate gradient)bfgs
/BFGS
— 準ニュートン法(Quasi-Newton method with BFGS)lbfgs
— Limited-memory BFGSsgd
/SGD
— Stochastic gradient descent method. 一度にbatchsize_per_node
だけのランダムサンプルを評価して最適化していく方法.今は正常に動作しないかもしれない.check_grad
— 勾配計算と有限差分との比較を行う(デバッグ用)test
/TEST
— ただ単にlossとそのパラメータ微分の計算を行う.
param_file
Default: in.vars.fitpot
最適化するパラメータを記述するファイル.
ftol
Default: 1.0e-6
Loss値の1ステップ前のものとの残差に対する収束判定条件.
xtol
Default: 1.0e-4
パラメータ自体の残差の収束条件.ftol
とxtol
のどちらかが満たされたら終了する.
energy_match, force_match, stress_match
Default: True for energy, False for force and stress
エネルギー,力,応力を学習対象とするするか否か. すべてを考慮する(すべて True とする)ことが推奨される.
reduce_fmatch
Default: 1.0
力を全て学習対象とすると計算負荷が大きいのでフル(1.0
)に採用せずに,一部(例えば2割なら0.2
)のみ使うことで計算負荷を激減することができる.
力を全て学習対象とする場合に比べて精度が気になるところだが,経験上は少ない学習量でも十分なことが多い.
potential | force_field
Default: DNN
パラメータを最適化する原子間ポテンシャル(力場)の指定. 現在は,以下の機械学習ポテンシャルが指定可能.
DNN
— Neural-network potentialuf3
/uf3l
— Ultra-Fast Force-Field (light)linreg
— Linear regression potential
weights
Default: 0.5 0.5 0.5
エネルギー,力,応力に関するlossにかかる係数: . 足して1になるようにプログラム内で正規化される().
max_num_neighbors
Default: 50
近接原子数の最大値. 次のようなエラーに遭遇したらこの値を増やす.
[Error] nnl.gt.nnmax
myid,nnl,nnmax = 0 73 72
random_seed
Default: 12345d0
乱数のシード.トレーニングとテストのサンプルを選択する際に使われる.
regularize
Default: False
DNNとlinregポテンシャルにおいて基底関数の値を正規化するか否か.
penalty
Default: no
ペナルティー項の指定:
no
— なしridge
— L2ノルムlasso
— L1ノルム
penalty_weight
Default: 1.0
ペナルティー項の重み係数.一般的に,cross-validationなどで大きさを決定する.
sample_weight
Default: 0
特定のサンプルの重みを変更したい場合に,その特定サンプルリストの数を指定.
この行に続いて,次のように,サンプルに含まれる文字列とそのサンプルの重み係数を指定する.
sample_weight 2
Al_fcc 2.0
Al_bcc 0.5
force_scale_type | stress_scale_type
Choices: rel
| exp
| one
Default: one
個々のforceやstressの値によって重みを変えたい場合に,そのやり方を指定する.
rel
(relative) — その参照値の絶対値の逆数()を掛ける. の場合に0割りを避けるための はforce_scale
かstress_scale
で指定.exp
(exponential decay) — その参照値 を使って を掛ける. はforce_scale
かstress_scale
で指定.one
— 1 を掛ける(つまり何もしない)
force_scale | stress_scale
Default: 1d0
上を参照.
specorder
Default: none
pmdでは元素種と番号が対応している.その順番を指定する必要がある. (すべてのサンプルが考えているすべての元素種を含んでいるわけではないため,作成しようとしてるポテンシャルの中で各元素が何番目の元素なのかを指定する必要がある)
この順番と atom_energy
で使われる番号が対応している.
init_params
Default: read
最適化パラメータをファイルから読み込むか,ランダムに与えるかの指定.
read
—in.vars.fitpot
から読み込む.gaussian
— ガウス分布で与える.その平均と分散(の平方根)を init_params_mu と init_params_sgm で指定する.
init_params_sgm
Default: 1d0
初期パラメータの乱数のための分散(の平方根).
init_params_mu
Default: 0d0
初期パラメータの乱数のための平均.
init_params_rs
Default: 12345.0
初期パラメータ乱数のためのシード値.
sgd_rate_ini
Default: 0.001
SGDの学習率の初期値.
sgd_rate_fin
Default: -0.001
SGDの学習率の最終的な値. これが負の場合は固定学習率を採用.これが正の場合は,学習率を線形に変化させる.
batchsize_per_node
Default: 1
SGDの場合の,MPI並列ノードあたりのバッチサイズ. そのため,一度に評価するバッチ数はこれにMPI並列数をかけた値になる.