深度学习入门

让深网络练得动:梯度消失与批量归一化

10 分钟

传话游戏的尽头

第一章留过一个悬念:层数一多,训练信号就传不动。现在把原因说透。反向传播靠连乘传梯度,几十个 0.5 连乘,结果是 ,白话就是——传到第一层时,调整信号只剩百万分之一,浅层权重几乎不动了。这就是梯度消失:深层网络的前半截像被冻结,怎么练都没反应。

救星一:换激活函数

老激活函数 sigmoid 的导数最大只有 0.25,层一多连乘必死;ReLU(第一章那位「正能量闸门」)在正区间导数恒为 1,信号穿过它不缩水——这就是为什么 2012 年后 ReLU 一统隐藏层。深网络能练起来,一半功劳在它。

救星二:批量归一化

另一个大发明是批量归一化(Batch Normalization,2015 年提出):每层的输出先「校准」成均值为 0、方差为 1 的标准分布,再送进下一层。像每层楼之间装一个稳压器,不管楼上电压怎么波动,楼下永远拿到稳定输入。效果是训练又快又稳,学习率可以开大,过拟合还顺带减轻。《动手学深度学习》在「现代卷积神经网络」一章专门讲它。

常见误区

梯度消失不是「层数多所以慢」,而是信号在传播中指数级衰减;也别以为有了这两招就万事大吉——网络深到一定程度照样崩,下一讲的 ResNet 才是终极答案。

练一练:心算 0.5 连乘 10 次大约是多少?再说说这对深网络意味着什么。

小纸条

心算 0.5 连乘 10 次的结果,并解释它对深层网络训练的启发。

登录 后可看答案