形式陈述
设参数 θ ∈ R p ,实矩阵 A ( θ ) ∈ R n × n 、右端 b ( θ ) ∈ R n 与标量目标 J ( θ , u ) 都为 C 1 。在所考察的 θ 处,假设 A ( θ ) 可逆。定义线性方程组 公理库 线性方程组 System of linear equations 可写为矩阵方程 Ax=b 的有限个一次方程系统。 的精确解和约化目标
A ( θ ) u ( θ ) = b ( θ ) , J ^ ( θ ) = J ( θ , u ( θ ) ) . 行列式的连续性保证该点的某个邻域中 A 仍可逆,u = A − 1 b 在此邻域为 C 1 。本页计算的是这个解映射的导数;算法实现使用求解而不显式形成逆矩阵。
切向方程与伴随恒等式
固定参数方向 h ,用点号表示沿 h 的导数。微分原方程得到
A ˙ u + A u ˙ = b ˙ , A u ˙ = b ˙ − A ˙ u . 由链式法则 公理库 链式法则 Chain rule 复合映射的导数等于各层导数按计算顺序组成的线性映射复合。 ,
D J ^ ( θ ) [ h ] = ∂ θ J ( θ , u ) [ h ] + g T u ˙ , g = ∇ u J ( θ , u ) . 这里 ∂ θ J 固定 u ,不能漏掉目标对参数的直接依赖。定义伴随向量为转置系统的解
A T λ = g . 于是无需显式算出 u ˙ 就有
g T u ˙ = λ T A u ˙ = λ T ( b ˙ − A ˙ u ) , 从而
D J ^ ( θ ) [ h ] = ∂ θ J ( θ , u ) [ h ] + λ T ( D b ( θ ) [ h ] − D A ( θ ) [ h ] u ) . 取各坐标方向,梯度分量为
∂ J ^ ∂ θ j = ∂ J ∂ θ j + λ T ( ∂ b ∂ θ j − ∂ A ∂ θ j u ) . 这就是离散伴随:对已经给定的有限维代数方程求导,再解其转置系统。它不需要先对连续 PDE 求伴随,也没有自动证明连续伴随离散化与这套方程完全相同。
有限求解过程与因子复用
输入包括 A , b , J 及其所需导数接口、参数值,以及数值实现使用的残差容差。执行顺序是:先解 A u = b ;在所得状态计算 J , g , ∂ θ J ;再解 A T λ = g ;最后计算上述方向收缩或全部参数分量。输出目标值、导数、两次求解的残差及状态。奇异、不可用主元或非有限值应返回失败;采用有迭代预算的求解器时,预算耗尽而未满足标准也应明确返回未收敛状态。只有各步骤完成才返回成功,数值误差仍需结合条件性解释。
对稠密可逆矩阵,用带置换 LU 公理库 Gaussian 消元与 LU 分解 Gaussian elimination · LU factorization · PA equals LU 把 Gaussian 消元保存为可复用的带置换 LU 分解,再用三角求解处理一个或多个右端。 得到 P A = L U 。正向求解是
L y = P b , U u = y . 因为 A T = U T L T P ,转置求解可以复用同一组因子:
U T z = g , L T w = z , λ = P T w . 置换在转置求解的末端施加,不能照抄正向的 P b 顺序。一次稠密因子分解需 O ( n 3 ) 工作和 O ( n 2 ) 存储,每个普通或转置右端需 O ( n 2 ) 工作;不必重新分解 A T 。
对一个标量目标,伴随右端数不随参数个数 p 增长。这只是在数求解次数:导数接口、参数收缩和输出 p 个分量仍有成本。若只要一个方向导数,解一次切向方程同样自然;若有多个独立目标,每个目标通常有自己的伴随右端。
直觉
切向方法先问每个参数扰动如何改变整份状态 u ˙ ,再把状态变化投到目标上。伴随方法先把目标敏感度 g 通过转置系统传回来,得到 λ ,随后任何参数方向只需与方程变化 b ˙ − A ˙ u 做内积。
转置来自内积恒等式 g T A − 1 q = ( A − T g ) T q 。它并不意味着原方程是对称的;即便 A 对称,u 和 λ 的右端通常不同,也不能把两个向量混为一谈。
图片加载失败 图中两条求解路径共用同一组因子。状态 u 既用于计算目标的状态梯度 g ,也进入右侧参数收缩;直接参数项必须另外相加。
例子与边界
二维系统的三种核对
取
A ( θ ) = ( θ + 2 1 1 2 ) , b = ( 1 0 ) , J ( θ , u ) = 1 2 u T u . 在 θ = 0 ,原方程、切向方程与伴随方程分别给出:
对象
方程右端
解
原状态 u
b = ( 1 , 0 ) T
( 2 / 3 , − 1 / 3 ) T
切向状态 u ˙
− A ˙ u = ( − 2 / 3 , 0 ) T
( − 4 / 9 , 2 / 9 ) T
伴随 λ
g = u = ( 2 / 3 , − 1 / 3 ) T
( 5 / 9 , − 4 / 9 ) T
取参数方向 h = 1 。切向计算得到
u T u ˙ = 2 3 ( − 4 9 ) − 1 3 2 9 = − 10 27 . 伴随计算只取 A 左上角的参数变化,因此
− λ T A ˙ u = − 5 9 2 3 = − 10 27 . 第三种核对直接解出
u ( θ ) = 1 3 + 2 θ ( 2 − 1 ) , J ^ ( θ ) = 5 2 ( 3 + 2 θ ) 2 , J ^ ′ ( 0 ) = − 10 27 . 这里 A 对称而 λ ≠ u ;两次求解是同一系数矩阵、不同右端。
有限次迭代是另一个映射
考虑标量系统 ( θ + 2 ) u = 1 ,目标仍为 J = 1 2 u 2 。精确解目标为
J ^ ( θ ) = 1 2 ( θ + 2 ) 2 , J ^ ′ ( 0 ) = − 1 8 . 从 u 0 = 0 运行一步固定步长 Richardson 迭代,
u 1 = u 0 + 1 3 ( 1 − ( θ + 2 ) u 0 ) = 1 3 . 这一步程序输出与 θ 无关,所以对实际程序目标 1 2 u 1 2 求导,结果为 0 。若把尚未收敛的 u 1 填进隐式公式,再精确解 ( θ + 2 ) λ ~ = u 1 ,则在零点得到
− λ ~ u 1 = − 1 18 . 0 、− 1 / 18 和 − 1 / 8 分别对应有限程序导数、代入近似状态的隐式估计、精确解导数。此迭代在零点邻域内是收敛的;差异来自只运行了一步,不能归因于选了一个发散方法。对有限迭代反向传播可以正确计算该程序的导数,但它的目标并不是精确解映射。
两个残差与条件性
对近似状态 u ~ ,令 r = b − A u ~ ,则
u − u ~ = A − 1 r . 对固定的精确右端 g ,若 r λ = g − A T λ ~ ,则
λ − λ ~ = A − T r λ . 这些误差通过乘积进入导数,因此小残差必须结合线性系统条件性 公理库 线性方程组的条件数与扰动 Conditioning of linear systems · Matrix condition number 把一般问题条件性具体化为可逆线性系统的右端、系数矩阵与联合扰动界。 解释。实际 g = ∇ u J ( θ , u ) 还可能随状态变化;若在 u ~ 上计算它,伴随右端也有误差,不能只报告转置求解器相对于这个近似右端的残差。伴随公式减少了右端数,并不自动改善问题条件性。
推论与应用
把线性求解看作 S ( A , b ) = A − 1 b 原语,给定输出敏感度 g 后,其反向自动微分 公理库 自动微分 Automatic differentiation · Algorithmic differentiation · JVP · VJP 在有限计算图上逐槽传播切向量与累加伴随量,以线性于程序长度的工作计算一个 Jacobian 向量积或转置向量积。 规则可写成
b ¯ = λ , A ¯ = − λ u T , A T λ = g . 这是因为 λ T ( d b − d A u ) 中矩阵项恰为 Frobenius 配对 ⟨ − λ u T , d A ⟩ F 。它只描述通过求解输出的贡献;目标若还直接依赖 A 或 b ,相应偏导要另外累加。参数化稀疏矩阵时可以直接计算 λ T ( ∂ j A ) u ,不一定显式生成稠密 A ¯ 。
该接口可用于参数估计、离散约束优化与可微仿真。若后续还需二阶方向信息,Hessian–向量积 公理库 Hessian–向量积 Hessian-vector product · HVP · Forward-over-reverse differentiation 对反向梯度程序再作一次前向方向微分,逐槽累加 Hessian–向量积,并核对共享节点、成本和二阶光滑性边界。 提供组合求导的组织方式,但须增加所需的二阶光滑性,并让各次原方程和转置求解达到相应精度。本页只证明实数、非奇异线性系统的一阶导数;奇异系统的选解规则和复数求导需另行规定。
参考资料