如何证明梯度为多个梯度之和?神经网络反向传播权重矩阵问题解析
嘿,这个问题问到点子上了——其实核心就是多元函数求导的链式法则+偏导数的线性性质,咱们分两步来拆解:先从通用的数学原理讲清楚“梯度为何能拆成多个梯度之和”,再落到神经网络里的具体场景,结合思路来证明同一权重多次出现时的梯度求和逻辑。
先从最基础的数学定义入手:
- 假设我们有一个损失函数 ( L(W) ),其中 ( W ) 是我们要求导的参数(可以是标量、向量或矩阵)。
- 如果 ( L(W) ) 可以拆分为两个子函数的和:( L(W) = L_1(W) + L_2(W) ),根据偏导数的线性性质,对于 ( W ) 中的任意元素 ( W_{ij} ),有:
把所有元素的偏导数组合起来,就得到梯度的可加性:( \nabla_W L = \nabla_W L_1 + \nabla_W L_2 )。∂L/∂W_{ij} = ∂L₁/∂W_{ij} + ∂L₂/∂W_{ij}
那如果是复合函数的情况呢?比如 ( L = F(u_1, u_2) ),其中 ( u_1 = G(W) ),( u_2 = H(W) )——也就是 ( W ) 通过两个不同的路径影响最终的 ( L )。根据链式法则:
∂L/∂W_{ij} = (∂F/∂u₁ * ∂u₁/∂W_{ij}) + (∂F/∂u₂ * ∂u₂/∂W_{ij})
这其实就是把 ( W ) 在两条路径上的梯度贡献加起来,本质和上面的线性性质是一致的——每条路径对应一个子梯度,总梯度就是所有子梯度的和。
咱们拿一个具体的神经网络例子来推,假设权重矩阵 ( W ) 同时用在两个不同的计算层里:
1. 定义前向传播路径
假设网络结构是这样的:
- 输入:( X )
- 第一层(用到 ( W )):( Z_1 = W @ X + b_1 ),激活后 ( A_1 = \sigma(Z_1) )(( \sigma ) 是激活函数,比如ReLU、sigmoid)
- 中间层:( Z_2 = W_2 @ A_1 + b_2 ),激活后 ( A_2 = \sigma(Z_2) )
- 第三层(再次用到 ( W )):( Z_3 = W @ A_2 + b_3 ),激活后 ( A_3 = \sigma(Z_3) )
- 损失函数:( L = \text{loss}(A_3, Y) )(比如MSE或交叉熵损失)
2. 反向传播计算梯度
反向传播的核心是沿着前向路径的反方向,用链式法则逐层计算误差,再推导参数梯度:
第一步:计算第三层的误差
输出层对 ( Z_3 ) 的误差:( \delta_3 = \frac{\partial L}{\partial Z_3} = \frac{\partial L}{\partial A_3} \odot \sigma'(Z_3) )(( \odot ) 是逐元素乘积)
这时候,( W ) 在第三层的梯度贡献是:( \nabla_W^{(1)} L = \delta_3 @ A_2^T )第二步:反向传播到中间层,再回到第一层
中间层的误差:( \delta_2 = W^T @ \delta_3 \odot \sigma'(Z_2) )
第一层的误差:( \delta_1 = W_2^T @ \delta_2 \odot \sigma'(Z_1) )
这时候,( W ) 在第一层的梯度贡献是:( \nabla_W^{(2)} L = \delta_1 @ X^T )第三步:总梯度求和
因为 ( W ) 通过两条路径(第一层→中间层→第三层,以及直接的第三层)影响最终损失 ( L ),所以总梯度就是两条路径的梯度贡献之和:∇_W L = ∇_W^{(1)} L + ∇_W^{(2)} L
3. 为什么这个结论成立?
本质上,损失函数 ( L ) 是关于 ( W ) 的复合函数,( W ) 在两个不同的位置参与了前向计算,相当于 ( L ) 可以看作是两个“依赖于 ( W ) 的子部分”的组合。根据前面讲的偏导数线性性质和链式法则,每个子部分对 ( W ) 的梯度贡献相加,就是总梯度。
简单来说:只要同一个参数在多个地方影响损失,反向传播时就需要把每个位置的梯度贡献都算出来,然后加起来——这是求导的基本规则决定的。
内容的提问来源于stack exchange,提问作者ChiPlusPlus

