参数初始化与训练稳定性
打破神经元的对称性,控制激活与梯度的尺度,让网络有机会学得动。
为什么不能把所有隐藏神经元设成一样?
上一课已经会用优化器更新参数。可第一次更新之前,网络里的旋钮该摆在哪儿?最整齐的办法似乎是全部设为零。问题是:同一层的隐藏神经元若以相同权重开始,又在后续路径上保持对称,就会算出相同输出、收到相同梯度、被更新成相同的新值。
本来希望它们分工,结果只是把同一份计算复制了很多遍。随机初始化首先是为了打破这种对称性,让不同神经元有机会学到不同表示。这里说的是多层网络中需要打破对称的权重,不能推广为「所有模型、所有参数都禁止零初始化」。
随机还不够:信号太小会消失,太大会失控
第 08 课提醒过:函数值的大小和导数的大小不是同一回事。到了深层网络,两件事都要看:前向的激活尺度,以及反向的梯度尺度。
每层都用过小的权重,信号可能越传越弱;过大的权重可能放大数值,也可能把 Sigmoid、tanh 推进饱和区,让导数变小。所以「激活很大」并不一定意味着「梯度很大」。下面固定输入、宽度与随机种子,只改变初始化和层数。
实验是宽度 24、无偏置的随机隐藏网络;输入 batch 固定为 32。梯度来自标量探针 S = mean(最后一层激活),不是分类损失,也没有执行训练。图中显示激活与 dS/dh 的均方根,逐层表同时给出均值、标准差。对数图的零值仅在绘图时置于下界,表中仍显示真实零值。
Xavier 与 He:让起点配合输入数量和激活函数
假设输入分量的尺度相近,互相近似独立,且权重零均值。一个神经元的加权和累加 fan_in 项,权重的方差若不调整,输入越多,输出尺度越容易改变。初始化因此不是固定写一个「随机小数」,而是根据层宽选择分布。
| 方法 | 权重标准差 | 直觉与适用边界 |
|---|---|---|
| Xavier / Glorot | √(2/(fan_in+fan_out)) | 兼顾前后向,常用于 tanh 等;gain 可另行调整 |
| He / Kaiming | √(2/fan_in) | 补偿 ReLU 截去负半边的尺度损失 |
这里展示最基本的正态版本:Xavier 的 gain=1,He 使用 fan_in 模式和 ReLU 的增益。框架还提供均匀分布、不同 gain 与 fan_out 模式。合适初始化让网络更容易开始学习,不保证深度增加后每层分布完全不变。
梯度消失、梯度爆炸与裁剪:解决的是不同问题
第 16 课已经看过链式法则:梯度沿路径连乘,分叉路径的贡献相加。这里再加上权重矩阵的尺度,才是完整的信号传播问题。ReLU 正区间导数为 1,也不保证整张网络的梯度不会消失或爆炸。
梯度爆炸时可以做范数裁剪:如果所有参数梯度的总范数超过阈值 c,按同一比例缩小,使总范数回到 c。它限制一次更新前的梯度,不负责恢复已消失的信号。
初始化、激活函数、学习率和数据尺度需要共同检查。更深的模型还会使用残差连接与归一化;第 30 课会专门展开,这里先记住它们是训练深层网络的工具,不是成功的保证。
训练稳定性检查:先看数值,再改配方
训练不动,别只盯着最后一个 loss。可以沿数据流找问题:输入特征的量级是否悬殊?各层激活是否全部接近零或饱和?梯度是否消失、爆炸或出现非有限值?参数更新是否相对权重过大?用少量样本能否先拟合下来?
如果输入要标准化,均值与标准差应由训练集估计,再原样应用到验证与测试数据;不能把测试数据提前用来定尺度。一次只调整一种因素,记录种子和配置,才容易复现问题。
初始化解决起点,尺度决定信号能否穿过深层网络;裁剪限制爆炸梯度,不能治疗梯度消失。
💡 用大白话梳理:这一课的核心直觉
- 随机权重打破对称性,偏置可以初始化为零。
- 同时监测前向激活和反向梯度,数值大小不能混为一谈。
- Xavier、He 根据层宽和激活选择尺度,不是万能保证。
- 输入标准化只拟合训练集;下一课用独立数据检查泛化。
学习小测验
动动脑筋:核心直觉小测验(选出你的答案后点击「提交」,即可查看生动通俗的详细解析)
19 过拟合、泛化与正则化
训练题做对不等于真正学会:用独立数据检验,用早停与正则化改善泛化。