《机器学习训练秘籍》为吴恩达未发表的作品,其中文版通过微信公众号每周更新,以下是读书笔记
举个例子:如何建立一个猫咪图片初创公司
有许多的改进方案,例如:
1.获取更多的数据,即收集更多猫的图片
2.收集更加多样化的训练数据集,比如处于不常见位置的猫的图片,颜色奇异的猫的图片,以及使用不同相机参数拍摄的猫的图片
3.通过增加梯度下降(gradient descent)的迭代次数,使算法训练得久一些
4.尝试一个拥有更多层(layer)/更多隐藏元(hidden units)/更多参数(parameters)的,规模更大的神经网络
5.尝试加入正则化(例如 L2 正则化)
6.改变神经网络的架构(激活函数,隐藏元数量等等)
一般将数据集按照 70% / 30% 的比例划分为训练集(training set)和测试集(test set),并且使用这些数据构建出了一个在训练集和测试集上均表现良好的猫咪检测器,效果可能并不好,另外定义开发集用于调试模型
训练集(training set)用于运行你的学习算法。
开发集(development set)用于调整参数,选择特征,以及对学习算法作出其它决定。有时也称为留出交叉验证集(hold-out cross validation set)。
测试集(test set)用于评估算法的性能,但不会据此决定使用什么学习算法或参数。
要在特定的机器学习应用上取得进展,而不是搞研究,尝试选择服从相同分布的开发集和测试集数据,这会让团队更有效率
训练集和开发集大小并非越大越好
单值评估指标进行优化,比如准确率
猫分类器的查准率指的是在训练集(或者测试集)被预测为猫的图片中,实际类别是猫的样本比例。而查全率指的是在训练集(或者测试集)所有实际类别为猫的图片中,被正确预测为猫的样本比例。人们常常在查准率和查全率之间权衡取舍。
优化指标和满意度指标
首先定义一个“可接受的”运行时间,一般低于 100ms 。接着在限定的运行时间范围内最大化分类器的准确率。此处的运行时间是一个“满意度指标” —— 你的分类器必须在这个指标上表现得“足够好”,这儿指的是它应该至多需要 100ms,而准确度是一个“优化指标”。
通过开发集和度量指标加速迭代
如何修改开发集,首先需要研究为什么分类效果不佳
1.你需要处理的实际数据的分布和开发集/测试集数据的分布情况不同
2.你在开发集上过拟合了。
当你完成开发后,应该在测试集上评估你的系统。如果你发现算法在开发集上的性能比测试集好得多,则表明你很有可能在开发集上过拟合了。
3.该指标所度量的不是项目应当优化的目标。
>总结如何通过改进数据集对模型进行优化
选择作为开发集和测试集的数据,应当与你预期在将来获取并良好处理的数据有着相同的分布,但不需要和训练集数据的分布一致。
开发集和测试集的分布应当尽可能一致。
为你的团队选择一个单值评估指标进行优化。需要考虑多项目标时,不妨将它们整合到一个表达式里(比如对多个误差指标取平均),或者定义满意度指标和优化指标。
机器学习是一个高速迭代的过程:在最终令人满意的方案出现前,你可能要尝试很多想法。
拥有开发集、测试集和单值评估指标可以帮你快速评估一个算法,从而加速迭代过程。
当你探索一个全新的应用时,尽可能在一周内建立你的开发集、测试集和指标,而在成熟的应用上则可以花费更长的时间。
传统的 70% / 30% 训练集/测试集划分对大规模数据并不适用,实际上开发集和测试集的比例会远低于 30%。
开发集的规模应当大到能够检测出算法精度的细微改变,但也不用太大;测试集的规模应该大到能够使你对系统的最终性能作出一个充分的估计。
当开发集和评估指标不再能给团队一个正确的导向时,就尽快修改它们:(i) 如果你在开发集上过拟合,则获取更多的开发集数据。(ii) 如果开发集和测试集的数据分布和实际关注的数据分布不同,则获取新的开发集和测试集。(iii) 如果评估指标不能够对最重要的任务目标进行度量,则需要修改评估指标。
误差分析(Error Analysis) 指的是检查算法误分类的开发集样本的过程,以便你找到造成这些误差的原因
清洗误标注的开发集和测试集样本
将大型开发集拆分为两个子集,专注其一
1.Eyeball开发集:随机选择10%的开发集进行人为检查(选择的标准是错误样本能够反映错误来源)
2.Blackbox 开发集:用剩余90%的开发集测量错误率来自动评估分类器,也可以使用它来选择算法或调整超参数
意义:当你在 Eyeball 开发集中建立对样本的直观认识之后,则容易更快地过拟合。当Eyeball 开发集的性能比 Blackbox 开发集提升得更快,说明已经过拟合 Eyeball 开发集了。此时可能需要丢弃它并寻找一个新的 Eyeball 开发集
>总结如何进行基础误差分析
通过手动检查约100个算法错误分类的开发集样本来执行误差分析
考虑将开发集分为人为检查的Eyeball开发集和非人为检查的Blackbox 开发集
偏差和方差:误差的两大来源
此处定义偏差(bias)为训练集上的错误率
方差(variance)为算法在开发集(或测试集)上的表现比训练集差多少
总误差=偏差+方差
如果具有较高的可避免偏差,那么加大模型的规模(例如通过添加层/神经元数量来增加神经网络的大小)。
如果具有较高的方差,那么向训练集增加数据。
诊断偏差与方差:学习曲线
学习曲线可以将开发集的误差与训练集样本的数量进行关联比较
网友评论