链式法则

链式法则是矩阵求导的交通系统。单个公式像一条街,链式法则让整座城市能跑起来。

反向传播视角

假设 \(L=f(\boldsymbol{Y})\),而 \(\boldsymbol{Y}=g(\boldsymbol{X})\)。你可以先写前向微分:

\[ dY=\mathcal{J}_g[dX], \]

这里 \(\mathcal{J}_g\) 是一个线性算子。若上游梯度是 \(\boldsymbol{G}=\nabla_{\boldsymbol{Y}} L\),则:

\[ dL=\langle \boldsymbol{G},dY\rangle_F =\langle \boldsymbol{G},\mathcal{J}_g[dX]\rangle_F. \]

现在关键是把线性算子“搬到另一边”:

\[ dL=\langle \mathcal{J}_g^\ast[\boldsymbol{G}],dX\rangle_F. \]

所以:

\[ \nabla_{\boldsymbol{X}} L=\mathcal{J}_g^\ast[\boldsymbol{G}]. \]

这就是伴随算子的意义。它像物流系统里的逆向售后:商品怎么送出去不重要,重要的是投诉和退款能沿着正确路径回来。

两个组合例子

例一:\(L=\|\boldsymbol{A}\boldsymbol{X}\boldsymbol{B}-\boldsymbol{C}\|_F^2\)。令 \(\boldsymbol{R}=\boldsymbol{A}\boldsymbol{X}\boldsymbol{B}-\boldsymbol{C}\),则:

\[ dL=2\mathrm{tr}(\boldsymbol{R}^T \boldsymbol{A}\,dX\,\boldsymbol{B}), \] \[ \nabla_{\boldsymbol{X}} L=2\boldsymbol{A}^T(\boldsymbol{A}\boldsymbol{X}\boldsymbol{B}-\boldsymbol{C})\boldsymbol{B}^T. \]

例二:\(L=\frac12\|\boldsymbol{X}\boldsymbol{X}^T-\boldsymbol{M}\|_F^2\),令 \(\boldsymbol{R}=\boldsymbol{X}\boldsymbol{X}^T-\boldsymbol{M}\)。若 \(\boldsymbol{M}\) 对称,则 \(\boldsymbol{R}\) 对称:

\[ dR=dX\,\boldsymbol{X}^T+\boldsymbol{X}\,d\boldsymbol{X}^T, \] \[ dL=\mathrm{tr}(\boldsymbol{R}^T dX \boldsymbol{X}^T)+\mathrm{tr}(\boldsymbol{R}^T \boldsymbol{X} d\boldsymbol{X}^T), \] \[ \nabla_{\boldsymbol{X}} L=2RX=2(\boldsymbol{X}\boldsymbol{X}^T-\boldsymbol{M})\boldsymbol{X}. \]

这个例子很适合提醒自己:一个 \(\boldsymbol{X}\) 出现两次,就要收两份账。它不是重复打印,而是两个位置都对变化有贡献。