一. 如何评估泛化能力
在机器学习中,我们用训练数据集去训练一个模型,通常会定义一个Loss误差函数。通过梯度下降等算法将这个Loss最小化,来提高模型的性能。然而我们学习一个模型的目的是为了解决实际的问题,单纯地将训练数据集的loss最小化,并不能保证它在泛化一般问题时仍然是最优,甚至不能保证模型是可用的。所以我们要定义一种方式,来评估模型的泛化能力,也就是预测能力。
通常来说,我们会将数据集分成,训练集和测试集,比例一般是7:3。使用训练集去训练模型,使用测试集去评估模型的泛化能力。
- 对于回归问题:我们可以直接在测试集上计算代价函数,来评估泛化能力。
-
对于分类问题:
1.可以使用在测试集上计算代价函数,来评估泛化能力。
2.还可以计算误分类比率:当发生误判时,err=1;正确判定时,err=0;
然后对测试集上的所有元素的err求和,做平均值。
二. 模型选择
有的时候,我们在开始时,可能有多个模型可以选择,我们需要选择一个最优的模型,然后再优化。
假设我们要在10个不同次数的二项式模型之间进行选择:
如果我们使用训练集训练这10个模型,然后用测试集评估出一个泛化能力最好的模型,假设选定模型3。这看似很有道理,但是在选定模型后,调节参数的过程中,还能使用测试集吗?我们已经用测试集来选择模型了,这有失公平性。
因此,我们将数据集划分为 训练集:验证集:测试集=6:2:2,用验证集去选择模型,用测试集去调节参数。
总结:
在有多个备选模型,多个备选正则参数,多种神经网络隐藏层结构,等情况下,我们可以使用验证集来选择模型,然后用测试集评估泛化能力。
三. 偏差与方差
假设:数据集是D,数据集元素个数是m,经过模型预测的输出是f(x),样本客观真实标记是yi,数据集中的标记是yDi。有可能由于数据错误,导致数据集中的标记与实际不同。
由公式可以看出:
- 偏差度量了学习算法的期望预测与真实标记的偏离程度,刻画了算法的准确性。
- 方差度量了学习算法预测值的波动情况。
- 噪声则表示任何学习算法在泛化能力的下界,描述了学习问题本身的难度。
假设我们现在有一组训练数据,需要训练一个模型。在训练过程的最初,bias很大,因为我们的模型还没有来得及开始学习,也就是与“真实模型”差距很大。然而此时variance却很小,因为训练数据集(training data)还没有来得及对模型产生影响,所以此时将模型应用于“不同的”训练数据集也不会有太大差异。而随着训练过程的进行,bias变小了,因为我们的模型变得“聪明”了,懂得了更多关于“真实模型”的信息,输出值与真实值之间更加接近了。但是如果我们训练得时间太久了,variance就会变得很大,因为我们除了学习到关于真实模型的信息,还学到了许多具体的,只针对我们使用的训练集(真实数据的子集)的信息。
总结一下:
- 偏差:刻画模型预测能力的准确性,如果数据足够多,bias始终过大,则可能模型复杂度不够,欠拟合。
- 方差:刻画模型预测值的浮动情况,如果方差过大,波动性太强,说明拟合的太好,可能发生过拟合。
四. 误差诊断
假设用d表示多项式的指数(也就是模型复杂程度)
对于训练集,当 d 较小时,模型拟合程度更低,误差较大;随着 d 的增长,拟合程度提高,误差减小。
对于验证集,当 d 较小时,模型拟合程度低,误差较大;但是随着 d 的增长,误差呈现先减小后增大的趋势,转折点是我们的模型开始过拟合训练数据集的时候。
总结:如果验证集误差较大?如何判断过拟合、欠拟合?
训练集误差和交叉验证集误差近似时:偏差/欠拟合
交叉验证集误差远大于训练集误差时:方差/过拟合
五. 学习曲线
学习曲线就是一种很好的工具,可以使用学习曲线来判断某一个学习算法是否处于偏差、方差问题。学习曲线是学习算法的一个很好的合理检验(sanity check)。学习曲线通过增加训练集的规模,来判断拟合问题。
即,如果我们有100行数据,我们从1行数据开始,逐渐学习更多行的数据。
一般来说,学习曲线大致如下图所示,横坐标表示训练集规模,纵坐标表示代价(错误)。当数据规模很小的时候,便于拟合训练集数据,所以训练集的错误很低;但是泛化能力很差,验证集中错误很多。随着数据量的增多,泛化能力越来越好,验证集的错误减少,但是训练集的拟合误差变大,毕竟样本越多越难拟合。最终2条曲线将不断靠近,收敛于一个边界。
1. 欠拟合曲线特点
- 两条曲线收敛的很快,收敛边界处于很高的错误水平。
- 两条曲线间的差距很小。
- 无论数据规模变得多大,收敛边界都维持在高错误水平。
总结:训练集与测试集快速变化到一个稳定的高错误水平,且不再变化,很可能发生欠拟合。
2. 过拟合曲线特点
- 训练集错误维持的很低的水平,验证集(测试集)错误很高。
- 随着样本规模增加,两条曲线不断靠近,但是很难收敛。
- 验证集(测试集)的错误,比训练集的错误高很多。
总结:训练集维持在较低错误水平,测试集维持在较高错误水平,差距较大,很可能发生过拟合。
六. 改进策略
1. 过拟合:
- 获得更多的训练实例
- 尝试减少特征的数量
- 尝试增加正则化程度λ
1. 欠拟合:
- 尝试获得更多的特征
- 尝试增加多项式特征
- 尝试减少正则化程度λ
使用较小的神经网络,类似于参数较少的情况,容易导致高偏差和欠拟合,但计算代价较小。使用较大的神经网络,类似于参数较多的情况,容易导致高方差和过拟合,虽然计算代价比较大,但是可以通过正则化手段来调整而更加适应数据。
通常选择较大的神经网络并采用正则化处理会比采用较小的神经网络效果要好。
对于神经网络中的隐藏层的层数的选择,通常从一层开始逐渐增加层数,为了更好地作选择,可以把数据分为训练集、交叉验证集和测试集,针对不同隐藏层层数的神经网络训练神经网络, 然后选择交叉验证集代价最小的神经网络。