反向传播详解:2 张表看懂误差如何逐层回传

发布时间:2026/9/8 20:45:35
反向传播详解:2 张表看懂误差如何逐层回传 反向传播详解2 张表看懂误差如何逐层回传【免费下载链接】nndl邱锡鹏《神经网络与深度学习》第二版与通识版电子书、章节目录、学习资源与勘误。项目地址: https://gitcode.com/GitHub_Trending/nn/nndl你每次跑训练、看着损失曲线往下掉时可能都闪过一个疑惑输出错了这一笔每个权重和偏置各自该负多少责反向传播算法Backpropagation回答的就是这个问题——它把最终误差从输出层沿网络连接一层层摊回各层每个参数再按自己的责任份额更新。本文用分锅定责的类比加 2 张走查表讲清误差回传的完整过程。 误差怎么从输出层逐层回传分锅定责先说白话。前馈神经网络信号只从输入向输出流动、不成环的网络由输入层、若干隐藏层和输出层叠成层与层之间用权重连接。损失衡量输出偏离目标多少的数值偏高相当于成品不合格。此时不是罚所有人而是分锅先定输出层的责输出离目标差多远沿连接往回摊连接权重越大上游层分到的责任越多——权重就是责任分摊系数。每层再乘一个责任折扣即激活函数的导数这层当时对输入几乎没反应导数接近 0摊到上一层的责任就按比例缩水。每个参数最终的责任分就是梯度它变动 1 个单位损失会跟着涨多少。拿到分数后更新规则就一行θ ← θ − η × 梯度其中 θ 指任意一个权重或偏置η 是学习率学习率控制每份责任对应走多大步子。那误差具体是怎么回到第一层的看下面三步。 反向传播原理从误差项到梯度只走三步先约定符号u⁽ˡ⁾第 l 层的输入即上一层输出做加权求和再加偏置a⁽ˡ⁾第 l 层经过激活函数 f 后的输出激活函数如 sigmoid、ReLU是把加权和映射到神经元输出的非线性变换e⁽ˡ⁾第 l 层的误差项含义是损失对 u⁽ˡ⁾ 的敏感度也就是这一层的责任分。前向只有两行u⁽ˡ⁾ W⁽ˡ⁾a⁽ˡ⁻¹⁾ b⁽ˡ⁾ a⁽ˡ⁾ f(u⁽ˡ⁾)误差项定义第 1 步。以均方误差MSE预测值与目标值平方差的一半为例L ½(a⁽ᴸ⁾ − t)²t 是目标值。输出层误差项为e⁽ᴸ⁾ (a⁽ᴸ⁾ − t) ⊙ f′(u⁽ᴸ⁾)⊙ 表示逐元素相乘。这一步在算什么离目标多远再乘这层当时有多灵敏。顺带一提若做分类用交叉熵损失配 Softmax 输出把分数压成一组和为 1 的概率公式简化为 e⁽ᴸ⁾ a⁽ᴸ⁾ − t不用乘导数——这是它们习惯成对出现的原因之一。误差项逐层回传第 2 步。对任意非输出层 le⁽ˡ⁾ (W⁽ˡ⁺¹⁾)ᵀ e⁽ˡ⁺¹⁾ ⊙ f′(u⁽ˡ⁾)这一步在算什么下一层递下来的责任先按连接权重拆连接越强分得越多再被本层激活导数打折。整个反向传播原理的核心就是这一句。梯度计算过程第 3 步。有了误差项梯度立刻可得∂L/∂W⁽ˡ⁾ e⁽ˡ⁾ (a⁽ˡ⁻¹⁾)ᵀ ∂L/∂b⁽ˡ⁾ e⁽ˡ⁾一步一参数梯度 自己背的误差 × 收到的上游信号。上游输出越活跃、自己责任越大这个权重越该被调整。 走查2-1-1 小网络的梯度计算过程拿一个 2-1-1 网络走一遍输入 2 维 x [2, 1]目标 t 1隐藏层 1 个神经元全部用 sigmoid 激活。参数取隐藏层 w_h [0.5, 0.5]、b_h 0输出层 w_o 0.2、b_o 0。前向表环节计算结果隐藏层输入u_h 0.5×2 0.5×1 01.50隐藏层输出a_h σ(1.50)0.818输出层输入u_o 0.2×0.818 00.164输出层输出a_o σ(0.164)0.541损失L ½(1 − 0.541)²0.105反向表层误差项梯度输出层e_o (0.541 − 1) × σ′(0.164) (−0.459) × 0.248 ≈−0.114∂L/∂w_o e_o × a_h ≈−0.093∂L/∂b_o e_o ≈−0.114隐藏层e_h w_o × e_o × σ′(1.50) 0.2 × (−0.114) × 0.149 ≈−0.0034∂L/∂w_h e_h × x ≈[−0.0068, −0.0034]∂L/∂b_h ≈−0.0034两个观察值得记住。梯度全为负输出 0.541 低于目标 1路径上的权重都该调大而 θ − η×梯度 的方向正好对应。误差项从输出层的 −0.114 摊到隐藏层只剩 −0.0034一次传递就缩水 30 多倍。这就是梯度消失的苗头网络越深责任被打折的次数越多。️ 实践前馈神经网络训练的排查与设置梯度消失/爆炸怎么排查先诊断再处理方法是看每一层梯度的量级消失深层梯度接近 0、损失几乎不动。常见原因是 sigmoid 导数上限只有 0.25层层打折。对策换 ReLU正区导数恒为 1不打折、用 Xavier 初始化让权重与激活匹配、加深时加残差连接让误差抄近路直达浅层。爆炸损失跳动甚至出现 NaN。通常是初始权重过大、梯度层层放大。对策梯度裁剪把梯度范数限制在阈值内、缩小初始化规模、检查数据里有无异常值。学习率设置三步法先用 1e-3 试损失震荡或出 NaN减半损失基本不动翻倍再试。后期换 Adam 这类自适应优化器按参数各自的历史表现自动调学习率可以少碰手动档位。梯度检查验证反向传播算法的正确性自己手写反向传播时用数值微分用微小扰动代替求导交叉验证def numerical_grad(loss, p, eps1e-5): g np.zeros_like(p) for i in range(p.size): p[i] eps; lp loss(p) p[i] - 2*eps; lm loss(p) p[i] eps g[i] (lp - lm) / (2*eps) return g在小网络上跑一遍逐项对比它和自己反向传播的输出相对误差小于 1e-5 就能放心。这一步花一分钟省下一周的调试。 延伸资料反向传播算法说到底就是一次分锅动作责任先在输出层定分再沿权重和激活导数逐层摊回每个参数按份额更新。想继续深入可以按下面顺序看神经网络与深度学习第二版· 第 4 章 前馈神经网络全书章节与 PDF 入口神经网络与深度学习案例与实践PyTorch 版前馈神经网络实现反向传播逐步可运行可视化资源各章核心概念的动图与交互演示阅读路径与选书建议理论书、实践书、通识版怎么搭配读【免费下载链接】nndl邱锡鹏《神经网络与深度学习》第二版与通识版电子书、章节目录、学习资源与勘误。项目地址: https://gitcode.com/GitHub_Trending/nn/nndl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考