一、引言

对于一个训练好的模型,我们需要知道它是否能很好地适应现实应用。也就是说,我们希望得知该模型对于训练样本之外的数据,是否也能有较好的预测效果。

模型的这种能力称为泛化能力

这一问题本质上还是我们之前讨论过的拟合问题。只不过对于一个较为复杂的模型来说,常常不能将其拟合或分类的结果用图像直观表示。如果我们不能较为清晰地评估模型,那就无法进一步进行优化调整(如调整正则化系数、增加或减少特征、增加样本数量等)。因此我们需要方法,来一般化地评估模型的质量。

二、泛化能力的衡量指标

正如前一节所说,泛化能力的衡量就是衡量模型对训练样本集之外的数据集的预测效果。我们知道衡量模型对训练样本预测效果的指标是损失函数,那么对于其他数据,我们同样可以把损失函数的概念迁移到这里来。

我们可以将已经获得的数据划分为两部分,一部分用于训练模型,称为训练集;另一部分用于测试模型的泛化能力,称为测试集。对于用训练集训练后的数据,我们再求该模型对测试集数据的损失函数。

举个例子,如果我们采用简单的平方误差损失函数,则我们就是要求

$$ J_{test}(\vec{w},b) = \frac{1}{2m_{test}}\sum_{i=0}^{m_{test}-1} ( f_{\vec{w},b}(\vec{x}^{(i)}_{test}) - y^{(i)}_{test} )^2 $$

$J_{test}(\vec{w},b)$ 就是我们对该模型泛化能力的衡量指标,称为测试误差。

我们可以将该指标与训练集的损失函数值 $J_{train}(\vec{w},b)$(注意这里没有正则项,称为训练误差)进行比较。一般的情况是 $J_{test}(\vec{w},b)$ 大于 $J_{train}(\vec{w},b)$。

我们还可以将该模型的泛化能力与其他模型的泛化能力,或者与人类的误差进行比较。这样我们就可以评价我们所训练的模型的优劣了。

三、交叉验证集

在我们继续评估模型之前,我们要先来考虑一些我们究竟要如何进行优化。你可能会想,我们既然有了评价模型泛化能力的指标 $J_{test}$,那么只要试图让该指标减小不就可以了吗?这是一个很直接的想法。

但问题是,如果我们向着使 $J_{test}$ 减小的目标优化,那么测试集与训练集有什么区别呢?按照这种方法,测试集就相当于变成了训练集的一部分,而不再能成为衡量训练集之外泛化能力的样本了。

因此,我们不能将训练集作为优化的方向,而只能将其作为评价的指标。我们需要再分出一部分数据,作为优化时的参考。这就是交叉验证(Cross-validation)集。对应的衡量指标为 $J_{cv}$

四、模型评价

我们用偏差和方差来评价一个模型。

  • 偏差表示模型对训练集的预测相对于真实情况的误差,如果模型对训练样本都不能很好地拟合或分类,就称其为高偏差的。 $J_{train}$ 可衡量模型的偏差。
  • 方差表示模型对测试集的预测相对于真实情况的误差(也就是泛化能力本身),如果模型不能很好地预测测试集中数据,就称其为高方差的。$J_{cv}$ 可衡量模型的方差。

一般来说,模型的方差会大于偏差。因此高偏差的模型都是高方差的。

随着模型复杂度的提升,模型的偏差会逐渐降低,但偏差会先降低再升高;随着训练样本量的提升,偏差会逐渐减小,方差会逐渐升高,直到最后方差和偏差程度接近。

五、倾斜数据集的误差指标

对于正面例子和负面例子比例差距较大的训练样本(也就是说,被标记为某一结果的样本数量占样本总数的比例很大或很小),根据全概率分布可知,可能就算全部预测同一结果,其正确的概率也很大。因此我们需要能消除样本本身概率分布导致的正确率偏差的指标。

有两种误差指标用于评价这种情况。分别为准确率(Precision)和召回率(Recall)。

  • 准确率衡量的是,模型预测为某一结果的情况中,有多少是预测正确的。
  • 召回率衡量的是,对所有真正为某一结果的情况,有多少是模型预测到的。

也就是说,设

  • TP表示将正类预测为正类的数量
  • FN表示将正类预测为负类的数量
  • FP表示将负类预测为正类的数量
  • TN表示将负类预测为负类的数量

则准确率为

$$ P = \frac{TP}{TP + FP} $$

召回率为

$$ R = \frac{TP}{TP + FN} $$

可以这样理解,把预测的过程当做选择的过程,准确率高就是“不重”,不过多的选择,以致把许多不属于的也包括在内;召回率高就是“不漏”,不过少地选择,把一些属于的漏掉了。

我们很容易就能得知,准确率和召回率在一定程度上是矛盾的。想要准确率高,就很可能漏掉一些;想要召回率高,就可能包含了不属于的东西。

对于逻辑回归来说,提高阈值(即把多少数值以上的设定为真),准确率上升,召回率下降;降低阈值,准确率下降,召回率上升。

要权衡准确率和召回率,对模型进行整体的评价的方法是采用 F1 分数(F1 Score)。即

$$ F1 = \frac{1}{\frac{1}{2}(\frac{1}{P} + \frac{1}{R})} $$

相当于对准确率和召回率的调和平均

五、优化策略

优化模型需要考虑不同的情况。

一种是模型具有高偏差的情况。 模型具有高偏差,常常意味着当前的模型复杂度不足以拟合当前数据。此时若一味地增加训练数据量,并不会使得拟合效果提高太多。应该做的是提高模型复杂度。如增加特征、增加层数、减小正则化系数等等。

另一种是模型具有高方差,且偏差较低的情况。 这种情况常常意味着模型对样本产生了过拟合。需要做的是降低拟合程度。采取如减少特征、增大正则化系数等手段。增加训练数据量在这种情况下可以起到效果。

这里再介绍一些增加数据量的方法:

除了通过各种手段获取新数据以外,我们还可以利用现有数据创造新数据。如对于图像,可以将其经过旋转、伸缩、扭曲等操作生成新的图像;又比如音频,可以增加背景音、噪声等来模拟更加真实的环境。这些手段都能增加模型的稳健性和泛用性。

迁移学习同样是一种利用数据的手段。该方法获得经过其他数据训练过的用于完成类似任务的模型,修改部分神经层(如输出层),再进行当前任务的训练。这样做相当于使用了其他任务中的数据。(这种方法可行的原因是,相似的任务,在位置靠前的部分常有类似的处理过程)