
神经网络与深度学习反向传播算法实战指南五步手算完整梯度【免费下载链接】nndl邱锡鹏《神经网络与深度学习》第二版与通识版电子书、章节目录、学习资源与勘误。项目地址: https://gitcode.com/GitHub_Trending/nn/nndl本文基于邱锡鹏《神经网络与深度学习》蒲公英书系列官方资源站用第 4 章前馈神经网络中最小的可手算例子把反向传播算法的完整过程走一遍并附上踩坑速查表和仓库内可动手的延伸材料。场景打印梯度发现全是 0loss 从第 3 轮不再下降上周有同学习调一个两层小网络打印各层梯度发现隐藏层那一列全是 0loss 曲线从第 3 轮起就横着走。排查了前向计算、损失函数和优化器一两个小时最后发现是隐藏层用了 Sigmoid一种把任意实数压到 0~1 之间的平滑开关函数且输入幅值偏大导致激活函数的导数趋近于 0——典型的梯度消失。要定位这类问题前提是你得清楚反向传播算法用链式法则逐层算出损失对每个参数偏导数即梯度的方法到底在算什么。定位反向传播是整个网络训练的追责机制在《神经网络与深度学习》第二版里反向传播位于第 4 章前馈神经网络解决的问题只有一件从输出层的损失出发逐层算出每个权重和偏置的梯度供优化器更新参数。第 5 章卷积网络、第 6 章循环网络、第 8 章 Transformer训练时用的都是同一套机制所以它是贯穿全书的地基性工具。讲原理一张不合格单在生产线上倒着传把网络想象成一条装配线每一层是一个工序权重和偏置是工位上的调节旋钮。总检发现成品预测值离标准标签有差距开出第一张不合格单交给最后一道工序。此后每个工序只做两件事把下游传来的不合格量乘以我自己的输入动一点、输出会动多少就是激活函数的导数 σ′衡量本工序的敏感度算出新的不合格量递给上游同时记下我这边旋钮该拧多少 收到的不合格量 × 我当初递给下游的信号。关键点在于任何工序都不需要知道全线的样子只看下游那张单和自身的敏感度所以计算量只随层数线性增长不必为每个参数单独推导一遍损失函数。整条链上反复用的就是链式法则——复合函数的导数等于各段导数相乘。核心公式只有一条δ⁽ˡ⁾ (W⁽ˡ⁺¹⁾ᵀ δ⁽ˡ⁺¹⁾) ⊙ σ′(z⁽ˡ⁾)白话本层不合格量 δ⁽ˡ⁾损失对该层输入 z⁽ˡ⁾ 的梯度 下游怪我多少下一层权重转置乘以下游不合格量再逐元素乘上我的敏感度 σ′。而参数自身的梯度更直接∂L/∂W⁽ˡ⁾ δ⁽ˡ⁾·(a⁽ˡ⁻¹⁾)ᵀ即收到的不合格量 × 当初递给下游的信号。最小手算两层单神经元网络的完整反向传播用参数最少的例子分步走输入 x1一个隐藏神经元、一个输出神经元都是 Sigmoid目标 y1。参数取 w₁0.5、b₁0、w₂1.0、b₂0。第 1 步前向到隐藏层。z₁ w₁x b₁ 0.5激活后 a₁ σ(0.5) ≈ 0.622计算器验证1/(1e⁻⁰·⁵) ≈ 0.622。第 2 步前向到输出层。z₂ w₂a₁ b₂ 0.622a₂ σ(0.622) ≈ 0.651。第 3 步算损失。取均方误差的一半L ½(1 − 0.651)² ≈ 0.061。第 4 步输出层不合格量。σ′(z₂) a₂(1−a₂) ≈ 0.651×0.349 ≈ 0.227所以 δ₂ (a₂ − 1)×σ′(z₂) ≈ (0.651−1)×0.227 ≈ −0.079。第 5 步递到隐藏层。σ′(z₁) 0.622×0.378 ≈ 0.235δ₁ w₂·δ₂·σ′(z₁) ≈ 1.0×(−0.079)×0.235 ≈ −0.019。最后读梯度∂L/∂w₂ δ₂·a₁ ≈ −0.079×0.622 ≈ −0.049∂L/∂w₁ δ₁·x ≈ −0.019偏置直接取对应层的 δ∂L/∂b₂ ≈ −0.079∂L/∂b₁ ≈ −0.019。梯度为负说明两个权重该增大学习率取 1 时 w₂ 从 1.0 变 1.049再前向一次输出确实会更靠近 1。每步都能拿计算器复核——这就是反向传播的全部前向时记下中间量反向时按相反顺序把不合格单传回去。踩坑速查表从梯度为 0 到梯度爆炸的症状对照典型症状常见原因应对办法某层梯度全为 0Sigmoid 饱和使 σ′≈0或该层权重恰为 0换 ReLU 激活用 Xavier/He 方法重新初始化梯度极小、loss 下降极慢深层网络中多层 σ′均小于 1连乘梯度消失ReLU、批归一化、残差连接梯度爆炸、loss 跳变或 NaN权重初始化过大或递推结构放大信号梯度裁剪、缩小初始化、输入归一化loss 从第 3 轮起震荡不降学习率偏大在最优点附近来回甩学习率衰减或换 Adam 等自适应优化器手推梯度与框架算出的不一致反向实现有 bug导数写错、漏了链式环节用中心差分数值梯度逐元素对照验证数值梯度是验证反向实现的标尺两行代码就够def num_grad(f, w, eps1e-5): return (f(w eps) - f(w - eps)) / (2 * eps) # num_grad(lambda w: loss(w), 0.5) 应与手算的反向传播梯度接近动手起点仓库内的核心文件与可视化 第二版章节目录前馈神经网络是第 4 章含完整数学推导与习题通识版第 3 章则是弱化推导的入门版本见 通识版目录案例与实践第 4 章提供可运行的 PyTorch 实操覆盖前向、反向、优化的完整链路可视化资源索引第 4 章条目收录 TensorFlow Playground可在浏览器里搭一个浅层网络实时观察训练优化算法对比拿到梯度之后SGD、Momentum、Adam 等不同优化器在损失面上的走法差异一目了然阅读路径与选书建议零基础读者可先走通识版第 3 章再回第二版补推导。下一步把 Sigmoid 换成 ReLU再手算一遍小练习把上面例子里两层的 Sigmoid 换成 ReLU导数在 z0 时为 1、z≤0 时为 0重算 δ₂ 和 δ₁你会发现 δ₁ 恰好等于 w₂·δ₂——这正是 ReLU 缓解梯度消失的直观原因。之后可以接着读书中第 7 章网络优化与正则化看反向传播算出的梯度如何被 SGD、动量与 Adam 实际使用。【免费下载链接】nndl邱锡鹏《神经网络与深度学习》第二版与通识版电子书、章节目录、学习资源与勘误。项目地址: https://gitcode.com/GitHub_Trending/nn/nndl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考