General Guide

机器学习一般流程,如下图:
image.png
描述如下:
二:General Guidance(机器学习通常步骤) - 图2
针对以上流程分小节进行分别谈论。

Loss is bigger than prediction

Model bias

image.png
如上图,因为model的结果集太简单,所以不管如何优化都无法找到最合适的那个Loss即二:General Guidance(机器学习通常步骤) - 图4,就如之前regression章节,通过根据实体问题,以及对其的了解,设计改变model的复杂度,同时给model更大的扩展性,并增加更多的feature可以有效的扩大这个结果集,从而可以将目标loss囊括在内。
【注】:并不是Loss大就一定是model bias的问题,也有可能Optimization的问题。

Optimization Issue

如Regression中所述,gradient descent就是一种优化方法,不同的优化方法有不同的适用场景,常用的不同优化算法见XXX,此处仅对Gradient descent进行举例说明。
gradient descent(梯度下降法)在梯度为0的地方可能卡住不动,即local minimal,如下图:
image.png

Summary

Gaining the insights from comparison

image.png

举一个例子,这一个实验是从residual network那篇paper里摘录出来的,paper链接http://arxiv.org/abs/1512.03385 这篇paper一开头就跟你讲一个故事,它说我想测2个networks

  • 一个network有20层
  • 一个network有56层

    它们测试在测试集上,横轴指的是training的过程,即参数update的过程,随着参数的update,当然loss会越来越低,但是结果20层的loss比较低,56层的loss却没有达到预期。 首先说出结论,这个现象不是overfitting,并不是所有的结果不好,都叫做overfitting。 根据训练集上的解释,这代表56层的network,它的optimization没有做好。你可能会问,你怎麼知道是56层的optimization不给力,搞不好是model bias,搞不好是56层的network,它的model弹性还不够大,它要156层才好,56层也许弹性还不够大,但是你比较56层跟20层,20层的loss都已经可以做到这样了,56层的弹性一定比20层更大对不对。 如果今天56层的network要做到20层的network可以做到的事情,对它来说是轻而易举的 它只要前20层的参数,跟这个20层的network一样,剩下36层就什麼事都不做,copy前一层的输出就好了,56层的network一定可以做到20层的network可以做到的事情,所以20层的network已经都可以走到这麼底的loss了,56层的network,它比20层的network弹性还要更大,所以没有道理它的loss更大。 所以56层的network,如果你optimization成功的话,它应该要比20层的network,可以得到更低的loss,但结果在训练集上面没有,这个不是overfitting,这个也不是model bias,因为56层network弹性是够的,这个问题是你的optimization做得不够好。

Start from shallower networks (or other models),which are easier to train

所以根据上述情况,对于Optimization的问题,可以有如下的解决方案(之一):
可以先跑一些比较小的,比较浅的network,或甚至用一些不是deep learning的方法,比如说 linear model,比如说support vector machine。跑一些不需要Optimization的model和network这样可以提前知道,这些简单的model可以做到什么程度的Loss。

If deeper networks do not obtain smaller loss on training data,then there is optimization issue

如上说述,当换成更复杂更有深度更有弹性的model时,Loss不减反增,那么说明Optimization存在问题,如下:
image.png
明明在前4层的loss已经很低了,在第5层loss不降反增,这个时候绝对不是model bias的问题,因为前四层已经能达到0.1k的loss,5层如果优化结果没问题的话,应该比第四层更低。具体优化步骤即方法见xxxx.

Loss is small but on test data is larger

Overfitting

image.png
如上图,x当做输入的时候去对比这个x曾经有没有出现在训练集里面,如果x出现过,就把它对应的ŷ当做输出,如果x没有出现在训练集里,就输出一个随机的值。
image.pngimage.png
优化后的模型,它的弹性很大,若只给它这三个点,模型会在这三个点上尽量loss变低,所以新的model它的这个曲线会通过这三个点,但是其它没有训练集做为限制的地方,因为它的自由度很大,弹性很大,故新的model,可以变成各式各样的function,可以产生各式各样奇怪的结果。
image.png
在这个情况下进行testing data的训练,测试资料和训练资料它们可能是从同一个distribution抽样出来的,测试资料是橙色的这些点,训练资料是蓝色的这些点,用蓝色的这些点,找到一个function以后,测试在橘色的这些点上,不一定会好,如果你的model它的自由度很大的话,它可以产生非常奇怪的曲线,导致训练集上的结果好,但是测试集上的loss很大。

how to fix overfitting

  1. 增加training data(训练资料)

image.png
如上图,尽可能多的训练资料可以规避overfitting,若客观无法获取更多的数据,也可以进行data argumentation(数据创造(误))。
image.png
如上图,来选择合适的data augmentation的方式,来增加资料。

  1. 给模型一些限制,不要让模型有过分的弹性

image.pngimage.png
image.png

  • 设置比较少的参数,如果是deep learning的话,就给它比较少的神经元的数目,本来每层一千个神经元,改成一百个神经元之类的,或者是你可以让model共用参数,你可以让一些参数有一样的数值。
  • 比较少的features,本来给三天的资料,改成用给两天的资料,其实结果就好了一些。
  • 还有叫做Early stopping,Regularization,这个后续再表.
  • Dropout这是另外一个在Deep Learning里面,常用来限制模型的方法。

Cross Validation

image.pngimage.png
将Training的资料分成两半,一部分叫作Training Set,一部分是Validation Set。

N-fold Cross Validation

image.png

N-fold Cross Validation就是你先把你的训练集切成N等份,在这个例子裡面我们切成三等份,切完以后,你拿其中一份当作Validation Set,另外两份当Training Set,然后这件事情你要重复三次。 也就是说,你先第一份第二份当Train,第三份当Validation,然后第一份第三份当Train,第二份当Validation,第一份当Validation,第二份第三份当Train 然后接下来 你有三个模型,你不知道哪一个是好的,你就把这三个模型,在这三个setting下,在这三个Training跟Validation的,data set上面,通通跑过一次,然后把这三个模型,在这三种状况的结果都平均起来,把每一个模型在这三种状况的结果,都平均起来,再看看谁的结果最好 那假设现在model 1的结果最好,你用这三个fold得出来的结果是,这个model 1最好,然后你再把model 1,用在全部的Training Set上,然后训练出来的模型,再用在Testing Set上面,好 那这个是N-fold Cross Validation。