0%

机器学习原理-回归中的遗留问题

回归学习中,优化参数的大方针是梯度下降,但会面临各种挑战。这里简单记录原因与应对策略。

分类概览 (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(向量的长度)不是很小

可以想象,在峡谷两侧跳来跳去的。

figure1

图1: Rugged Error Surface

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
写的不错,有赏!