第三门课-结构化机器学习项目 第一周(重点总结)


注:图片来自网络

第一周:机器学习策略(1)(ML Strategy (1))

1.1 为什么是ML策略? (Why ML Strategy)

第三门课-结构化机器学习项目 第一周(重点总结)
我们从一个启发性的例子开始讲,假设你正在调试你的猫分类器,经过一段时间的调整,你的系统达到了90%准确率,但对你的应用程序来说还不够好。
你可能有很多想法去改善你的系统,比如,你可能想我们去收集更多的训练数据吧。或者你会说,可能你的训练集的多样性还不够,你应该收集更多不同姿势的猫咪图片,或者更多样化的反例集。或者你想再用梯度下降训练算法,训练久一点。或者你想尝试用一个完全不同的优化算法,比如Adam优化算法。或者尝试使用规模更大或者更小的神经网络。或者你想试试dropout或者正则化。或者你想修改网络的架构,比如修改**函数,改变隐藏单元的数目之类的方法。
本课程目的:
我希望在这门课程中,可以教给你们一些策略,一些分析机器学习问题的方法,可以指引你们朝着最有希望的方向前进。通过快速有效的方法能够判断哪些想法是靠谱的,或者甚至提出新的想法,判断哪些是值得一试的想法,哪些是可以放心舍弃的。

1.2 正交化(Orthogonalization)

第三门课-结构化机器学习项目 第一周(重点总结)
此例中,正交化的概念是指,你可以想出一个维度,这个维度你想做的是控制转向角,还有另一个维度来控制你的速度,那么你就需要一个旋钮尽量只控制转向角,另一个旋钮控制速度。但如果将两者混在一起,一个控制装置同时改变了两个性质,那么就很难令你的车子以想要的速度和角度前进。然而正交化之后,正交意味着互成90度。设计出正交化的控制装置,最理想的情况是和你实际想控制的性质一致,这样你调整参数时就容易得多。可以单独调整转向角,还有你的油门和刹车,令车子以你想要的方式运动。
与机器学习的关系:
1. 确保以下四点①系统在训练集上得到的结果不错②系统在开发集上有好的表现③系统在测试集上也有好的表现④系统在测试集上系统的成本函数在实际使用中表现令人满意。
第三门课-结构化机器学习项目 第一周(重点总结)
2.调整
①如果你的算法在成本函数上不能很好地拟合训练集,调试的旋钮可能是训练更大的网络,或者切换到更好的优化算法(Adam优化算法)等等。
②如果算法在开发集上做的不好,但在训练集上很好,需要一组正则化的旋钮,或者增大训练集。
③如果系统在开发集上做的很好,但测试集上不好(对开发集过拟合),可能需要更大的开发集。
④如果它在测试集上做得很好,但无法给用户提供良好的体验,这意味着你需要回去,改变开发集或成本函数。

3. 训练神经网络时,一般不用early stopping。early stopping有点难以分析,因为它同时影响训练集和开发集。如果你早期停止,那么对训练集的拟合就不太好,但它同时也用来改善开发集的表现,所以这个旋钮没那么正交化。可以尝试其他更简单的手段,用这些手段调网络会简单不少。

1.3 单一数字评估指标(Single number evaluation metric)

单实数评估指标: 无论是调整超参数,或者是尝试不同的学习算法,或者在搭建机器学习系统时尝试不同手段,如果设置一个单实数评估指标,进展会快得多,它可以快速告诉你,新尝试的手段比之前的手段好还是差。
查准率P: 在你的分类器标记为猫的例子中,有多少真的是猫。所以如果分类器有95%的查准率,这意味着你的分类器说这图有猫的时候,有95%的机会真的是猫。
查全率R: 对于所有真猫的图片,你的分类器正确识别出了多少百分比。实际为猫的图片中,有多少被系统识别出来。如果分类器查全率是90%,这意味着对于所有的图像,比如说你的开发集都是真的猫图,分类器准确地分辨出了其中的90%。
查准率和查全率之间往往需要折衷,两个指标都要顾及到,你只需要找到一个新的评估指标,能够结合查准率和查全率。
查准率P和查全率R的调和平均数F1
第三门课-结构化机器学习项目 第一周(重点总结)

1.4 满足和优化指标 (Satisficing and Optimizing metric)

要把你顾及到的所有事情组合成单实数评估指标有时并不容易,有时候需要设立满足和优化指标。
例如,选择一个分类器,能够最大限度提高准确度,但必须满足运行时间要求。
第三门课-结构化机器学习项目 第一周(重点总结)
在这种情况下分类器B最好,因为在所有的运行时间都小于100毫秒的分类器中,它的准确度最好。
满足指标: 它必须达到某一设定值之后,达到之后,不那么在乎该指标有多好。
优化指标: 尽可能的好
一般地说,如果你要考虑N个指标,选择其中一个指标做为优化指标,尽量优化那个指标。剩下N-1个指标都是满足指标,只要它们达到一定阈值即可。

1.5 训练集、开发集、测试集的划分(Train/dev/test distributions)

工作流程:①尝试很多思路,用训练集训练不同的模型②然后使用开发集来评估不同的思路,然后选择一个,然后不断迭代去改善开发集的性能,直到最后你可以得到一个令你满意的成本③用测试集去评估。
开发集和测试集自同一分布:将所有数据随机洗牌,放入开发集和测试集。
设立开发集和测试集时,要选择这样的开发集和测试集,能够反映你未来会得到的数据,认为很重要的数据,必须得到好结果的数据

1.6 开发集和测试集的大小 (Size of the dev and test sets)

在大数据时代,70/30不再适用了。现在流行的是把大量数据分到训练集,然后少量数据分到开发集和测试集,特别是当你有一个非常大的数据集时。

1.7 什么时候改变开发集/测试集和评估指标(When to change dev/test sets and metrics)

如果你的评估指标无法正确评估好算法的排名,那么就需要花时间定义一个新的评估指标。
错误率指标
第三门课-结构化机器学习项目 第一周(重点总结)
加入惩罚权重的错误率指标
第三门课-结构化机器学习项目 第一周(重点总结)
w(i)为加权项,如果是普通误判,w(i)=1,如果是不能接受的误判,w(i)=10,加大惩罚
正交化的思路:第一步,设立目标定,第二步瞄准和射击目标。这两步是独立的。在定义了指标之后,才能想如何优化系统来提高这个指标评分。
如果你当前的指标和当前用来评估的数据和你真正关心必须做好的事情关系不大,那就应该更改你的指标或者你的开发测试集,让它们能更够好地反映你的算法需要处理好的数据。

1.8 为什么是人的表现 (Why human-level performance?)

第三门课-结构化机器学习项目 第一周(重点总结)
蓝色虚线:人类表现
绿色虚线:贝叶斯最优错误率(Bayes optimal error)(理论最优)

1.9 可避免偏差(Avoidable bias)

可避免偏差: 贝叶斯错误率或者对贝叶斯错误率的估计和训练错误率之间的差值。大概说明你的算法在方差问题上还有多少改善空间。你可能希望一直提高训练集表现,直到你接近贝叶斯错误率。
第三门课-结构化机器学习项目 第一周(重点总结)

贝叶斯误差 1% 7.5
训练集误差(可避免误差) 8%(7%) 8%(0.5%)
开发集误差(方差指标) 10%(2%) 10%(2%)
潜力更大 调整偏差 调整方差

1.10 理解人类的表现 (Understanding human-level performance)

假设你要观察这样的放射科图像,一个普通未经训练的人类,在此任务上达到3%的错误率;普通的医生能达到1%的错误率;经验丰富的医生0.7%;一个经验丰富的医生团队能达到0.5%的错误率。所以我想问你的问题是,你应该如何界定人类水平错误率?人类水平错误率3%,1%, 0.7%还是0.5%?
第三门课-结构化机器学习项目 第一周(重点总结)
定义人类水平错误率时,要弄清楚你的目标所在,不同场合下对错误率的要求不同。
你可以使用人类水平错误率来估计贝叶斯错误率。所以你到贝叶斯错误率估计值的差距,告诉你可避免偏差问题有多大,可避免偏差问题有多严重,而训练错误率和开发错误率之间的差值告诉你方差上的问题有多大,你的算法是否能够从训练集泛化推广到开发集。
在之前的课程中,我们测量的是训练错误率,然后观察的是训练错误率比0%高多少,就用这个差值来估计偏差有多大。
而事实证明,对于贝叶斯错误率并不都为0%(数据噪点很多时,背景声音很嘈杂的语言识别),因此,更好的估计贝叶斯错误率很有必要,可以帮助你更好地估计可避免偏差和方差,这样你就能更好的做出决策,选择减少偏差的策略,还是减少方差的策略。
这个决策技巧通常很有效,直到你的系统性能开始超越人类,那么你对贝叶斯错误率的估计就不再准确了,但这些技巧还是可以帮你做出明确的决定。

1.11 超过人类的表现(Surpassing human-level performance)

机器学习进展,会在接近或者超越人类水平的时候变得越来越慢。
第三门课-结构化机器学习项目 第一周(重点总结)
假设你有一个问题,一组人类专家达到0.5%的错误率;单个人类专家错误率是1%;你训练出来的算法有0.6%的训练错误率,0.8%的开发错误率。
在这种情况下,你会选择0.5%作为对贝叶斯错误率的估计,可避免偏差就是0.1%,方差是0.2%。和减少可避免偏差比较起来,减少方差可能空间更大。

再假设,你的算法可以得到0.3%训练错误率,还有0.4%开发错误率。
现在,可避免偏差是什么呢?事实上你的训练错误率是0.3%,这是否意味着你过拟合了0.2%,或者说贝叶斯错误率其实是0.1%呢?或者也许贝叶斯错误率是0.2%?或者贝叶斯错误率是0.3%呢?
你实际上没有足够的信息来判断优化你的算法时应该专注减少偏差还是减少方差,这样你取得进展的效率就会降低。所以在这个例子中,一旦你超过这个0.5%的门槛,要进一步优化你的机器学习问题就没有明确的选项和前进的方向了。这并不意味着你不能取得进展,你仍然可以取得重大进展。但现有的一些工具帮助你指明方向的工具就没那么好用了。

在结构化数据方面(网络广告,产品建议,偿还贷款,物流预测),机器学习远远超过了单个人类的表现,因为计算机可以比人类更敏锐地识别出数据中的统计规律。
而在自然感知任务(视觉问题,或语音识别,或自然语言处理任务)中,在某些情况下,计算机已经可以超越人类的水平了。不过现在肯定更加困难,因为人类一般很擅长这种自然感知任务。

1.12 改善你的模型表现 (Improving your model performance)

第三门课-结构化机器学习项目 第一周(重点总结)
提升机器学习系统的性能:
可避免偏差:

训练错误率和贝叶斯错误率估计值之间的距离,了解对训练集的优化还有多少空间。
可以使用规模更大的模型,或者训练更久,或者使用更好的优化算法(比如说加入momentum 或者RMSprop ),或者使用更好的算法(比如Adam ),或者寻找更好的新神经网络架构,或者说更好的超参数,或者改变**函数,或者改变层数,或者改变隐藏单位数,或者试用其他模型,或者试用其他架构(如循环神经网络和卷积神经网络)。

方差:
开发错误率和训练错误率之间的距离,了解需要做多少努力来让法表现能够从训练集推广到开发集。
可以收集更多数据,或者尝试正则化(如L2正则化,dropout 正则化),或者使用数据增强。或者试用不同的神经网络架构,超参数搜索。