ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

训练1000轮损失不降?反向传播手算一遍就懂了

训练1000轮损失不降?反向传播手算一遍就懂了 训练1000轮损失不降反向传播手算一遍就懂了【免费下载链接】nndl邱锡鹏《神经网络与深度学习》第二版与通识版电子书、章节目录、学习资源与勘误。项目地址: https://gitcode.com/GitHub_Trending/nn/nndl训练跑了 1000 轮损失却纹丝不动模型一点没学——十有八九问题出在反向传播backpropagation上梯度要么算错要么层层传递后归零。这篇写给深度学习新手也适合回头补基础的工程师不依赖框架从参数到底怎么更新倒着推把每一步在算什么讲清楚。读完你能解决看懂反向传播传递的到底是什么误差项 error term 如何从输出层一路回到输入层会手动推导误差项公式不再只会背结论能用一个最小的 2-2-1 网络亲手算出完整梯度分清手写循环、向量化、自动微分三条实现路线各自适合什么场景 先建立直觉反向传播像流水线追责把一次前向传播forward pass想成一条工厂流水线原料进输入层、中间加工隐藏层、成品出厂输出层。现在成品检验不合格质检员不会把整条线推倒重来而是拿着这批差了多少沿流水线往回问——最后一道工序担几成责它又把几成甩锅给上一道每个环节被追到的责任记下来最后才知道谁该改多少、改多狠。这个被追到的责任就是误差项质检往回问的动作就是反向传播。落到数学上我们要让损失 L 最小参数的更新方向由梯度gradient∂L/∂w 决定而反向传播正是用链式法则chain rule把这个梯度从输出层往输入层一层层累乘出来。它优化的是每一步都在往损失更小的地方走这件事本身图损失要最小化反向传播给出的梯度就是下山方向上图对比了几种优化器沿下降方向的轨迹。直觉有了接下来别急着记公式——我们倒过来从参数该怎么更新这个终点往回推。 倒着推导误差项从参数更新量反推终点很明确我们最终要的是每个参数的更新量Δw -η · ∂L/∂w # η 是学习率 learning rate所以要算 ∂L/∂w。为什么中途要引入误差项 δ 这个量因为权重梯度恰好等于 δ 与上一层激活的外积只要先拿到 δ∂L/∂W 一步就出来——δ 是把重复出现的乘积提前打包好的中间结果。为什么需要输出层的 δ它把损失对最后一层输入的敏感程度一次算清供后面逐层复用δ^(L) (a^(L) - Y) ⊙ σ(z^(L))为什么需要往回传的 δ因为前一层对损失的贡献 后一层传回的责任 × 连接权重 × 本地激活导数这条递推就是反向传播的追责规则δ^(l) (W^(l1)ᵀ δ^(l1)) ⊙ σ(z^(l))为什么拿到 δ 就够有了它权重和偏置的梯度直接落地不需要再对损失求一次复杂偏导∂L/∂W^(l) δ^(l) (a^(l-1))ᵀ ∂L/∂b^(l) δ^(l)三行公式闭环了。下面用一个能手算的小网络验证它真的对得上。✏️ 手算走一遍反向传播最小2-2-1网络固定参数输入X[1,0]标签Y1激活全用 sigmoid损失用均方误差。参数取W¹[[0.5,1.0],[1.0,0.5]]、b¹[1.0,-1.0]、W²[0.5,-0.5]、b²0。按检查项 → 数值 → 来源过一遍检查项数值来源说明隐藏层输入 z¹[1.5, 0.0]W¹Xb¹前向第一层隐藏层输出 a¹[0.8176, 0.5]σ(z¹)输出层 z² / a²0.1588 / 0.5396W²a¹b²再 σ损失 L0.106½(Y-a²)²输出层 δ²-0.1144(a²-Y)·σ(z²)σ(z²)0.2484隐藏层 σ(z¹)[0.1491, 0.25]a¹(1-a¹)隐藏层 δ¹[-0.0085, 0.0143](W²ᵀδ²)⊙σ(z¹)∂L/∂W² / ∂L/∂b²[-0.0935,-0.0572] / -0.1144δ²a¹ᵀ/δ²∂L/∂W¹ / ∂L/∂b¹[[-0.0085,0],[0.0143,0]] / [-0.0085,0.0143]δ¹Xᵀ/δ¹注意 δ¹ 第二项是正的因为W²第二维权重为负甩锅回传后符号被翻转再乘上激活导数。手算一遍链式法则的符号与量级就都踏实了。算对了落到代码上无非是把这些外积写成矩阵乘法。⚙️ 工程落地手写、向量化与自动微分怎么选路线代码量速度调试透明度适合谁手写循环多慢最高每步可打印学习原理、定位错误向量化NumPy中快高矩阵维度可控生产前的原型、教学自动微分PyTorch少最快黑盒靠梯度检验兜底实际训练大模型核心逻辑其实就几行前向存下中间量反向按上面公式回填import numpy as np sig lambda z: 1/(1np.exp(-z)) z1 W1x b1; a1 sig(z1) # 前向 z2 W2a1 b2; a2 sig(z2) # 前向 d2 (a2 - y) * a2*(1-a2) # 输出层误差项 dW2 np.outer(d2, a1); db2 d2 d1 (W2*d2) * a1*(1-a1) # 隐藏层误差项含权重回传 dW1 np.outer(d1, x); db1 d1写完别急着跑先核对几个高频坑。❓ 反向传播高频疑问梯度消失与数值核对问为什么必须从后往前算不能各层独立求梯度答链式法则是连乘关系后一层的 δ 是前一层求 ∂L/∂W 的输入。先算输出层并复用这个中间量能把重复的乘积只算一次逐参数暴力求导会把它算成千上万遍。问换交叉熵损失输出层公式会变吗答会简化。MSEsigmoid 时 δ² 带一个 σ 因子改用交叉熵sigmoid对数损失求导产生的 1/σ 会把 σ 抵消掉δ² 直接退化成(a²-Y)少乘一项、数值也更稳。问手算和框架的梯度对不上先查哪答先做数值梯度检验对每个 w 用(f(wε)-f(w-ε))/2ε逼近和反向值比对相对误差 1e-5 才算对。常见坑漏加偏置、激活导数写错、batch 维度没乘进去。问梯度消失到底消失的是什么答消失的是传给更浅层的信号。σ 最大 0.25多层连乘因子小于 1δ 越往前越小浅层权重梯度趋近 0等于没更新。ReLU、残差连接、BN 都是为了让这条连乘别一路衰减。自测题把上面例子的输出层激活换成 ReLU此处 z²0.15880σ1δ² 会变成多少手算核对一下。想继续仓库的 可视化资源 汇总了各章动图优化算法对比 专门看损失面上的优化器轨迹要动手写代码案例与实践 第 4 章有可运行的 notebook教材章节目录 可定位第 4 章前馈神经网络。【免费下载链接】nndl邱锡鹏《神经网络与深度学习》第二版与通识版电子书、章节目录、学习资源与勘误。项目地址: https://gitcode.com/GitHub_Trending/nn/nndl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表