专栏首页AI小白入门Macheine Learning Yearning学习笔记(五)

Macheine Learning Yearning学习笔记(五)

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://xiaqunfeng.gitbooks.io/machine-learning-yearning/content/


更多个人笔记请关注:

知乎专栏:https://www.zhihu.com/people/yuquanle/columns

公众号:StudyForAI(小白人工智能入门学习)

本文分享自微信公众号 - AI小白入门(StudyForAI)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-01-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 实习杂记(21):LocalBroadcastManager的使用、优点在哪里?

           它来自Android 的support包,类名是android.support.v4.content.LocalBroadcastManager...

    wust小吴
  • 实习入职第五天:参数中的可变参数等小知识点

    Returns the position of the enum constant in the declaration. The first constant...

    wust小吴
  • python算法与数据结构-栈(43)

      栈作为一种数据结构,是一种只能在一端进行插入和删除操作。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹...

    Se7eN_HOU
  • 附007.Kubernetes ABAC授权

    基于属性的访问控制(ABAC)定义了访问控制范例,通过使用将属性组合在一起的策略向用户授予访问权限。

    木二
  • java 图片相似度判判断

    这阵子发现我的图像数据库中有不少内容一样的图像需要剔除,这些内容一样的图像可能尺寸不一样,通道数也可能不一样(灰度/彩色),如下三张图内容完全一样,只是亮度或色...

    DencyCheng
  • opencv 9 -- 轮廓 层次结构

    使用函数 cv2.findContours 来查找轮廓, 我们需要传入一个参数:轮廓提取模式(Contour_Retrieval_Mode)。 我们总是...

    wust小吴
  • opencv 8 --背景减除 -- BackgroundSubtractorMOG2

    例如顾客统计,使用一个静态摄像头来记录进入和离开房间的人数;或者是交通摄像头,需要提取交通工具的信息等。

    wust小吴
  • SAP ABAP实用技巧介绍系列之 ABAP XSLT 定义变量

    header变量的内容为一系列html tab,而color为一个简单的字符串. 在xslt program里使用$引用变量的内容:

    Jerry Wang
  • 实习杂记(27):android中关于横竖屏切换的那些事

    关于Android中Activity的横竖屏切换问题可以通过AndroidManifest.xml文件中的Activity来配置:

    wust小吴
  • 附008.Kubernetes TLS证书介绍及创建

    Kubernetes系统的各个组件需要使用TLS证书对其通信加密以及授权认证,建议在部署之前先生成相关的TLS证书。

    木二

扫码关注云+社区

领取腾讯云代金券