最適化対象パラメータファイル 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 BFGS
  • sgd/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

パラメータ自体の残差の収束条件.ftolxtolのどちらかが満たされたら終了する.


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 potential
  • uf3/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_scalestress_scale で指定.
  • exp (exponential decay) — その参照値 を使って を掛ける.force_scalestress_scale で指定.
  • one — 1 を掛ける(つまり何もしない)

force_scale | stress_scale

Default: 1d0

上を参照.


specorder

Default: none

pmdでは元素種と番号が対応している.その順番を指定する必要がある. (すべてのサンプルが考えているすべての元素種を含んでいるわけではないため,作成しようとしてるポテンシャルの中で各元素が何番目の元素なのかを指定する必要がある)

この順番と atom_energy で使われる番号が対応している.


init_params

Default: read

最適化パラメータをファイルから読み込むか,ランダムに与えるかの指定.

  • readin.vars.fitpotから読み込む.
  • gaussian — ガウス分布で与える.その平均と分散(の平方根)を init_params_muinit_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並列数をかけた値になる.