克里金法(高斯过程回归)代理模型
Kriging的理论基础
代理模型的思想
我想做蒙特卡洛不确定度分析,可CAE一次要30分钟,跑一万次根本不可能……
这正是代理(surrogate)模型的用武之地。CAE只算几十到几百次,用统计模型学会"输入→响应"的关系,之后的一万次都问模型,每次毫秒级。众多代理里Kriging(高斯过程回归)之所以成为标配,是因为一个独一无二的性质:它不但给出预测值,还给出预测的不确定度。这份方差信息会告诉你下一个样本该加在哪——模型会自己申报自己的弱点。
高斯过程的定式
把响应 \( f(\mathbf{x}) \) 看作均值 \( \mu(\mathbf{x}) \)、协方差核 \( k(\mathbf{x}, \mathbf{x}') \) 的高斯过程。给定训练点 \( X \) 与观测 \( \mathbf{y} \),未知点 \( \mathbf{x}_* \) 的预测有闭式解:
$$ \hat{f}(\mathbf{x}_*) = \mu + \mathbf{k}_*^T K^{-1} (\mathbf{y} - \mu\mathbf{1}), \qquad \hat{\sigma}^2(\mathbf{x}_*) = k(\mathbf{x}_*, \mathbf{x}_*) - \mathbf{k}_*^T K^{-1} \mathbf{k}_* $$
其中 \( K \) 是训练点间协方差矩阵、\( \mathbf{k}_* \) 是训练-预测协方差向量。预测均值精确通过训练点(插值性);预测方差在训练点处为零、离得越远越大。
核函数选择与光滑性假设
| 核函数 | 光滑性 | 对CAE响应的适配 |
|---|---|---|
| 平方指数(RBF/高斯) | 无穷次可微 | 光滑假设过强,常低估方差 |
| Matérn 5/2 | 二次可微 | CAE响应的事实标准;光滑性假设贴近现实 |
| Matérn 3/2 | 一次可微 | 响应有折点的问题——接触、屈曲 |
各输入维独立的长度尺度 \( \ell_i \)(ARD)表示"沿该方向走多远响应才变化",训练后其大小可直接当灵敏度信息读(\( \ell_i \) 大=不起作用的因子)。
训练与验证的数值方法
超参数估计与数值上的注意
长度尺度、方差等超参数由对数边际似然最大化确定。该优化多峰,多起点(约10次重启)是必须的。训练点接近时协方差矩阵 \( K \) 病态、Cholesky分解失败;对角加微小量的nugget是对策——它不只是数值补丁,物理上就是"观测噪声方差"。CAE虽是确定性的,但网格重生成、收敛截断带来的数值噪声真实存在,把nugget纳入估计参数是实务上的安全做法。
初始抽样设计
初始DOE用拉丁超立方(LHS,maximin准则),样本数经验值"维数的10倍"(\( n = 10d \))——这只是起点,前提是后面用主动学习补点。范围要比下游使用域稍宽,因为Kriging的外推极差:让使用域被训练域覆盖。
验证——LOO交叉验证与Q²
代理质量用无需追加计算的留一交叉验证(LOO-CV)确认(Kriging有闭式快速算法):
$$ Q^2 = 1 - \frac{\sum_i (y_i - \hat{y}_{-i})^2}{\sum_i (y_i - \bar{y})^2} $$
参考线:一般 \( Q^2 \ge 0.9 \);只为把握优化趋势0.8也可用;可靠性分析的尾部概率要≥0.95。另查标准化残差 \( (y_i - \hat{y}_{-i})/\hat{\sigma}_{-i} \) 是否落在±3内——大幅越界说明预测方差不可信(重审噪声与核函数)。
主动学习——用方差信息补样本
Kriging最大的武器是基于预测方差的逐次抽样,按目标选获取准则:
- 全局精度——加在预测方差最大处(简单但爱往角落跑)
- 优化——期望改进量(EI)最大处(贝叶斯优化·EGO)
- 可靠性分析——极限状态面 \( \hat{f}(\mathbf{x}) = 0 \) 附近分类最模糊处(U函数·AK-MCS)
"初始LHS→验证→按目标逐次补点→收敛判定"的循环,同等预算下远胜一次性固定抽样。
实务应用流程
标准工作流
- 筛选——因子超过10个先用Morris法降维(Kriging怕高维)
- 输入归一化——各因子归到[0,1];稳定不同单位下的长度尺度估计
- 初始DOE——LHS取 \( 10d \) 点;失败算例打标记入档
- 拟合与验证——默认Matérn 5/2+ARD+nugget估计;LOO看Q²与标准化残差
- 逐次补点——按目标的获取准则加到预算为止;记录Q²的推移
- 正式使用——在代理上跑蒙特卡洛、Sobol'指数、优化;最终候选点用真CAE复算验证
失败算例与不连续响应的处理
设计空间某处分析崩溃(屈曲发散、网格失败)时,把这些点悄悄剔除,代理会在它一无所知的区域平滑插值,然后把最优解预测到不可行区里面去。对策:①用另一个分类模型(GP分类等)学习可行性并组合;②物理边界已知就直接限制范围。接触通断、屈曲模态切换这类不连续响应,单一全局Kriging很吃力——用区域分割(聚类+局部模型)或换Matérn 3/2。
从标量到场输出的扩展
要代理应力分布、温度场这类大规模场输出,定式做法是先用POD把场压缩成少数模态系数,逐系数建Kriging(POD+Kriging)。模态数按累计能量约99%截取,重构误差与代理误差分开报告。
实现工具与CAE集成
主要库·工具对比
| 工具 | 特点 | 适用 |
|---|---|---|
| scikit-learn(GaussianProcessRegressor) | 上手最快;核函数组合方便 | 原型验证·中小规模 |
| SMT(Surrogate Modeling Toolbox) | 工程代理特化:KRG·MFK(多保真)·GEK(梯度) | CAE实务全域 |
| GPyTorch | GPU·大数据·变分近似 | 数千点以上的大规模训练 |
| UQLab(MATLAB)/OpenTURNS | UQ框架一体(连PCE·可靠性) | V&V报告一条龙 |
| Dakota/optiSLang等 | 求解器联动·作业管理内置 | 大规模DOE的运营 |
最小实现示例(scikit-learn)
import numpy as np
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import Matern, WhiteKernel, ConstantKernel
kernel = (ConstantKernel() * Matern(length_scale=np.ones(d), nu=2.5)
+ WhiteKernel(noise_level=1e-6)) # nugget=数值噪声
gp = GaussianProcessRegressor(kernel=kernel, normalize_y=True,
n_restarts_optimizer=10) # 多起点
gp.fit(X_train, y_train) # X_train: LHS处的CAE结果
y_pred, y_std = gp.predict(X_new, return_std=True) # 预测值与预测标准差
养成训练后打印 gp.kernel_ 的习惯:长度尺度既能核对灵敏度的合理性(该起作用的因子尺度是否小),又能检查超参数健康度(有没有贴边)。
前沿研究动态
多保真Kriging
把粗网格(便宜·低精度)与细网格(昂贵·高精度)结果融合的co-Kriging/MFK(multi-fidelity Kriging),是与CAE相性极佳的进化形。低保真模型抓响应的全局形状、少量高保真样本做修正,以高保真单打的几分之一成本达到同等精度的报告屡见不鲜。层级不限于网格粗细:2D vs 3D、线性 vs 非线性同样可构成。
梯度增强Kriging(GEK)
伴随求解器能便宜给出梯度的场合(CFD伴随、结构设计灵敏度),把梯度观测嵌入协方差结构的GEK每次分析能拿到 \( 1 + d \) 条信息——高维问题的样本效率大幅改善。梯度的数值噪声用梯度侧的nugget处理。
高维化与深度学习的衔接
Kriging的实用上限在维数 \( d \approx 20 \) 前后;再往上要靠active subspace(辨识响应实际变化的低维子空间)与子空间旋转的并用。深核学习(NN提特征→末端接GP)兼顾不连续·多峰响应的适应力与GP的方差估计,正在发展中。采用与否的实务判据始终是"预测方差是否仍然校准"(查标准化残差的分布)。
故障排查
按症状的原因与对策
| 症状 | 可能原因 | 对策 |
|---|---|---|
| Cholesky分解报错·条件数警告 | 训练点近重复、无nugget | 合并重复点;把WhiteKernel/nugget纳入估计 |
| 长度尺度贴上下界 | 贴上界=该因子不起作用;贴下界=响应含噪/不连续 | 剔除不起作用因子;找噪声源或换Matérn 3/2 |
| Q²很高、新点却预测不准 | 训练点成簇使LOO偏乐观;在外推 | 用留出点复验;确认使用域在训练域内 |
| 预测方差明显偏小 | RBF过度光滑、噪声未计入 | 换Matérn、估计nugget,用标准化残差查校准 |
| 响应的折点·跳变被抹平 | 不连续响应配了全局平稳核 | 区域分割+局部模型;与分类器组合 |
| 逐次补点扎堆在同一处 | 获取函数与目标不符、噪声让方差压不下去 | 换成匹配目标的获取准则;查nugget;调探索权重 |
代理可以信到什么程度
通过了验证的代理模型,它给出的概率和最优解可以直接写进报告吗?
可以——但守住两条原则。第一,只在训练域内部使用:Kriging的外推只是平滑地退回均值函数,那里没有物理。第二,最终结论用真CAE收口:把最优候选点、可靠性分析则把极限状态附近的代表点,用实际分析复算几个,确认落在代理的预测±方差之内。守住这两条,代理就是"用几百次CAE的预算换几万次答案"的正当工具;不收口的报告,Q²再高也无法验证。
相关文章:Morris法参数筛选、稀疏PCE与LAR、贝叶斯标定。
帮助
更多
错误