1.引言
这一部分主要是学习怎样快速高效的优化机器学习项目,假如你想优化你的猫分类器系统,你可以:
- 收集更多的数据
- 增加数据的多样性
- 梯度下降算法训练时间更长一些
- 尝试不同的而优化算法,比如Adam
- 尝试规模更大或更小的网络结构
- 尝试加入Dropout
- 加入L2正则
- 修改网络结构,比如激活函数、隐藏单元个数等等
当优化一个深度学习系统时,通常有很多的方法以供尝试,但是如果选择了一个错误的方向,往往会浪费大量的时间。
2.正交化
这里的正交化的含义是每次尽可能的只调整一个影响因子,比如老式电视机屏幕控制按钮,控制高度、宽度、梯形、水平位置、旋转的按钮每个要独立控制单一属性,
而不要说一个按钮既可以同时控制所有的属性。
要调整好一个监督系统,需要确保四件事情:
训练的系统在训练集上有不错的结果
训练集上的表现必须通过某种评估,达到能接受的程度
对于某些应用可能意味着达到人类水平的表现
在成本函数上不能很好拟合训练集时,你想要一组按钮或一个特定的按钮来调整算法,让它很好的拟合训练集,比如你可以切换更大的网络或更好的优化算法比如Adam
在开发集上有好的表现
训练集上的表现必须通过某种评估,达到能接受的程度
对于某些应用可能意味着达到人类水平的表
如果算法那对训练集很好但是开发集的拟合很差,你希望有一组或一个独立的按钮可以让系统在开发集上有好的表现,比如增大训练集
在测试集上有好的表现
训练集上的表现必须通过某种评估,达到能接受的程度
对于某些应用可能意味着达到人类水平的表
在测试集上表现不好呢?可能是在开发集上过拟合了,可以选择更大的开发集合
在实际应用中有好的表现
如果在测试集合上也表现良好,但是无法在实际应用中达到满意的结果,意味着需要改变开发集或成本函数,因为如果根据某个成本函数系统在测试集上做的很好,但是无法反应算法在现实世界中的表现意味着要么你开发集的分布设置不正确,要么成本函数测量的指标不对。
3.单一数字评估指标
在开始一个机器学习项目之前为项目设置一个数值评估指标,比如对于一个猫分类器,可以用准确率和召回率
- 查准率P:分类器分类为猫的图像中有多少确实为猫
- 查全率R:对于所有为猫的图像,分类器识别出的百分比
准确率和召回率是很好的指标,但是在实际应用中并不推荐使用查准率和查全率最为评估指标,比如有两个算法一个在查准率上表现更好一些,一个在查全率上表现更好一些,你就很难权衡两个算法的好坏,所以最好是能够制定一个单一指标的评价标准,F1score是一个结合查全率和查准率的指标,计算方式如下: $$F1=frac{2}{frac{1}{P}+frac{1}{R}}$$
4.满足指标与优化指标(satisficing and optimizing metircs)
假如要做另外一个猫分类器,用F1score来评估算法的分类精度,但是算法同时要求运行时间不能超过100ms,这样就很难把分类精度与运行时间整合成一个整体评估指标,只需要算法在满足运行时间小于100ms的条件下,尽可能的优化算法的分类精度,这里算法运行时间就是satisficing metric,分类精度就是optimizing metric。对应下图就是选择分类器B作为最优分类器。
如果有N个指标,选择其中一个指标作为优化指标,其它N-1个指标都作为满足指标,也就是算法在满足N-1个指标的阈值范围时,尽可能的优化优化指标。
假如正在构建一个唤醒词业务,比如小爱音响的小爱同学,你可能会关注唤醒词检测系统的准确性,也就是一个人说出唤醒词后,小爱音响被唤醒的概率;另外可能还要估计误唤醒,也就是用户没有说小爱同学时,音响被唤醒的概率。这种情况小爱组合这两个指标的合理方式是最大化准确度同时满足24小时内最多出现一次误唤醒。所以唤醒词检测准确率就是optimizing metric,24小时误唤醒次数就是satisficing metric
5.开发与测试集(dev/test)
开发集也叫做保留交叉验证集(hold out cross validation set),机器学习的工作思路是尝试很多的想法,用训练集训练不同的模型,然后用开发集来评估不同的思路,选择一个,然后不断迭代去改善开发集的性能,直到最后得到一个不错的结果,并用测试集评估。
如果要开发一个猫分类器,对US、UK、Other Europe、South America、India、China、other Aisa、Austrlia八个提供支持,如果选择US、UK、Other Europe、South America作为开发集,India、China、other Aisa、Austrlia四个地区作为测试集的话,效果最后可能并不理想,因为开发集和测试集数据分布并不相同。建议先将数据随机,然后再随机选出开发集和测试集,这样开发集和测试集有着同分布。
结论:开发集和测试集保证同分布,尽可能的与以后要使用场景的数据同分布。
6. 开发与测试集数据大小
早期数据划分方式:
- 70%训练集:30%测试集
- 60%训练集:20%开发集:20%测试集
当前数据划分方式:
- 98%训练集:1%的开发集:1%测试集
早期数据量比较小,用7:3 或 6:2:2的数据划分方式是合理的,但是随着数据量的增加,而且深度学习对于数据的需求很大,所以通常会把更多数据划入训练样本。
测试集的目的是完成系统后帮你评估投入生产的系统的性能,所以设置训练集的大小尽可能大一些,能够以高置信度评估系统整体性能,但是这个数据集远小于整体数据集的30%,同样也取决于你有多少数据,
7.什么时候改变开发集、测试集于评估指标
仍然假设做一个猫分类器,假如训练了两个猫分类器A、B,A按照评估指标的误差率是3%,B是5%,从评估指标来看显而易见A分类器效果更好一些,但是在使用中发现,A分类器会将黄色图片分类成猫,而B分类器不会,这对于一个真实应用来说是比较严重的一个问题,通常用开发集评估分类器误差率计算公式为:
8.为什么是人的表现?
9.可避免偏差
10.理解人的表现
11.超过人的表现
12.改善模型的表现