hiPhive专题

hiPhive 正则化与独立验证

实际比较OLS和四档Ridge强度,说明训练缩放、验证集选择及欠拟合。

更新于 2026-10-30约 4 分钟阅读按任务与环境选择适用配置
阅读本篇目录

正则化可以限制参数,但强度越大并不一定越好。本例直接运行trainstation的OLS和Ridge,用独立验证集选择强度,再报告另一条轨迹的测试误差。

实际Ridge曲线,以及OLS与强正则化的预测力对照

1. 明确本例优化的量#

训练矩阵是A、力标签是y。先只用训练行计算每列标准差s,再构造Z=A/s;Ridge求解 ||Zp−y||² + α||p||²。物理基组参数为p/s。本例没有力标签归一化,也不使用全数据的列标准差。

同样的α,在不同特征缩放或平均误差定义下含义会变化。若目标函数把残差平方和除以样本数,就不能直接照抄这里的α。

2. 实际调用方式#

from trainstation import Optimizer
scale = A[trainrows].std(axis=0)
Z = A / scale
opt = Optimizer((Z.copy(), y.copy()), fit_method='ridge',
                standardize=False, alpha=0.01,
                train_set=trainrows, test_set=validationrows)
opt.train()
parameters = opt.parameters / scale

这里 test_set 是trainstation接口参数名,传入的是用于参数选择的验证集;真正独立种子测试集没有传入优化器。完整数据整理、构型索引与输出见 fit_models.py。OLS用 fit_method='least-squares',不传alpha。本例实际比较OLS、10⁻⁶、0.01、1和100,而不是仅列出可用方法。

3. 从终端查看这次结果#

cat fit/600K-c4p2-3p0/SELECTION.json
cat fit/600K-c4p2-3p0/alpha-0/FIT.json
cat fit/600K-c4p2-3p0/alpha-100.0/FIT.json

先运行下载包中的完整流程。下面是实际600K、FC2/FC3截断4.2/3Å模型,单位eV/Å:

α 训练RMSE 验证RMSE 测试RMSE
0 0.062725 0.058457 0.062836
1e-06 0.062725 0.058457 0.062836
0.01 0.062725 0.058493 0.062838
1 0.065810 0.065314 0.066094
100 0.411062 0.452219 0.420256

α很小时结果接近OLS;α=100时,训练、验证、测试误差同时明显增大,图中预测力也偏离y=x,是本例的欠拟合。无需为了“用了机器学习”而刻意选择正则化。其他更大、更病态或标签有噪声的数据集可能需要不同方法和强度。

4. 保存模型与检查数值#

每个强度目录中有 potential.fcp、fit.npz 和 FIT.json;对应空间目录保存 design.npz。分析会重新算预测和RMSE,并与独立的最小二乘/带惩罚正规方程核对。后者用于本例的小矩阵检查,实际大问题应使用可靠求解器,避免直接求逆。

序列化模型还通过轨道力常数读取和全张量力对照,不将“读回成功”当作对材料准确的证明。trainstation还提供LASSO、Elasticnet等方法,见官方方法参考;本篇的实际运行范围是OLS与Ridge。

下载与运行#

下载Si64轨迹、输入、拟合模型与绘图脚本。解压后先看随包结果:

bash analyze.sh

结果位于 reference/analysis/,图片位于 reference/figures/。在新的解压目录重新运行全部六个温度/种子条件、拟合和声子处理:

sbatch run.slurm

默认一张P100、一个CPU核、30分钟,分区为 gpu-8p100-hs;套餐用户按自己的权限改为例如 gpu-8p100-tc。也可将六个条件并行提交:

bash submit.sh

并行入口在 submit.py 中修改分区;只生成脚本用 bash submit.sh --dry-run。全部完成后:

bash analyze.sh work fit static-checks

bash run.sh si-600K-seed1 是已经分配GPU资源后的单例入口,会做该条MD和三个末态抽查;拟合需要六条轨迹齐全,再用 bash fit.sh。不要在登录节点直接运行MD。重跑请重新解压,脚本不会覆盖已有work/fit/jobs目录。

本例环境为GPUMD5.9.1 P100构建(GCC13.3、CUDA12.9)、hiPhive1.5与Phonopy4.8.3,入口已配置所需Python工具环境。力标签由 Si_2022_NEP4_5body.txt 产生,不是DFT力;它用于低成本演示拟合与判断参数。64原子、每条20ps生产轨迹和两个种子不足以给出收敛材料频移、完整稳定性或精度排名。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗