1. 课程导入与问题界定
在工程与科学计算中,我们几乎不会面对一个“干净”的模型。水文模型里的渗透系数、结构有限元模型里的弹性模量、化工反应器模型里的活化能、乃至机器学习代理模型里的超参数,都带有不确定性。这些输入的不确定性会沿着模型传递,最终让输出——洪峰流量、最大应力、反应转化率、预测误差——也变成一个分布,而不是一个确定的数。敏感性分析要回答的核心问题就是:在输出不确定性的总方差中,各个输入各自贡献了多少?
局部敏感性分析(如在某点求偏导、做单因素±10%扰动)回答的是“在当前工作点附近,输入变化一点点会怎样”。它计算便宜、解释直观,但有两个致命局限:其一,它只在局部有效,而真实输入往往在较大范围内变动;其二,它无法捕捉输入之间的交互作用——当两个参数同时变化时产生的效应,可能远大于它们各自单独变化之和。Sobol方法正是为突破这两点而设计的全局、基于方差分解的敏感性分析框架。
核心思想:把输出方差“分账”
Sobol方法把模型写成 Y = f(X₁, X₂, …, X_d),其中各输入 Xᵢ 是相互独立的随机变量,各自服从给定的分布(均匀、正态、对数正态等)。在此前提下,输出方差 Var(Y) 可以严格分解为:
Var(Y) = Σᵢ Vᵢ + Σᵢ<ⱼ Vᵢⱼ + … + V₁₂…d
Vᵢ = Var( E[Y | Xᵢ] ) —— 一阶(主)效应
Vᵢⱼ = Var( E[Y | Xᵢ, Xⱼ] ) − Vᵢ − Vⱼ —— 二阶交互效应
Sᵢ = Vᵢ / Var(Y) —— 一阶敏感性指数
Sᵀᵢ = E[ Var(Y | X₋ᵢ) ] / Var(Y) —— 总效应指数
这里 E[Y | Xᵢ] 的含义是:固定 Xᵢ 取某个值,让其余所有输入在其分布上自由变动,得到的条件期望;再让 Xᵢ 遍历其分布,这个条件期望的方差就是 Vᵢ。直观地说,Sᵢ 衡量“只把 Xᵢ 的不确定性消除,输出方差能减少的比例”;Sᵀᵢ 衡量“把 Xᵢ 连同它参与的所有交互全部消除,输出方差能减少的比例”。两者之差 Sᵀᵢ − Sᵢ 就是该输入参与交互作用的程度,这是Sobol方法最有诊断价值的输出之一。
从“是什么”到“怎么用”:本课程的学习路径
理解公式只是起点。真正把Sobol方法用起来,需要打通四个环节。第一是问题界定:明确输出量是什么、输入变量有哪些、每个输入的分布如何设定、变量之间是否满足独立性假设。这一步做错,后面所有指数都会失真。第二是采样设计:Sobol估计依赖特定的样本矩阵结构(如Saltelli采样),样本量 N×(2d+2) 随维数线性增长,需要在精度与计算成本之间权衡。第三是指数估计:用Monte Carlo或拟Monte Carlo方法估计 Sᵢ 与 Sᵀᵢ,并给出置信区间。第四是结果解读与决策:识别关键参数、发现交互结构、指导参数率定优先级或实验设计。
需要特别提醒的是独立性假设。经典Sobol分解要求输入相互独立;若参数间存在相关性(例如两个几何尺寸受同一工艺约束),方差分解不再唯一,需要改用基于Shapley值或条件分解的扩展方法。课程后续会专门讨论这一边界条件。
Y = X₁ + 2X₂ + X₁X₂,输入均为[0,1]均匀分布)手算或编程验证指数,这比直接套用现成工具包更能建立对 Sᵢ、Sᵀᵢ 数值含义的直觉。本课程共30节,将从方差分解的数学基础出发,依次覆盖Saltelli采样、一阶与总效应估计、收敛性诊断、相关性输入的处理、代理模型加速,以及在水文、结构、化工等场景中的完整案例。第1节的任务不是记住所有公式,而是建立一张“问题地图”:知道Sobol方法解决什么问题、不解决什么问题、输入输出分别是什么、结果长什么样。带着这张地图进入后续学习,每一个技术细节才能找到自己的位置。