如何计算神经网络中靠前权重的误差偏导数?
理解反向传播中靠前层权重的导数计算
嘿,完全懂你的困惑!很多教程确实在讲到倒数第二层就戛然而止,把前面层的推导留得让人抓耳挠腮——但你其实没误解链式法则,你的猜想完全正确:对靠前层的权重计算总误差的导数,就是要把从这个权重到总误差的每一条路径的链式法则结果加起来。
让我用一个简单的例子拆解清楚:假设我们有一个3层网络(输入→隐藏层1→隐藏层2→输出),拿隐藏层1里的某个权重w来说——它控制着输入层某个神经元到隐藏层1神经元h1的加权输入。h1会连接到隐藏层2的所有神经元,每个隐藏层2的神经元又会连接到输出层的所有神经元,最终所有输出都会影响总误差E。
那对w求偏导时,链式法则要覆盖每一条可能的路径:∂E/∂w = ∂E/∂out1 * ∂out1/∂h2_1 * ∂h2_1/∂h1 * ∂h1/∂w + ∂E/∂out2 * ∂out2/∂h2_1 * ∂h2_1/∂h1 * ∂h1/∂w + ∂E/∂out1 * ∂out1/∂h2_2 * ∂h2_2/∂h1 * ∂h1/∂w + ...
也就是把h1到每个输出的所有路径的导数结果全部加起来。
而反向传播的聪明之处,就是把这些重复计算的部分给复用了,不用手动去加每一条路径:
- 首先从输出层开始,计算输出层的误差项
δ_out——这其实就是总误差对输出层神经元加权输入的偏导,你已经会这一步了。 - 然后往回算隐藏层2的误差项
δ_h2:它等于隐藏层2到输出层的权重矩阵的转置,点乘输出层的误差项,再逐元素乘隐藏层2激活函数的导数。这里的权重矩阵转置点乘,本质上就是把输出层每个神经元的误差,按权重比例传递回隐藏层2的每个神经元——也就是把所有从隐藏层2神经元到输出的路径导数加总了。 - 再往回算隐藏层1的误差项
δ_h1:逻辑和上面完全一样,用隐藏层1到隐藏层2的权重矩阵转置点乘δ_h2,再逐元素乘隐藏层1激活函数的导数。这一步就自动把所有从h1到输出层的路径导数都加总好了! - 最后计算
w的偏导:直接用δ_h1乘以w对应的输入层神经元的输出就行——因为∂h1/∂w就是输入层的输出,而δ_h1已经包含了所有从h1到总误差的路径导数之和。
关键结论
- 你没搞错链式法则:靠前层权重的导数确实是所有路径的链式导数之和,反向传播只是用更高效的方式完成了这个求和,避免了重复计算。
- 这不是唯一的方法,但反向传播是目前最高效的方法——如果手动计算每一条路径,复杂度会爆炸,而反向传播把时间复杂度降到了和前向传播一样的级别。
- 你已经掌握了最后两层的逻辑,前面的层只是把这个“误差传递→计算权重偏导”的步骤重复而已,每一层的误差项都依赖下一层的误差项和权重矩阵。
内容的提问来源于stack exchange,提问作者PolymorphismPrince
相关产品推荐
相关产品推荐

