用自动微分与隐式微分算地球物理反演的灵敏度与梯度
论文信息:Liu, L., Yang, B., Zhang, Y., Xu, Y., Peng, Z., & Yang, D. (2024). Calculating sensitivity or gradient for geophysical inverse problems using automatic and implicit differentiation. Computers & Geosciences, 193, 105736. https://doi.org/10.1016/j.cageo.2024.105736 在地球物理反演里,灵敏度矩阵与目标函数梯度是几乎所有确定性优化算法的"燃料",它们的准确与否直接决定反演能否收敛、收敛得多快。然而,对每个算子手工推导、编码并调试其导数公式,往往是耗时且极易出错的一环。本文(第一作者刘连,来自南方科技大学;浙江大学团队共同完成,张壹参与其中)提出并系统检验了一套自动微分 + 隐式微分(Automatic Differentiation with Implicit Differentiation,简称 ADID)的方案,能够自动而精确地算出灵敏度与梯度,并将其接入 3D 电磁法与直流电阻率反演。下面围绕这篇 Computers & Geosciences 论文,梳理其动机、方法与数值结果。 灵敏度/梯度为什么是反演绕不开的"硬骨头" 地球物理反演是非线性的、且因观测覆盖不足与模型空间存在零空间而严重欠定。求解这类问题要么走确定性路线(如 Occam、非线性共轭梯度、L-BFGS),要么走随机路线(如贝叶斯 / 转维抽样)。无论哪种,确定性框架下都要反复计算两类量:正演响应与灵敏度/梯度——后者正是目标函数对模型参数的偏导数。 对灵敏度/梯度的计算,传统上有三条路径(McGillivray & Oldenburg, 1990): 扰动法(perturbation):对每个模型参数额外求解一个全新的正演问题,代价随参数个数线性暴涨。 灵敏度方程法(sensitivity equation):计算量与扰动法相当。 伴随方程法(adjoint equation,AE):只需解少量额外的子正演来拼出灵敏度矩阵,或多次解一个伴随正演来得到梯度向量,是过去数十年里电磁反演(MT、DC、CSEM)的首选。 伴随法与灵敏度方程法都利用了线性方程组系数矩阵可复用的特性,但它们的痛点在于:需要手工推导、编码并调试相关的导数公式。尤其是当代码"看起来能跑、结果不离谱"时,隐藏在导数实现里的错误格外难揪出来。 方法:让自动微分"接管"难啃的线性求解部分 自动微分(AD)本质上是链式法则 + 编程技术:复杂的函数被拆成一系列初等代数运算(指数、对数、三角等),它们的导数都是良定义的,再用链式法则拼起来即可得到任意复合函数的导数,而且保证精确、无需手工推导。自 Sambridge 等(2007)把 AD 引入地球物理以来,它已广泛用于地震全波形反演等优化问题。 但 AD 在地球物理中一直"卡壳"在一点:地球物理正演(如 MT/DC 的电磁场)通常要求解线性方程组 Ku = s,其中 K 是系数矩阵、u 是物性场。线性求解器本身是迭代过程,不属于初等代数函数,AD 无法显式地对它的解求导。常见的两个补丁都不理想: ...