一、应用机器学习是高度迭代的过程
决定项目进展速度的重要因素是创建高质量的训练数据集、验证集和测试集
二、训练/验证/测试集
将数据集划分为三个部分:
- 训练集执行训练算法
- 验证集选择最佳模型
- 测试集无偏评估算法运行情况
在小数据的机器学习时代,采用以下两种划分比例:
- train:70% dev:30%
- train:60% dev:20% test:20%
后者是非常合理的划分
在如今大数据时代,数据可能是百万级的,验证集和测试集的比例可以大大降低,100万条数据仅仅需要1万条数据作为验证集,1万条数据作为测试集。
- train:98%(甚至更高)
- dev:1%(甚至更低)
- test:1%(甚至更低)
三、训练集/测试集不匹配问题
训练集可能是网上下载的图片,验证集和测试集是用户上传的图片,两种途径获取的图片有较大差异的像素和后期。建议是验证集和测试集来自同一分布!而训练集需要大量数据,利用现在的一些技术,如网页抓取等,可以获取大量数据作为训练集,但是验证集和测试集建议来自同一分布。
如果没有测试集也不要紧,测试集是对神经网络系统做无偏评估,如果没有需要也可以不设置测试集,仅仅在验证集对模型进行评估即可。在只有训练集和验证集的情况下,验证集同样被称作测试集,不过在实际应用中,人们把测试集当作交叉验证集使用。
四、偏差和方差
- 第一幅图用一条直线逻辑回归拟合,分类器偏差较高,是 欠拟合 情况
- 第三幅图用到神经网络分类,分类器方差较高,是 过拟合 情况
- 第二幅图复杂度居中,是 适度拟合 分类器
沿用猫猫图片识别的例子,如果图片是猫则标签为1,反之为0
考虑训练集和验证集的误差(error)
- train set error:1% — 人眼识别失误率
- dev set error:11% — 过拟合训练集,没有利用好交叉验证,方差较大
- train set error:15% — 假设人眼识别的失误率约0%,那么算法欠拟合,偏差较大
- dev set error:16% — 验证集结果合理
- train set error:15% — 偏差较大
- dev set error:30% — 方差较大
- train set error:0.5% — 低偏差
- dev set error:1% — 低方差
在如上的解释中,我们假定人眼识别图片的误差为0%,这是最优误差也是基础误差。
对于判断偏差和方差的总结:
- 查看训练集误差可以判断偏差情况
- 查看验证集误差可以判断方差情况
- 结论基于基础误差的大小
- 训练集和验证集来自同分布
直观理解高偏差和高方差
下图中的线性数据拟合度低,产生高偏差
下图过度拟合部分数据,产生高偏差(几乎线性分类器,并未拟合好数据)和高方差(使用曲线或二次函数,曲线灵活度太高,过度拟合两个样本点/中间的活跃数据)
五、机器学习方法降低偏差和方差
高偏差解决方法:
- 更大规模的神经网络
- 更长的训练时间
- 尝试神经网络结构
高方差解决方法: - 用更多数据
- 正则化较少过拟合
- 尝试更适合的神经网络结构
通常调整一项的同时,另一项会受到影响,如何权衡方差和偏差就是一个问题。而在当今的深度学习和大数据时代下,持续训练大规模网络,准备充足数据,只要正则适度,通常可以在不明显影响偏差的同时,减小方差。 吴恩达老师认为深度学习对监督学习大有脾益的一个重要原因就在这里了。