这是“重温AI/ML笔记”系列的第八篇。上一篇结尾留了个警告:链式法则的本质,是把一串小数接连相乘,结果会以惊人的速度缩水。而这一篇要聊的,正是这种缩水失控时的后果——梯度消失问题。
梯度的缩水,根源在Sigmoid函数身上。它的导数——也就是链式法则在每一层往回传导时,所乘的那个“局部梯度”——最大值正好卡在0.25。输入一旦偏大或偏小,这个导数值立刻朝着零跌落。
![]()
把这个规律放进深层网络里,场面便一目了然。假设每层传回的局部导数,乐观地取到上限0.25——现实里乘上同样很小的权重值后,往往比这还低——那么传导到靠近输入层的某个权重时,它的梯度就成了这一堆小数的连乘结果,一层接一层地叠上去。随着深度增加,这个乘积不可阻挡地逼近于零。
回看权重更新规则:新权重等于旧权重减去学习率乘以梯度。一旦梯度在抵达浅层之前已经实质上变成了零,那么更新量也就是零——无论训练迭代多少次,这些权重几乎纹丝不动。最接近输入的那些层就此停止学习,而最靠近输出的层却还在照常更新。整个网络里相当大一部分容量,就此永久性地处在训练不足的状态。
这对深层网络来说是一个实打实的硬伤。历史上,基于Sigmoid的深层网络难以训练,部分原因正在于此。反过来看,本系列早前介绍过的ReLU之所以能成为隐藏层的默认选择,很大程度上也与此有关:ReLU的导数不是零就是恰好为1,在正值区间内,它不会像Sigmoid那样把梯度一路压扁。
梯度消失并非某种玄而又玄的训练波动,而是链式法则与Sigmoid函数形状共同决定的、机械性的必然结果。一旦把它理解为“把许多小于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.