Skip to content

神经网络反向传播:理论与数学推导 ​

1. 链式法则与上游梯度 ​

设损失 L 为标量,中间变量 z=f(x,y)。若 x,y,z 都是标量,则

∂L∂x=∂L∂z∂z∂x,∂L∂y=∂L∂z∂z∂y.

其中 ∂L/∂z 是上游梯度,∂z/∂x 与 ∂z/∂y 是局部导数。反向传播反复应用这条链式法则,从 L 逐层求出各输入和参数的梯度。

对于向量 y=f(x),令雅可比矩阵 Jij=∂yi/∂xj,并将梯度记为列向量,则

∇xL=JT∇yL,∂L∂xj=∑i∂L∂yi∂yi∂xj.

这个乘积称为向量—雅可比积(VJP)。反向传播只需计算该乘积,无须显式构造完整的 J。

2. 多路径的梯度累加 ​

若变量 x 经多条路径影响 L,各路径的贡献相加。例如 L=x2+x 中,乘法 x⋅x 的两个输入位置分别贡献 x,加法的另一条路径贡献 1,因此

dLdx=x+x+1=2x+1.

在 x=3 时,梯度为 7。对共享中间变量也一样:若 u=x2 且 L=u+u,则

∂L∂u=1+1=2,dLdx=∂L∂ududx=2(2x)=4x.

计算图是有向无环图。同一节点可能接收多个下游节点的梯度,因此须先将这些贡献求和,再用该节点的局部导数继续向输入传播;这对应从输出到输入的反向拓扑顺序。

若 E(v) 是从 v 出发的计算图边的集合,c(e) 是边 e 所指向的下游节点,Je 是该输入位置的局部雅可比矩阵,则一般形式为

∇vL=∑e∈E(v)JeT∇c(e)L.

按边求和保留了 x⋅x 中指向同一乘法节点的两份贡献。

3. 逐元素运算 ​

设 X,Y,Z 形状相同,G=∂L/∂Z,符号 ⊙ 与 ⊘ 分别表示逐元素乘、除。对每个元素应用标量链式法则,得到

前向运算∂L/∂X∂L/∂Y
Z=X+YGG
Z=X−YG−G
Z=X⊙YG⊙YG⊙X
Z=X⊘YG⊘Y−(G⊙X)⊘(Y⊙Y)

例如 zi=xi/yi=xiyi−1。由幂函数求导,∂zi/∂yi=−xi/yi2,所以 ∂L/∂yi=−gixi/yi2。除法要求 yi≠0。

4. 求和与均值 ​

若 s=∑i=1Nxi,则 ∂s/∂xi=1。令 g=∂L/∂s,有

∂L∂xi=g,i=1,…,N.

若 m=1N∑i=1Nxi,则

∂L∂xi=1N∂L∂m.

对于按某些轴归约的张量求和,同一输出元素对应的所有输入元素都接收该输出元素的上游梯度;反向结果恢复到输入形状。

5. 广播的反向传播 ​

设 X∈RB×F、b∈RF,Yij=Xij+bj。令 Gij=∂L/∂Yij,则

∂L∂Xij=Gij,∂L∂bj=∑i=1BGij.

一般地,一个输入元素若在前向广播后参与多个输出位置,反向梯度就是这些位置的贡献之和,即沿广播引入的维度求和。

6. 矩阵乘法 ​

设

C=AB,A∈Rm×k,B∈Rk×n,C∈Rm×n,

并令 G=∂L/∂C∈Rm×n。由

Cij=∑r=1kAirBrj

可知 Apq 只影响 C 的第 p 行,且 ∂Cpj/∂Apq=Bqj。因此

∂L∂Apq=∑j=1nGpjBqj,∂L∂A=GBT.

同理,Bpq 只影响 C 的第 q 列,且 ∂Ciq/∂Bpq=Aip,因此

∂L∂Bpq=∑i=1mAipGiq,∂L∂B=ATG.

两式的形状分别为 (m×n)(n×k)=m×k 和 (k×m)(m×n)=k×n,与 A、B 一致。

若 C=αAB+βD,且 D 与 C 同形状,则

∂L∂A=αGBT,∂L∂B=αATG,∂L∂D=βG.

7. 反向传播的起点 ​

标量损失的起始梯度为

∂L∂L=1.

若输出为向量 y,需要给定同形状的种子向量 g。这等价于对标量 s=gTy 求输入梯度:

∇xs=JTg.

因此,一次反向传播计算一个给定种子向量对应的 VJP;不同种子向量会得到不同的输入梯度。

记录原理、连接知识、积累实践。