乐趣区

关于神经网络:MindSpore跟着小Mi一起机器学习关于应用机器学习时的一些建议

到目前为止,小 Mi 曾经给大家介绍了许多不同的学习算法,感觉大伙曾经人不知; 鬼不觉地成为一个理解许多先进机器学习技术的专家啦。当然,在理解的同时如何高效无力地使用这些学习算法呢?怎么抉择一条最合适、最正确的路线,而不是把工夫节约在毫无意义的尝试上呢?如果你想晓得的话,那么跟着小 Mi 持续机器学习吧~

1 机器学习诊断法
具体来说,咱们依然能够应用预测房价的学习例子为例,如果咱们曾经实现了正则化线性回归,也就是最小化代价函数的值,在咱们失去学习参数当前,如果将假如函数放到一组新的屋宇样本上进行测试时发现,预测的房价与理论数据产生了微小的误差。那么这个时候要做的必定就是改良这个算法啦,那么问题就来了,应该如何改良算法呢?

改良这个算法的性能,咱们最先想到的办法之一可能就是应用更多的训练样本。具体来讲就是获取更多的不同的屋宇理论发售数据。遗憾的是,好多人破费了好多工夫想收集更多的训练样本。他们总认为,要是有两倍甚至十倍数量的训练数据,那就肯定会解决问题的吧?但有时候取得更多的训练数据实际上并没有太大的作用。

另一个办法呢,可能有些人会尝试选用更少的特色集。如果有一系列特色比方等等。兴许有很多特色,兴许你能够花一点工夫从这些特色中认真筛选一小部分来避免过拟合。或者兴许你须要用更多的特色,兴许目前的特色集,对你来讲并不是很有帮忙。你心愿从获取更多特色的角度来收集更多的数据,同样地,你能够把这个问题扩大为一个很大的我的项目,比方应用电话考察来失去更多的屋宇案例,或者再进行土地测量来取得更多无关,这块土地的信息等等,因而这是一个简单的问题。同样的情理,咱们十分心愿在破费大量工夫实现这些工作之前,咱们就能晓得其成果如何。当然咱们也能够尝试减少多项式特色的办法,比方的平方,的平方,的乘积,咱们能够花很多工夫来思考这一办法,咱们也能够思考其余办法减小或增大正则化参数的值。咱们列出的这个单子,下面的很多办法都能够扩大开来扩大成一个六个月或更长时间的我的项目。遗憾的是,大多数人用来抉择这些办法的规范是凭感觉的,也就是说,大多数人的抉择办法是轻易从这些办法中抉择一种,比方他们会说“噢,咱们来多找点数据吧”,而后花上六个月的工夫收集了一大堆数据,而后兴许另一个人说:“好吧,让咱们来从这些房子的数据中多找点特色吧”。后果是很多人花了至多六个月工夫来实现他们轻易抉择的一种办法,而在六个月或者更长时间后,他们很遗憾地发现自己抉择的是一条不归路。侥幸的是,有一系列简略的办法能让你事倍功半,排除掉单子上的至多一半的办法,留下那些的确有前途的办法,同时也有一种很简略的办法,只有你应用,就能很轻松地排除掉很多抉择,从而为你节俭大量不必要破费的工夫。最终达到改良机器学习零碎性能的目标假如咱们须要用一个线性回归模型来预测房价,当咱们使用训练好了的模型来预测未知数据的时候发现有较大的误差,咱们下一步能够做什么?

1. 取得更多的训练样本——通常是无效的,但代价较大,上面的办法也可能无效,可思考先采纳上面的几种办法。

2. 尝试缩小特色的数量

3. 尝试取得更多的特色

4. 尝试减少多项式特色

5. 尝试缩小正则化水平

6. 尝试减少正则化水平

咱们不应该随机抉择下面的某种办法来改良咱们的算法,而是使用一些机器学习诊断法来帮忙咱们晓得下面哪些办法对咱们的算法是无效的。

在接下来的几个大节中,首先小 Mi 会给大家介绍怎么评估机器学习算法的性能,而后持续探讨这些办法,通常也能够称它们为 ” 机器学习诊断法 ”。“诊断法”的意思是:这是一种测试法,你通过执行这种测试,可能深刻理解某种算法到底是否有用。最终咱们也能够晓得要想改良一种算法的成果,什么样的尝试,才是有意义的。当然,这些诊断法的执行和实现,有时候的确须要花很多工夫来了解和实现,但这样做反而能够把工夫用在刀刃上,因为这些办法能够帮忙咱们在开发学习算法时,节俭至多几个月的工夫。

2 评估一个假如
在本节中,小 Mi 会给大家介绍一下怎么用你学过的算法来评估假如函数。前面的学习中,咱们还将以此为根底来探讨如何防止过拟合和欠拟合的问题。

当咱们确定学习算法参数的时候,咱们思考的是抉择参量来使训练误差最小化,有人认为失去一个十分小的训练误差肯定是一件坏事,但咱们曾经晓得,仅仅是因为这个假如具备很小的训练误差,并不能阐明它就肯定是一个好的假如函数。而且咱们也学习了过拟合假如函数的例子,所以这推广到新的训练集上是不实用的。那么,该如何判断一个假如函数是过拟合的呢?对于这个简略的例子,咱们通常能够对假如函数进行画图,而后察看图形趋势。但对于特色变量不止一个的个别状况,想要通过画出假如函数来进行察看,就会变得很难甚至是不可能实现的。因而,咱们须要另一种办法来评估咱们的假如函数过拟合测验。为了测验算法是否过拟合,咱们将数据分成训练集和测试集,通常用 70% 的数据作为训练集,用剩下 30% 的数据作为测试集。很重要的一点是训练集和测试集均须要含有各种类型的数据。通常状况下咱们要对数据进行“洗牌”,而后再分成训练集和测试集。

测试集评估在通过训练集让咱们的模型学习得出其参数后,对测试集使用该模型,能够用两种形式计算误差:

对于线性回归模型,利用测试集数据计算代价函数 J
对于逻辑回归模型,除了能够利用测试数据集来计算代价函数外:

误分类的比率,对于每一个测试集样本,计算:

而后对计算结果求均匀。

3 模型抉择和穿插验证集
假如咱们要在 10 个不同次数的二项式模型之间进行抉择:

显然越高次数的多项式模型越可能适应咱们的训练数据集,然而适应训练数据集并不代表着能推广至个别状况,咱们应该抉择一个更能适应个别状况的模型。咱们须要应用穿插验证集来帮忙抉择模型。即:应用 60% 的数据作为训练集,应用 20% 的数据作为穿插验证集,应用 20% 的数据作为测试集

模型抉择的办法为:

1. 应用训练集训练出 10 个模型

2. 用 10 个模型别离对穿插验证集计算得出穿插验证误差(代价函数的值)

3. 选取代价函数值最小的模型

4. 用步骤 3 中选出的模型对测试集计算得出推广误差(代价函数的值)

4 诊断偏差和方差
当运行一个学习算法时,如果这个算法的体现不现实,那么多半是呈现两种状况:要么是偏差比拟大,要么是方差比拟大。换句话说,呈现的状况要么是欠拟合,要么是过拟合问题。那么这两种状况,哪个和偏差无关,哪个和方差无关,或者是不是和两个都无关?搞清楚这一点十分重要,因为能判断呈现的状况是这两种状况中的哪一种,能够指引咱们抉择最无效的办法和路径进行算法上的改良。另外,小 Mi 具体解说一下无关偏差和方差的问题,帮忙大家弄清楚怎么评估一个学习算法,判断其是偏差还是方差有问题,因为这个问题对于弄清如何改良学习算法的成果十分重要,高偏差和高方差的问题基本上来说是欠拟合和过拟合的问题。

咱们通常会通过将训练集和穿插验证集的代价函数误差与多项式的次数绘制在同一张图表上来帮忙剖析:

对于训练集,当 d 较小时,模型拟合水平更低,误差较大;随着 d 的增长,拟合水平进步,误差减小。对于穿插验证集,当 d 较小时,模型拟合水平低,误差较大;然而随着 d 的增长,误差出现先减小后增大的趋势,转折点是咱们的模型开始过拟合训练数据集的时候。如果咱们的穿插验证集误差较大,咱们如何判断是方差还是偏差呢?依据下面的图表,咱们晓得:

训练集误差和穿插验证集误差近似时:偏差 / 欠拟合

穿插验证集误差远大于训练集误差时:方差 / 过拟合

5 正则化和偏差 / 方差
在训练模型的过程中,个别会应用一些正则化办法来避免过拟合。然而咱们可能会正则化的水平太高或太小了,即咱们在抉择的值时也须要思考与方才抉择多项式模型次数相似的问题。

抉择测试的也是值得讲究的,通常是 0 -10 之间的出现 2 倍关系的值(如:0,0.01,0.02,0.04,0.08,0.15,0.32,0.64,1.28,2.56,5.12,10 共 12 个)。咱们同样把数据分为训练集、穿插验证集和测试集。

抉择的办法为:

1. 应用训练集训练出 12 个不同水平正则化的模型

2. 用 12 个模型别离对穿插验证集计算的出穿插验证误差

3. 抉择得出穿插验证误差最小的模型

4. 使用步骤 3 中选出模型对测试集计算得出推广误差,咱们也能够同时将训练集和穿插验证集模型的代价函数误差与的值绘制在一张图表上:

当较小时,训练集误差较小(过拟合)而穿插验证集误差较大

随着的减少,训练集误差一直减少(欠拟合),而穿插验证集误差则是先减小后减少。

6 学习曲线
学习曲线就是一种很好的工具,能够应用学习曲线来判断某一个学习算法是否处于偏差、方差问题,也就是说学习曲线是学习算法的一个很好的正当测验(sanity check)。学习曲线是将训练集误差和穿插验证集误差作为训练集样本数量(m)的函数绘制的图表。即,如果咱们有 100 行数据,咱们从 1 行数据开始,逐步学习更多行的数据。思维是:当训练较少行数据的时候,训练的模型将可能十分完满地适应较少的训练数据,然而训练进去的模型却不能很好地适应穿插验证集数据或测试集数据。

如何利用学习曲线辨认高偏差 / 欠拟合:作为例子,咱们尝试用一条直线来适应上面的数据,能够看出,无论训练集有如许大误差都不会有太大改观:

也就是说在高偏差 / 欠拟合的状况下,减少数据到训练集不肯定能有帮忙。如何利用学习曲线辨认高方差 / 过拟合:假如咱们应用一个十分高次的多项式模型,并且正则化十分小,能够看出,当穿插验证集误差远大于训练集误差时,往训练集减少更多数据能够进步模型的成果。

总结来说,在高方差 / 过拟合的状况下,减少更多数据到训练集可能会进步算法成果。

7 具体应答办法
小 Mi 曾经带大家学习了怎么评估一个学习算法,探讨了模型抉择问题,偏差和方差的问题。那么这些诊断法令怎么帮忙咱们判断,哪些办法可能有助于改良学习算法的成果,而哪些可能是徒劳的呢?回顾第一节中提出的六种可选的下一步,让咱们来看一看咱们在什么状况下应该怎么抉择:

1. 取得更多的训练样本——解决高方差

2. 尝试缩小特色的数量——解决高方差

3. 尝试取得更多的特色——解决高偏差

4. 尝试减少多项式特色——解决高偏差

5. 尝试缩小正则化水平——解决高偏差

6. 尝试减少正则化水平——解决高方差

神经网络的方差和偏差:

应用较小的神经网络,相似于参数较少的状况,容易导致高偏差和欠拟合,但计算代价较小应用较大的神经网络,相似于参数较多的状况,容易导致高方差和过拟合,尽管计算代价比拟大,然而能够通过正则化伎俩来调整而更加适应数据。通常抉择较大的神经网络并采纳正则化解决会比采纳较小的神经网络成果要好。对于神经网络中的暗藏层的层数的抉择,通常从一层开始逐步减少层数,为了更好地作抉择,能够把数据分为训练集、穿插验证集和测试集,针对不同暗藏层层数的神经网络训练神经网络,而后抉择穿插验证集代价最小的神经网络。

好啦,以上就是小 Mi 给大家介绍的偏差和方差问题,以及诊断该问题的学习曲线办法。在改良学习算法的体现时,你能够充分运用以上这些内容来判断哪些路径可能是有帮忙的,而哪些办法可能是无意义的,从而咱们能够应用机器学习办法无效地解决理论问题了。心愿这几节中提到的一些技巧,对于方差、偏差,以及学习曲线为代表的诊断法可能真正帮忙大家更有效率地利用机器学习,让它们高效地工作。

下周咱们开始学习反对向量机,咱们,下期再见呦!(挥手十分钟)

退出移动版