回归学习中,优化参数的大方针是梯度下降,但会面临各种挑战。这里简单记录原因与应对策略。
分类概览 (1)
Model Bias (2)
训练数据上$Loss$太大,可能是Model Bias引起的。注意这里的bias和前面的参数$b$ (bias) 完全不是同一个概念。
Model Bias是指模型没有弹性。就是说,即使穷举所有参数组合,结果都不好。“针”不在海里,不可能捞的到。
- 激活函数个数太少;
- 深度网络层数太少;
- 输入特征(input feature)太少,例如,只依靠$ios$来预测磁盘的$await$。
应对:让模型更有弹性。
梯度下降失败 (3)
针在海里,却捞不到。
Critical Point (3.1)
Critical Point(临界点) 是指损失函数的梯度为零的点,包括:
- 局部极小值(Local Minimum)
- 局部极大值(Local Maximum)
- 鞍点(Saddle Point)
判断与应对:
- Hessian 特征
- Hessian矩阵正定(positive definite),即所有特征值都大于0,则为Local Minimum;
- Hessian矩阵负定(negative definite),即所有特征值都小于0,则为Local Maximum;
- Hessian矩阵不定(indefinite),即同时存在正特征值和负特征值,则为Saddle Point;
- Momentum:想象一个有质量的小球在Error Surface上滚动。因为有质量,所以有动量(Momentum)和惯性,这样就能越过Critical Point,最终停在Global Minimum。
- 分Batch:见后文。
Rugged Error Surface (3.2)
损失曲面崎岖,可能出现:
- Loss不再下降
- 但梯度的norm(向量的长度)不是很小
可以想象,在峡谷两侧跳来跳去的。

Adaptive Learning Rate (3.2.1)
所以,应该减小$\eta$(learning rate);但是$\eta$太小,在平坦的地方又无法进步。所以理想是,gradient小的时候,$\eta$自动变大;gradient大的时候,$\eta$自动变小。这就是 Adaptive learning rate。
Feature Normalization - Batch Normalization (3.2.2)
假如一个模型如下(只有2个参数$w_1$和$w_2$——忽略$b$):
$$
f(\boldsymbol{x}) = w_1 x_1 + w_2 x_2
$$
损失函数定义成:
$$
L = \sum (y - f(\boldsymbol{x}))^2
$$
损失函数是关于$w_1$和$w_2$的函数;假如训练数据样本的$x_1$维度数值都很大,而$x_2$维度的数值都很小,那么只要$w_1$有较小的变化,损失的变化就很大;相反$w_2$变化较大,损失的变化却很小;也就是说,Error Surface 在 $w_1$ 维度上陡峭,在 $w_2$ 维度上平坦。
这种Ill-conditioned Error Surface可以通过Batch Normalization(Feature Normalization的一种)来解决:考虑一个batch(Batch Normalization 名字由来)的$N$个样本($N$个向量),
- 对这 $N$ 个向量的同一维度$i$计算平均值$m_i$;
- 对这 $N$ 个向量的同一维度$i$计算方差$\sigma_i^2$;
- 每个向量的第$i$维$x_i$都更新成$x_i^\prime$:
$$
x_i^\prime = \gamma_i \frac{x_i - m_i}{\sqrt{\sigma_i^2 + \epsilon}} + \beta_i \\
\text{其中} \gamma_i \text{和} \beta_i \text{是可学习参数,} \epsilon \text{是防止除零的小常数}
$$
- 对所有维度做同样操作;
也就是,把训练样本特征向量的各个维度都规范到0附近,且维度之间的幅度差不多(不会出现$x_i$维数值很大而$x_j$维数值很小,$i \neq j$)。
也就是,先对每个维度做标准化,使其均值接近0、方差接近1;再通过可学习参数$\gamma_i$和$\beta_i$进行缩放和平移,从而恢复模型的表达能力。
问题:学得的$\gamma_i$和$\beta_i$会不会使Error Surface再度Ill-conditioned?理论上有可能,但实践中通常不会让优化重新变差:因为$\gamma_i$和$\beta_i$的初始值通常设为1和0,此时Batch Normalization层不会对标准化后的结果做额外缩放和平移,随后它们会随网络一起通过梯度下降学习。
另外,Deep Learning中每一层的输出都可能进行Batch Normalization:一个样本经过一层得到一个向量;一个batch的$N$个样本经过这一层就得到$N$个向量。对下一层来说,它们就是输入特征,可以再次进行Batch Normalization。
需要注意的是,训练时使用当前batch的均值和方差进行标准化,同时更新全局的running mean和running variance(属于模型的持久化状态);推理时则使用训练过程中累积的全局统计量running mean和running variance,而不再依赖当前batch。
Overfitting (4)
模型在训练数据上表现极好,但在未见过的测试数据上表现显著变差。有的类似与《数值分析》中,使用高次幂函数来做插值,虽然经过所有点(Loss为0),但中间跳动太大。原因可能是:
- 模型弹性太大(激活函数个数、层数太多)
- 训练数据太少
- 训练时间过长
- 特征过多/冗余,包含与目标无关的噪声特征
类比:只有3个点(训练数据少),但使用5次函数来拟合它。
应对:
- 增加训练数据;
- Data augmentation;例如,把图片左右反转;
- 降低模型弹性(constrained model);例如目标是一个二次函数,使用五次函数做模型,训练数据太少(例如只有3个点),就可能出现overfitting;而使用二次函数模型,就会得到精确解。
- 减少参数
- 减少输入特征
- Early stopping (防止训练时间过长)
- Regularization
- Dropout