本篇文章给大家谈谈yearning,以及years ago什么意思的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
文章详情介绍:
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/
更多个人笔记请关注:
公众号:StudyForAI(小白人工智能入门学习)
Macheine Learning Yearning学习笔记(一)
Chapter1~Chapter 4谈了一些基本概念
Chapter 1、Why Machine Learning Strategy (为什么要学习机器学习策略)
这一章告诉我们机器学习策略的重要性,以一个实际的机器学习项目切入: 猫检测算法,这是一个经典的计算机视觉领域的问题,判断给定一张图片是否是猫。
当我们提出的算法准确性还不够好的时候,我们应该怎么做?这个时候我们可能会面临很多想法的选择,例如:
(1)获取更多的数据:收集更多的猫的照片
(2)收集更多样化的训练集。例如,猫在不寻常的位置的图片;不寻常颜色
的猫;不同相机设置下拍摄出的猫图; ....
(3)增加算法运算的时间,比如增加梯度下降算法的迭代次数
(4)尝试更大的神经网络,比如增加网络的层数(网络的深度),隐藏单位的个数(网络的宽度),这样网络会具备更多的参数,从而表征能力更强
(5)尝试更小的神经网络
(6)尝试添加正则化(例如L2正则化)
(7)改变神经网络架构(激活功能,隐藏单位数等)
(8)还有许多其它的idea尝试……
在这些可能会提高准确性的想法中,如果一开始就选择的好,那么会节约很多时间,从而提升效果;如果选择的不恰当,那么可能会浪费大量的时间去进行这些尝试。那么知道了这些,当我们遇到这种情况时,我们应该如何抉择?NG的这本书就是出自这个目的写的。很多机器学习问题给人们留下了很多可以借鉴的经验,这些经验会告诉你,那些尝试是有用的,那些尝试是作用不大的,而学习这些经验可能会节约我们很多瞎尝试的时间。
Chapter 2、How to use this book to help your team (如何使用本书帮助团队)
这一章说了自己为什么每一章都写那么短,这样打印出来也比较方便,随时可看~.~
Chapter 3、Prerequisites and Notation(基本概念)
要熟悉基本的机器学习概念, 如果不熟悉,可以先移步NG的经典机器学习视频。
善良的我已经找好了链接:
http://open.163.com/special/opencourse/machinelearning.html
监督学习(supervised learning):使用标记的训练样本(x,y)去学习一个从x映射到y的函数。
监督学习包括:线性回归(linear regression)、逻辑回归(logistic regression)、K-近邻算法(K-Nearest Neighbors)、决策树(Decision Trees)、朴素贝叶斯(Naive Bayesian)、神经网络(neural networks)(也称为”deep learning”)等。
无监督学习包括:聚类(clustering)、降维(reducing dimensionality)
Chapter 4、Scale drives machine learning progress (数据规模驱动了机器学习的进程)
深度学习(神经网络)不是新东西,已经存在几十年了,为什么现在才火起来?这个主要是由以下原因:
数据可用性:人们在数字设备(如电脑)的活动尝试了大量的数据,这些数据可以用来训练和喂给(feed)我们的学习算法。
算力:现在计算机的计算能力提升,使得能够计算更复杂网络和使用更大的数据训练。
举个例子:
即使数据量足够大,传统算法(如逻辑回归)在某个任务上表现性能也是”平稳”的。如下图,意思就是说即使给它更多的数据,算法也不会再有很大的提升效果。
这其实就是在某些任务上,传统算法的函数表征能力不足以学习到这么多数据。这个时候神经网络就登上历史舞台了。
在这种情况下,我们会得到更好的性能,当我们有:
(1)训练一个非常大的神经网络,使其在上面的绿色曲线上;
(2)有大量的数据。
当然神经网络的架构也很重要,这一点也有很多创新。
但是现在提高算法性能的更可靠的方法之一仍然是:
(1)训练更大的网络;
(2)获得更多的数据。
如何合适的完成(1)和(2)的方法是极其复杂的,这也是NG这本书要详细讨论的事情。
注意:上图Small NN指的是具有相对较少的隐藏单元、隐藏层、参数的神经网络。
参考:
1.http://www.mlyearning.org/
2.https://xiaqunfeng.gitbooks.io/machine-learning-yearning/content/
更多个人笔记请关注:
公众号:StudyForAI(小白人工智能入门学习)