Macheine Learning Yearning学习笔记(五)

更多实时更新的个人学习笔记分享,请关注:
知乎:https://www.zhihu.com/people/yuquanle/columns
微信订阅号:AI小白入门
ID: StudyForAI

<center> </center>

Chapter 28~Chapter 32详细讨论了学习曲线(Learning curves)

Chapter 28、Diagnosing bias and variance: Learning curves(诊断偏差和方差:学习曲线)

我们已经学习了一些方法去估计有多少错误可归因于可避免的偏差和方差。我们通过估计最优错误率,并计算算法的训练集和开发集误差来进行估计的。下面讨论一个更具体的方法:绘制学习曲线。

学习曲线会根据训练样本的数量来绘制开发集误差。为了绘制它,你可以使用不同大小的训练集去运行算法。例如,如果你有1000个样本,你可以在100,200,300,…,1000个样本上单独训练算法副本。然后你就能画出开发集误差如何随着训练集大小而变化的曲线了。如下图所示:

随着训练集大小的增加,开发集误差应该减少。

我们经常会有一些我们希望学习算法最终能达到的“期望错误率”。例如:
(1)如果我们希望达到人类水平的表现,那么人类错误率可能就是“期望错误率”。
(2)如果我们的学习算法为某些产品提供服务(如提供猫图),我们可能会直观的了解需什么样的水平才能给用户提供出色的体验。
(3)如果你长期从事于一个重要应用,那么你可能会有直觉认为在下一个季度/年内能合理取得多大进展。

将期望误差率添加到你的学习曲线中:

你可以直观的看到红色的“开发集错误”曲线随着训练数据集增加的变化过程,以此来猜测通过添加更多的数据你能够多接近期望的性能水平。在上图中,通过加倍训练集大小来达到期望的水平看似合理的。

但如果开发错误曲线趋于“稳定”(即变平),那么你可以立刻知道添加更多数据并不能达到你的目标:

如果增加训练数据对算法性能提升不起效,查看学习曲线可能会帮助你避免花费数月时间来收集两倍多的训练数据。

Chapter 29、Plotting training error(绘制训练集误差曲线)

你的开发集(和测试集)错误应该随着训练集大小的增长而减少。但随着训练集大小的增加,训练集错误通常会增加。

让我们举例说明这个效果。假设你的训练集有只有两个样本:一张猫图和一张非猫图。学习算法很容易“记住”训练集中这两个样本,并且训练集错误率为0%。

现在假设你的训练集有100个样本。可能有一些样本是被错误标记或模棱两可的——一些图非常模糊,甚至人都不能区分是否有猫。或许学习算法仍能“记住”大部分或所有的训练集,但现在很难获得100%的准确率。通过将训练集样本数从2增加到100,你将发现训练集准确率将略有下降。

最后,假设你的训练集有10000个样本。这种情况下算法更难以完全适应10000个样本,特别是有一些样本是模棱两可或错误标注的。因此,你的学习算法在该训练集上将做的更糟。

让我们为之前的曲线(开发错误曲线)添加训练错误曲线:

你可以看到蓝色的“训练错误”曲线随着训练集大小的增长而增长。而且,算法通常在训练集上表现比在开发集上要好。因此,红色的开发错误曲线通常严格地在蓝色训练错误曲线上方。

下一步我们将讨论如何解释这些曲线。

Chapter 30、Interpreting learning curves: High bias(解释学习曲线:高偏差)

假设开发集误差曲线变化如下:

上面谈到,如果开发集误差曲线平坦,您不可能仅通过添加数据就能达到所需的性能。而且我们很难确切的去推测红色的开发集误差曲线的后续变化。如果开发集数据比较小的话,那么这种不确定性程度会增加,因为曲线可能有噪声影响。
这个时候,假设我们增加训练集误差曲线:

此时,我们可以确定增加训练数据集不会降低开发集的误差。

原因如下:
(1)随着训练数据的增加,训练数据集误差曲线会变得更差,因此蓝色的曲线要么保持平坦要么变得更高。
(2)红色的曲线通常会比蓝色的曲线高。因此,训练误差高于期望的性能水平,添加更多数据几乎无法让红色开发错误曲线下降到期望的性能水平。

Chapter 31、Interpreting learning curves: Other cases(解释学习曲线:其他情况)

情况一:

蓝色的训练错误曲线相对低,红色开发错误曲线远高于蓝色训练错误。因此,偏差较小,但是方差较大。添加更多训练数据可能有助于缩小开发错误和训练错误之间的差距。

情况二:

这次,训练错误较大,远高于期望性能水平。开发错误也比训练错误大很多。因此,具有显著的偏差和方差。你将不得不在算法中去寻找同时减少偏差和方差的方法。

Chapter 32、Plotting learning curves(绘制学习曲线)

假设你有一个非常小的训练集,只有100个样本。随机选择10个样本的子集来训练你的算法,然后是20个样本,然后30,直到100,以10个为间隔增加样本数。然后使用这10个数据点绘制学习曲线。你可能会发现曲线在较小的训练集大小下看起来有些嘈杂(意思是这些值比期望的要高/低)。

当只在10个随机选择的样本上训练时,你可能不幸选到了特别“bad”的训练集,例如有很多模棱两可/错误标注的样本。或者,你可能幸运的选到了特别“good”的训练集。小的训练集意味着开发和训练错误可能会随机波动。

如果你的机器学习应用严重偏倚一个类别(如负样本远比正样本多的猫分类任务),或者类别数比较大(如识别100种不同动物类别),那么选择尤其是“不具代表性”或坏的训练集的几率更大。例如,如果80%的样本是负样本(y=0),只有20%是正样本(y=1),那么有可能10个样本的训练集只包含负样本,因此很难让算法学习到有意义的东西。

如果训练曲线里的噪声使得我们很难发现真实的趋势,这里有两种解决方法:
(1)不是仅对10个样本的一个模型进行训练,而是通过从原始100个样本的数据集中通过替换的抽样方法(sampling with replacement)选择几个(如3-10)不同的随机选择的10个样本的训练集。在这些数据集上训练不同的模型,并对每个结果模型计算训练集和开发集错误。计算并绘制平均训练错误和平均开发集错误。
(2)如果你的训练集比较倾向一种类别,或有很多类别,从100个训练样本中选择一个“平衡的”子集而不是随机选择的10个训练样本。例如,你可以确保2/10的样本是正样本,8/10为负样本。更为一般的说,你可以确保每个类别的样本部分尽可能的接近原始训练集的整体部分。

如果你的训练集较大(比如说超过1000个样本),并且你的类别分布不是很偏,你可能不需要这些技巧。

参考:
1.http://www.mlyearning.org/
2.https://github.com/xiaqunfeng/machine-learning-yearning

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务