# AiiDA and DPMD plans and questions
## AiiDA plugin for DPMD
我想要利用DPMD替代我们现在用CE处理的体系可能还没有完全测试并证明完全可行,所以AiiDA和DPMD连接的部分还是应该以简单的CH4或合金等你们已经成熟应用的体系为例子。来制作Deepmd的相关AiiDA plugin, 包括`calculation job`和相关的特定的数据结构。
主要的 calculation job 包括,traning的部分 `dp_train` 的 `CalcJob`, `dp_test` 的 `CalcJob`. 以及 LAMMPS 的扩展和 `i-PI` 的plugin。
数据结构包括,在AiiDA数据库中如何存放大量的训练的结构,如何存放训练得到的参数,如何存放训练过程中产生的能量、力等结果。
To 云霈:
- dpgen中初始结构的生成是否需要独立成相应的calculation function,还是在workflow中直接被调用?
- 训练数据的产生过程中的随机性如何处理和保证可复现性?
## DPMD for complex alloy system
我们想利用DPMD代替现在使用的CE处理的主要是合金的有序无序相变的性质的准确描述。典型的benchmark的体系是CuAu合金或NiAl合金L12到fcc无序相的相变。
传统的CE方法有一个好处是训练能量的模型时训练集需要的样本量很少,一般不会多于100个,然后在元素原子大小失配不大的体系中也有比较好的预测效果。
但弱点也很明显,对多元合金的处理非常麻烦,对结构驰豫后的能量拟合效果不好模型难以收敛。
现在我们这边把体系从金属扩展到共价和离子晶体的体系发现用传统CE都没有办法准确描述实验中的结果,但是也没有更好的办法,因此觉得DPMD可能是个很好的选择(我们本来打算用EAM的,可是除了金属合金都其他都找不到可用的势,而且看样子效果也不好)。
所以我这边是希望在这样的体系上能够尽快使用DPMD代替CE进行研究。
但这边的我认识到的最大的难点是,CE不但可以很快的评估能量,同时使用相似的展开也可以推广到自由能的评估。如果不使用这个方法,那么在MC抽样的时候需要对每一个抽样的结构做一次声子信息的计算从而得到振动相关的热力学量,这在计算量上是难以接受的(1000flips/site 5% 温度变化)。
To 林峰:
- 这方面的合作应该会和AiiDA插件的编写一起进行,所以应该不会用到AiiDA,还是想先用你们成熟的dpgen作为工具来训练模型。
- 不知道你们是否已有NiAl或者CuAu的合金势,我想可以来做一个和测试对比。若没有,dpgen的使用和训练中的参数我不是很有经验,所以可能到时候需要你们比较多的协助。
- 这两周我也比较详细看了一下你们的方法,就我知识所限,有这样几个问题:
1.模型训练完以后利用模型计算一个多大的体系的时间大约是多少,比如一个10x10x10倍立方bcc胞的MgAl合金计算能量和力?
2.你们PRM的文章中的声子谱的计算是在训练完势之后用LAMMPS中的fix phonon的方法计算的吗?还是用frozen phonon的方法求力矩阵?
## Before Meeting
Prepare.
我这边主要想要处理的目标系统是二元以及多元合金的有序无序相变的模拟。这个模拟过程中,毋庸置疑,有序相的自由能以及其他构型相关的性质从你们2019年的PRM里面可以看到,都可以很好的模拟。
对于无序相,在特定温度下需要分别考虑构型熵和振动熵对自由能的影响。
如果不考虑振动熵而仅仅考虑构型熵,我认为你们的DPMD可以很好的替代我们现在采用的传统的Cluster expansion来对不同构型的能量进行评估,然后直接结合Monte Carlo进行相变的模拟即可。
在仅考虑构型熵的情况下,用DPMD替代CE,对于振动熵对相变温度影响不大的体系可以很好的克服传统CE的一个比较大的问题,就是传统CE对结构驰豫后的能量估计不能很好的预测。所以对于那些原子半径失配大的结构优化后偏离最初晶格位置的体系应该会特别适用(以往如果沿用CE,需要借助倒空间的CE,操作上会比较繁琐,而且对于多于二元的合金暂时也没有很好的办法)。
然而和CE相比,在训练样本的数量上,机器学习的方法并没有优势。通常CE的训练样本很少,只要这些构型包含比较完整的相互作用信息就可以了。
所以我觉得既然用了更多的训练样本,而且得到了充分的力学信息,那么就希望振动熵也能很好的描述。
<hr>
以往对振动熵的处理只要分成两类方法:
#### CE
还在CE的框架下,对能量的Ising-like CE 表达式:
$\Delta H_{conf}(\{\hat{S}_i\})=J_0^{conf}+J_1^{conf}\sum_i \hat{S}_i+\frac{1}{2}\sum_{i,j} J_{ij}^{conf} \hat{S}_i\hat{S}_j+\frac{1}{3!}\sum_{i,j,k}J_{ijk}^{conf}\hat{S}_i\hat{S}_j\hat{S}_k + \dots$
扩展到自由能 $\Delta G_{vib}^{form}(\{\hat{S}_i\},T)$:
$\Delta G_{vib}^{form}(\{\hat{S}_i\},T)=J_0^{vib}(T)+J_1^{vib}(T)\sum_i \hat{S}_i+\frac{1}{2}\sum_{i,j} J_{ij}^{vib}(T) \hat{S}_i\hat{S}_j+\frac{1}{3!}\sum_{i,j,k}J_{ijk}^{vib}(T)\hat{S}_i\hat{S}_j\hat{S}_k + \dots$
再同样使用Monte Carlo进行不同温度的模拟。
### special quasirandom structures(SQS) or supercell method(SC)
选取足够大的超胞,使用SQS或者平均几个随机构型来计算声子信息从而得到振动熵。
近似认为,考虑振动的相变温度$T_c$ 是有序相和无序相的振动熵的差别对不考虑振动时的相变温度 $T_c^{conf}$的修正:
$T_c \approx T_c^{conf}\left(1+\frac{\delta S_{vib,h}^{ord}+\Delta_{qh}/2}{\delta S_{conf}^{ord}}\right)^{-1}$
<hr>
如果认为DPMD可以替代第一种方案,那么需要对每一个构型都能快速评估特定温度的自由能。但在MC抽样时,此时即便势函数的方法很快,但是使用计算一个原子数较多的系统进行声子信息计算的时候,乘上抽样的数量,计算量也是无法接受的。
因此就现在的工具框架来看,就只能考虑使用后面一种方法来计算不同相的自由能。
这时,混合熵部分也可以使用平均场近似。振动熵使用SC或者SQS方法。此时的DPMD给出的力场可以准确的描述振动信息。
但是我这边最希望的还是能够沿用CE对有序无序相变计算的框架,在给出构型和温度可以不用通过声字谱或者分子动力学来计算自由能,而是直接可以把温度作为一个网络的输入。不知道这样是否在理论上可行?
#### Q
1. 是否有现成的势?
2. 效率。直观的时间。
3. 训练需要的样本量。
### 参考文献
使用SQS或SC计算振动熵
1. Shulumba, N., Hellman, O., Raza, Z., Alling, B., Barrirero, J., Mücklich, F., … Odén, M. (2016). Lattice vibrations change the solid solubility of an alloy at high temperatures. Physical Review Letters, 117(20), 1–6. https://doi.org/10.1103/PhysRevLett.117.205502
2. Althoff, J. D., Morgan, D., de Fontaine, D., Asta, M., Foiles, S., & Johnson, D. (1997). Vibrational spectra in ordered and disordered. Physical Review B - Condensed Matter and Materials Physics, 56(10), R5705–R5708. https://doi.org/10.1103/PhysRevB.56.R5705
使用CE描述包括振动熵的相变
1. Ozoliņš, V., Wolverton, C., & Zunger, A. (1998). First-principles theory of vibrational effects on the phase stability of Cu-Au compounds and alloys. Physical Review B - Condensed Matter and Materials Physics, 58(10), R5897–R5900. https://doi.org/10.1103/PhysRevB.58.R5897
## After meeting
## 2019-11-13 in scut with Wang-Han
### Questions (JY)
增量式的学习在DPMD框架中如何实现? SGD?
每加入一个新构型(新的训练数据)后,是整个模型全部重新拟合,还是在原有的NN节点参数上进行改变?
这关系到训练数据集的数量和保存。如果每次都需要大量的训练集,则不易训练,非常消耗内存。
A: 实际实现中并没有采用这样的增量学习,原因是这样的学习依赖于learning rate这一超参,太小则不易获得新的信息,太大则会丢失已学习的信息。而这个参数的设施非常tricky。因此直接全部重新学习。
而且实际上,对内存的占用并不是来自于过多的训练样本。对于GAP来说,内存的巨大消耗来自于结构和结构之间两两组成的一个巨大的对比矩阵。这个矩阵的维度是训练样本数量。
与AiiDA对接时,使用trajectoryData的数据结构来储存每一个原始构型MD跑出来的数据,对不同的原始构型按照structureData储存。
- 那么如果不是MD跑出来的数据,需要怎么储存?需要一个怎样的数据结构?仿照trajectoryData?
A:在MD中以及dpgen现有框架中,有关于frames和system的定义,分别对应某类相关构型的集合。
在最后的储存中,希望保存的也并不是全部的探索数据,而是全部用以labeling的数据。因此对于可能探索的数据量为1e8的构型空间中的样本,最后需要储存的可能只是1e4数量的样本(MgAl势)。
"active learning" , "concurrent learning" [Active Learning of Linearly Parametrized Interatomic Potentials](https://arxiv.org/pdf/1611.09346.pdf)
deepmd中数据库的构造和作用。
A:这里的还是有别于数据集。对最后模型产生影响的训练数据可以是一个没有层次的集合,但对于后续需要对这个模型进行拓展时有必要知道该模型训练数据使用的层次(探索的条件,不同训练样本子集合的包含体系范围)。
What is end-to-end model? NaN
#### 当前Alloy体系
1. enumerate + MC for lattice site configurations.(same as normal CE)
2. for each configurations generated above, run a MD at certain T to get enough configurations for learning (concurrent learning choose)
3. After 1,2 we expecte having a good potential function.
4. Still only use the deepMD as a alternative to EAM etc.
5. Is there any possibility that temperature added as input? So that we can get the free energy at that temperature? ref above for purpose.
在原始工作中,通过CE得到的振动贡献简单的和构型部分加和来做MC模拟相变Tc。
A:当获得有效的势函数后,可以不再采用原有的CE在温度依赖下的使用。而直接采用TI的方法来获得相变和熵的信息。(TODO:使用现有EAM势来进行这个工作,最后用dpmd来替换测试CuAu体系。)
## 一些疑问(CH)
### 关于descriptor
- deepmd构造了一个可以置换不变的函数来保证置换不变性,但是是否由此引入了额外的信息,例如我们是否可以使得descriptor按照某一个顺序,或者像PCA来求本征值就消除了顺序带来的影响 (当然这只是一个粗糙的想法,因为例如库仑矩阵,他是使用矩阵的本征值(从小到大排序)来做descriptor, SOAP就是利用球谐函数展开的系数,都是从构造的原理出发就避免了置换不变性).
- 因为从时间上比较,我训练1e4+的boron数据大约二十分钟(24个CPU, Intel Xeon E5-2630),感觉deepmd有些慢, 因为我还没有测试过deepmd在boron 数据上的效果, 不知道是不是与此有关系.
A: 这个问题其实我没有问,因为看起来他这需要多次重新训练的确需要很长的时间周期才可以训练完毕
### 关于势函数适用范围
- 如何确保在小体系的训练好的势函数在大的体系依旧适用?如果不可以,为什么?长程关联的存在?
- GAP 测试, 训练及使用较小的cell的数据,预测较大的cell的能量,效果就不好了
- 
*train-test effect in boron plane data (atom number of a unit cell <=30 )*

*train-test effect in boron plane data (atom number of a unit cell ~ 130 )*
- 
*prediction of a large boron cell contain 130 atoms, which performs not well*
- 之后会用deepmd做一下这个体系的测试
- 是否有必要做一个很通用的势函数,例如0D(molecule)-1D-2D-3D, 是否只是对于特定的维度,或者特征训练好一个势函数就可以了?
A: 这个是可以的,不过还没有做过测试(我可以尝试做一个测试,包括使用GAP)
### 关于deepGen
- 这一步是为了生成更好的势函数来做MD吧?
A: 为了生成更多的结构从而训练更好的势函数
### 近期的研究方向
- 使用 lammps+GAP 做不同温度下B平面空位分布随着温度变化的情况
- B cluster 从小到大的生长情况
- 你们近期的研究方向,希望可以去学习一下