1.1 训练/开发/测试集
在构建一个机器学习模型时,需要将数据分配为训练(training)集、开发(development)集、测试集(test)集,合理的分配将会显著提高模型训练的效率。
如图1所示,训练集用于开展对模型的训练,开发集用于选择最好的模型,当模型确定好以后,在测试集上来进行无偏评估。在机器学习时代,常见的数据划分做法是训练集70%测试集30%。如果没有明确设置验证集,也可以按照60/20/20%进行划分,以上做法针对的时数据集较小的情况,例如1万个数据左右。
针对大数据时代的深度学习,测试集和测试集比例会减小。例如有100万个数据的话,只需要拿出1万个(1%)数据作为验证集,1万个(1%)数据作为测试集。对于超高100万的数据集,验证集和测试集甚至可以更小(0.25%和0.25%)
现在越来越多的情况是训练集和测试分布是不同的,例如检测图片中是否有猫的模型,训练集中的图片一般来自网页,都是高分辨率的清晰图片,而验证和测试集的图片大都是用户自己拍摄的低分辨率模糊图片。为了保证良好的预测效果,需要保证训练集和验证、测试集分布保持一致。
另外,如果不需要进行无偏测试的话,测试集也可以省去,即只划分训练集和验证集。
2.1 偏差/方差
偏差和方差时衡量一个模型预测效果好坏的重要指标。
图3 不同的偏差和方差情况
左图采用logistic回归分析预测的分类结果,该模型不能有效区分出不同类型,属于高偏差的情况。右图采用深层神经网络构建出了复杂的分类模型,虽然有效区分出了所有的不同类别,但是模型过于复杂,出现了过拟合(overfitting),属于高方差的情况。中图区分出了大部分的不同类别,虽然有个别值出现了错误分类,但总体分类准确度很高且模型较为简单,属于较优的模型。
下面以猫的分类模型为例进行说明。
假设人眼的识别误差几乎达到0%:
如果训练集误差为1%,验证集误差为11%,则是训练集过拟合(overfitting)的情况,属于高方差。
如果训练集误差为15%,验证集误差为16%,则是训练集欠拟合(underfitting)的情况,属于高偏差。
如果训练集误差为15%,验证集误差为30%,则是训练集欠拟合(underfitting)和过拟合(overfitting)同时存在的情况,高偏差和高方差并存。
如果训练集误差为0.5%,验证集误差为1%,则模型效果较好,属于低偏差和低方差。
注意,如果人眼的识别误差是15%的话,如果训练集误差为15%,验证集误差为16%,则认为模型表现是很优秀的,属于于低偏差和低方差的情况。
最后,图5说明了高方差和高偏差同时存在的情况。
分类曲线对整体的分类效果较弱,存在多个数据分类错误的情况,整体属于欠拟合,此外曲线中心部位较为复杂,对两个数据点进行了正确的分类,却出现了过拟合的情况。
1.3 机器学习基础
这节讲述了如何针对高偏差、高方差的情况对模型进行调试的策略。
如果模型出现了高偏差(训练集上出现欠拟合),则可以增大网络规模,例如增加隐藏层层数、提高节点数目等来减小偏差,或者【训练时间延长、采用新型的网络架构(后面讲到的CNN,RNN等)】,【】中的方法可能有效也可能无效,需要实际地去尝试才知道。重复这些步骤,直到模型在训练集上能够达到很好的拟合效果。
将上面训练好的模型用于验证集时,可能会出现高方差(训练集过拟合)的情况,最好的解决方法是采用更多的数据,但是如果不能获得更多的数据的话,可以采用正则化的方法,减小过拟合的现象。
这里有两点需要注意:
1.高偏差和高方差是两种不同的情况,需要有针对性的选取模型的优化策略。
2.在机器学习的早期,有很多关于权衡偏差和方差策略的讨论,这是因为当时的一些策略只能单一的减小偏差却提高方差,或者减少方差提高偏差,很难实现两者的同时减小。在如今的深度学习和大数据时代,只要持续训练一个更大的网络,就能够减小偏差而不影响方差。喂给模型更多的数据,可以做到减小方差而不显著影响偏差。
1.4 正则化
当你的模型出现了过拟合,也就是方差过大的情况时,一个有效的方法时增大训练集的数据量,但是当没有更多的数据或者获取新的数据成本过高时,可以使用正则化(regularization)的方法。
以logistic回归为例,可以将代价函数加入一个正则化项。
其中 ||w||22 | | w | | 2 2 为 w w 的欧几里德范数:
这种方法称为 L2 L 2 正则化。为什么不在代价函数中加入偏置 b b 的正则化项呢?因为 包含了很多参数,这些参数已经可以描述过拟合的情况,这时 b b 可以省略掉。
还有一种方法是
正则化:
如果使用 L1 L 1 正则化,得到的 w w 将是稀疏的,也就是其中有很多0。
上面的 是正则化参数,通常使用验证集来调试 λ λ 参数,这样可以把 w w 控制在一个较小的值,防止过拟合。
神经网络模型中的正则化如下: