在训练一个动辄几十层甚至上百层的深度网络时,那些躲在最底层的权重到底是怎么被“调教”的?梯度下降需要知道损失函数对每个权重的斜率,可多数权重与最终的损失之间隔着好几层变换,根本不存在直接连线。把这种间接影响拆解得清清楚楚的,就是微积分里那条朴实无华的链式法则。
在一个单神经元模型里,计算 ∂Loss/∂w 直来直去:权重直接送到输出,输出直接算出损失。但多层网络没这么简单。一个靠近输入的权重 w₁,它的存在感非常间接——它先改变自己所在神经元的输出 a₁,a₁ 再去影响下一层的神经元输出 a₂,a₂ 再往后传播,一直传到最终的输出,才翻山越岭抵达损失函数。这一整条影响链路,就是链式法则的用武之地。
![]()
链式法则的表述极度简洁:如果 w₁ 影响 a₁,a₁ 影响 a₂,a₂ 影响损失 L,那么 w₁ 对 L 的总影响就是每一步局部影响的乘积:
∂L/∂w₁ = (∂L/∂a₂) × (∂a₂/∂a₁) × (∂a₁/∂w₁)
等式右边的每一项都只涉及两个直接相连的量,单独计算它们轻松得像呼吸。链式法则真正干的事情,是把这些零碎的局部导数串成一根完整的链条,最终给出你唯一关心的那个数字:深埋在网路底部的这个权重,究竟要为最终误差负多少责任。
这里引出一种支持与诟病并存的双面效应。支持者看到的是——正是这条乘法链条,使得反向传播拥有了落地能力。要得到 ∂L/∂w₁,你得先有 ∂L/∂a₂,而 ∂L/∂a₂ 又必须从输出端开始推算。于是整个计算自然地逆流而上,从输出层步步后退,一路朝输入方向走,沿途计算每一个局部导数,再把它乘进当前的累积乘积里。这个逐层往回搬运梯度的过程,就是反向传播的全部秘密。
但诟病同样源于这个精妙的连乘。如果链条里每个局部导数都偏小,比如都接近于 0.1,那不出几层,乘积就会缩成 0.000…某,梯度几乎消失;反过来,如果每个局部导数都大于 1,乘积就会以指数级速度炸开,梯度飙升到让人没法正常更新参数。这份乘积的优雅,直接导致了深度学习训练中最让人头疼的两大问题——梯度消失与梯度爆炸。
站在冷静拆解的角度,链式法则本身并不分对错。它只是忠实地刻画了“原因的原因仍然是原因”这条基本原理。称赞它让多层网络变得可训练是一回事,承认它同时埋下了数值不稳定的地雷是另一回事。这两面其实都指向同一个起点:只有先老老实实认清连乘链条的脾性,才有资格谈怎么驯服它。
接下来的篇章,正是从这个起点出发,去逐一解剖梯度消失和梯度爆炸究竟是怎样在训练中现身的,以及业界那些巧妙的对抗手段究竟改变了什么。而所有这些衍生话题,其逻辑原点都定格在今天讨论的这组乘积里——理解它,后续的补救才有处着力。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.