Practical Techniques

Practical Techniques

笔记作者:BrickLoo

模型的泛化能力

模式识别任务中,我们可以认为模型的输入是从巨大的总体中采样出来的子集,而这个总体遵循一定的数据分布规律。我们从同一分布中选取数据进行训练,但这些数据作为子集却不一定能完整地反映总体的规律情况,从而导致模型在遇见总体中其他没见过的数据,即同一分布的新数据时,可能得出非预期的结果。这种对于同一分布的新数据的模型性能,称为模型的泛化能力。

增强模型泛化能力的方法

增强模型泛化能力的方法有很多,这里简单介绍一下常见的几种。

输入预处理

缩放

当不同特征的数据具有不同数量级的数值时,模型对特征的敏感程度是不一样的,这时,模型可能容易忽略部分特征的影响。同时,由于模型参数的学习率具有一致性,对于不同数量级的数据模型可能难以训练出理想的参数结果。因此,一种增强模型泛化能力的方法是将输入进行归一化,让他们统一在一定的数量级范围内,例如 $0$ 到 $1$ 之间。

施加噪声

在人眼的观察中,加入噪声对样本的影响不太大,都属于同一分布内的样本,但这对于模型来说不一定。因此加入噪声相当于让模型观察到了更多分布内的新样本,因此容易学习到更准确的分布规律。

正则化

越复杂的模型,就可以拟合更复杂的决策边界。然而有时候决策边界可能不一定有这么复杂,只是样本数量与质量的局限性让我们只能看到看似复杂的决策边界。

为了应对这种情况,我们可以在训练的目标函数中加入正则化项,用来评估模型的复杂度。我们不妨将其记为 $\psi(f)$。同时,对于训练集上模型输出误差的损失,我们称为经验风险,不妨记为 $R_{emp}$。这时,新的目标函数就可以写成: $$R_{emp}+\lambda\psi(f)$$

像这样,经验风险与正则化项的和,通常被称为结构风险。在模型训练过程中使用结构风险作为损失,而不是仅仅使用经验风险,有助于模型增强泛化能力。

正则化项评估模型复杂度的方法通常是利用模型权重参数值到原点的 $L_1$ 距离和 $L_2$ 距离,因此对应的正则化方法也可以称为 $L_1$ 正则化和 $L_2$ 正则化。值得注意的是,$L_1$ 正则化更容易得到稀疏解,也就是说一些权重可能会变为零,使得模型用到的特征变少。对于原因的详细解释可以参考这个知乎问答。简单的解释是,

  1. 结构风险的训练可以看作经验风险与正则化项之间的抗衡。这是因为根据经验风险的梯度更新参数时,参数之间通常会此消彼长;即便不是此消彼长,往往也是将参数放大,而不是缩小——因为参数放大后模型输出值的差异也更加明显,起到“更加自信”的效果。因此在正则化的抗衡下,模型参数在放大的过程中会存在阻力。为了应对这个阻力,同时为了在更新时放大一些比较重要的参数,一部分不太重要的参数就会被牺牲而缩小,强化了此消彼长的特性。
  2. 对于 $L_1$ 正则化,此消彼长的操作只需要在总和的数值大小上保持一致,就不会增加正则化项带来的损失。因此为了照顾更重要的参数,模型会持续牺牲其他不重要的参数,直到参数值减为 $0$,因此结果就会变得更加稀疏。
  3. 而对于 $L_2$ 正则化,损失值的“等高线”是球形的,也就是说当一个,在保持正则化项的损失一致的情况下,增大相对更重要的参数数值时,被牺牲的参数数值会下降得越来越快,以至于到达某个点的时候,下降造成的影响会大于原本更重要的参数数值上升时的影响,即它们此时的影响同等重要,达成了制衡。因此,在 $L_2$ 正则化下,模型参数通常不会减少到 $0$。

适时停止训练

我们可以从训练数据中分离一部分数据作为验证集,用来评估模型性能。对于这部分模型没有见过的数据,模型的性能就代表了模型的泛化能力,因此当模型性能不降反升的时候,说明模型开始对训练数据过拟合,因此这时我们就可以停止训练,以保留模型的泛化能力。