用户工具

站点工具

本页面的其他翻译:
  • zh

adf:05paramsadvance

ParAMS高阶、重要教程:单点能比对、训练的并行化(多Optimizer同时优化)、重启、敏感度详解

一、单点能比对

这个功能的目的:导入一些单点训练集,他们有对应的能量信息,这些能量例如来自DFT,我们可以将这些单点训练集使用其他引擎进行计算,例如ReaxFF的某个力场或我们自己训练的某个力场,DFTB的某个方法,或者机器学习势等。更换计算引擎重新计算的能量与原先DFT的能量,ParAMS中能够进行比对。

使用方法

例如我们有一个势能面扫描的作业导入:ParAMS → Jobs → Add Jobs → 选择作业的*.results/ams.rkf文件 → 以单点的方式导入势能面扫描的各个点:

这样“Al”l列表里面,除了Engine外,只有Energy和Job两种。 然后去掉训练设置:菜单栏Parameters → No parameters。点击Engine栏双击ParAMS这个引擎,弹窗中可以将其修改为我们需要的引擎,例如DFTB、ReaxFF,同时将弹窗的Engine ID改为我们自己方便识别的名字,例如DFTB、ReaxFF-Water-2017。

点击Edit in AMSinput,弹出AMSinput窗口即可修改计算方法。例如,对DFT而言就是泛函、基组、冻芯、积分精度、相对论等,对DFTB就是Model和Parameter Directory,对于ReaxFF就是选择以下力场,机器学习势、其他力场类似选择以下势、力场的名字即可。

引擎设置完毕后,Ctrl S即提示Pass to ParAMS保存引擎的设定。这里我们可以选择DFTB的默认Model:GFN1-xTB。

回到Jobs栏,按住Shift选中所有Job,然后双击这些Job的Details区域,就弹出来这些Job的设置。将ParAMS Engine ID改为我们刚才创建的引擎例如DFTB。

左下角的作业类型改为Single Point:

保存作业,然后运行作业即可。

结果显示

运行完毕,右下角出现点线图: 每个点的坐标,前一个数字就是参考集也就是这里DFT训练集中的能量,例如红圈中的点,就是DFTB计算第二个条目得到的,第一个数字是DFT的结果,第二个数字是DFTB的结果。如果所有点都在直线上,则二者完全一致。

二、训练的并行化(多Optimizer同时优化)

这个功能的打开,如下图所示:

Number of parallel optimizers,即Optimizer的个数,Max of optimizerrs converged,是指多少个Optimizer达到收敛,作业就停止,例如1,这里设置的是3个Optimizer都收敛才停止。点击Optimizer后面的>按钮,用户也可以尝试其他Optimizer的效果。

与多Optimizer同时优化相结合,Starting points generator可以选择Random,这样三个Optimizer从不同的参数起点开始优化,这样更容易从全局找到损失函数最小的参数点。

用户还可以对多个Optimizer的情况设置终止条件,也就是设置Stoper:点击Optimizer stoppers右侧的>按钮添加终止条件(条件如何设置,参考手册Stoppers and Exit Conditions),例如可以设置:

Options → Optimizer Stoppers → 点击+添加Stopper → Type:Current Function Value Unmoving,Number of function calls:10,Tolerance:0.05

然后点击+添加第二个Stopper → Type:Max Interoptimizer Distance,Max Relative Distance:0.01

Combine stoppers 输入 1 | 2,表示2个条件任意一个达到,就会终止作业。

保存作业并运行。

结果

可以看到损失函数的起点是不一样的:

损失函数等等的Data from,默认显示所有Optimizer的数据,也可以选择Show only selected optimizer,只显示指定的Optimizer的数据。

如果Optimizer比较多,甚至启动的时间也会不一致:

作业结束后,不同的曲线的终点有不同的标记:

  • ✳表示Optimizer成功收敛
  • ▲表示Optimizer被Stopper终止了
  • †Optimizer退出

例如:

三、敏感度

敏感度是使用 Hilbert-Schmidt Independence Criteria (HSIC) 准则来计算的,这是一种强大且流行的依赖性测量方法:

  • 当且仅当变量独立时,HSIC=0
  • 值越大,意味着变量之间的依赖性越高

敏感度值有两个属性使得它们非常容易理解:

  • 所有敏感度值总和为1
  • 敏感度值范围从 0(不敏感)到 1(敏感)

设置方式,参考:https://v.fermitech.com.cn/wiki/doku.php?id=adf:01basicprocess末尾。

结果

饼图显示了不同组的敏感度分配,这里只分析了H.O Bond Block,因此权重被全占了。

这个窗口切换到Parameters列表窗口,可以点击如下图所示最后一列Sensitive,将敏感度从高到低排序,然后可以方便地勾选高敏感度的参数。

经验

  • 选择参数时,应以敏感度为指导,但也可以考虑选择几个不太敏感的参数(如果选择这些参数符合直觉)。例如,在没有 π 键的训练集中,不要勾选与 π 键相关的参数,但低敏感度的 σ 键参数可能有意义
  • 粗略地说,训练集如果只有n条,参数的个数请勿超过 n$^{1/2}$
  • 为了实现高质量的参数优化,可以分几个步骤进行优化:首先优化非常敏感的参数,然后仅优化中等敏感的参数
  • 如果敏感度非常不平衡(少数参数比其他参数敏感得多),请务必考虑分多个步骤进行优化,或重新设计训练集、重新设置训练集权重,以更好地平衡敏感度,从而使得Optimizer更容易优化。

四、重启

如何留下重启点

优化作业要能重启,前提就是留下了checkpoint文件(以 .tar.gz 结尾的文件),后面就能读取checkpoint文件重新运行。如何留下checkpoint呢?

Optimization窗口 → Details → Checkpoints。这里可以设置留下checkpoints的条件。例如勾选Checkpoint at end,则完成后会留下一个checkpoint。

如何重启

Optimization → Main → Resume checkpoint选择对应的.tar.gz文件,另存运行即可。

重启作业时,可以修改这些内容,有时候非常有帮助:

  • 改变停止规则Stopper,使其更加积极
  • 改变退出条件,让尚未收敛的作业继续往下优化
  • 改变训练集权重/训练集条目,以令优化器的重新“活化”
adf/05paramsadvance.txt · 最后更改: 2024/06/28 00:20 由 liu.jun

© 2014-2022 费米科技(京ICP备14023855号