李宏毅机器学习笔记—第二节—General Guidance

本节一开始是讲解了关于以后作业的内容,再次不做过多的说明。

目录

Loss on training data——large 

1.model bias

 2.optimization

3.Solution

1.Gaining the insights from comparison

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

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

Loss on training data——small

1.overfitting

 2.solution(overfitting)

1.增加你的训练集

2.不要让你的模型,有那么大的弹性,给它一些限制, 

3.Cross Validation(交叉验证)

4.N-fold Cross Validation(N次交叉验证)

3.mismatch


​​​​​​​

Loss on training data——large 

1.model bias

model bias是loss on training data 过大的时候情况的一种。实际上这里的model bias其实就是指你的model too simple。因此无论你怎么调试你的未知参数,得到的结果都不会很满意(类似于矮子里面挑高个),所以碰到这种情况我们所要做的就是重新设计一个新的model来确保更多的灵活性。

 2.optimization

optimization也是loss on training data 过大的时候情况的一种。不同于model bias中model的问题1,这里的问题是关于寻找最小值的问题。以gradinent descent为例(目前的课程只讲述了gradinent descent),对于一个model而言gradinent descent可能并不能找到最小值,找到的可能是极小值,所以碰到这个问题我们需要换一种optimize的方法。

因此,当我们真的遇到这种问题时,我们应该如何区分到底是因为model bias所导致的这一问题还是因为optimization所导致的这一问题呢?

3.Solution

1.Gaining the insights from comparison

从上图我们可以看到,当Testing Date里面20-layer的loss小于56-layer的loss时,这并不是所谓的overfitting。我还需要检查Training Data的loss,我们可以看到Training Data里面20-layer的loss也是小于56-layer的loss。我们就可以推断出导致这个问题出现的原因是optimization issue。

因为56层的network弹性肯定是大于20层的network,另外56层的network要做到20层的network所做到的事儿也是轻而易举的,因此我们知道56层的optimization的问题。

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

总结上面的例子,如何知道你的optimization到底有没有做好,我们可以先跑一些比较小的,比较浅的network,或甚至用一些,不是deep learning的方法,类似于linear model,support vector machine等(因为这些模型不会有optimization失败的问题),通过一些简单的model,我们就可以事先了解一下这个loss的一个大概的值(或者可以说是下限)。

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

如果你发现你深的model,跟浅的model比起来,深的model明明弹性比较大,但loss却没有办法比浅的model压得更低,那就代表说你的optimization有问题。就要去修改你的optimization。

Loss on training data——small

1.overfitting

overfitting是Loss on training data较小,但是在loss on testing data上过大的一种情况。

上图为一个极端的情况,在Training data中的loss为0,而在testing data中的loss 则是不确定的,可能很大也可能很低。

而在一般情况下我们也会遇到这样的问题。

举例来说,假设我们输入的feature叫做x,我们输出的叫做y,那x跟y都是一维的。

 在这里我们用虚线画出x和y的关系,并且我们随意的选择了3个曲线上的点作为sample。今天的模型 它的能力非常的强,它的flexibility很大,它的弹性很大的话,你只给它这三个点,它会知道说,在这三个点上面我们要让loss低,所以今天你的model,它的这个曲线会通过这三个点,但是对于模型的绘制,我们并没有给出一定的限制,因为它的flexibility很大,它弹性很大,所以你的model,可以变成各式各样的function。

所以对于training data的点,loss可能会做到loss的最小值,但是对于testing data的点,loss的值却不确定的(可能很大也可能很小)

 2.solution(overfitting)

这里我们对overfitting有两种解决的办法。

1.增加你的训练集

通过增加蓝色的点,从而实现一个限制的功能,通过一些途径收集到更多的数据从而得到。很显然这种方法对于我们的作业来说不是很推荐。那我们可以通过别的方法来实现一个数据的增加,那就是data augmentation 。data augmentation是根据自己的手上的资料来创造出新的资料。

以上图为例,我们可以通过左右翻转,放大缩小来得到一些新的资料,但前提是你所获取新的资料是合理了。像图四那样翻转颠倒的图就是不可以的。

2.不要让你的模型,有那么大的弹性,给它一些限制, 

还是以上面的x与y的关系为例,同样我们给出了少量的数据集,但是我们给出了这个x和y的基本关系,就是一个二次函数。加上这个限制以后,我们便可以得到几个function,然后在这几个function里面找到一个结果较好的function。而对于我们要如何在model加这个限制,这个取决于我们对这个问题的认识,因为这种model是你自己设计的,到底model要多constrain多flexible,结果才会好,那这个要问你自己,那要看这个设计出不同的模型,你就会得出不同的结果 。

有哪些方法可以给model创造限制呢,举例来说

1.给它比较少的参数(如果是deep learning的话,就给它比较少的神经元的数目,本来每层一千个神经元,改成一百个神经元之类的)

2.用比较少的features

3.Early stopping

4.Regularization

5.Dropout

但是同样的,我们对于一个model也不能给予太多的限制。

假设我们现在给模型更大的限制说,我们假设我们的模型,一定是Linear的Model,一定是写成y=a+bx,那你的model它能够產生的function,就一定是一条直线。

然后我们再给出少量的点,可以看到没有任何一条直线,可以同时通过这三个点,但是你只能找到一条直线,这条直线跟这些点比起来,它们的距离是比较近的,但是你没有办法找到任何一条直线,同时通过这三个点,这个时候你的模型的限制就太大了,你在测试集上就不会得到好的结果。其实这个已经是一个model bias的问题了,也就是说你给的model的限制太大,已经变成了model bias的问题了。

3.Cross Validation(交叉验证)

 那么对于一个模型而言,如果说你的Training data的loss随着model越来越复杂复杂一直在变小,但是你的Testing data 的loss却在到达了某一个值后迅速的增加,这个其实就是overfitting的问题了,那么对于我们而言应该如何去找一个合适的model呢?

在这里我们用的方法是Cross Validation,就是将Training data中的数据分成两份,一部分叫作Training Set,一部分是Validation Set。也就是说对于数据而言,你分成了训练集,验证集还有测试集。通过训练集得到的model然后在验证集上进行一个初步的预测,如果可以就上传,作为测试集的模型。如果不行就对模型就行一个改动。

4.N-fold Cross Validation(N次交叉验证)

N次交叉验证的机制和交叉验证差不多,多次交叉验证就是将数据集打乱顺讯的分成3分,在利用你现有的模型进行一个计算,取平均值最小的模型进行一个提交。那假设现在model 1的结果最好,你用这三个fold得出来的结果是,这个model 1最好,然后你再把model 1,用在全部的Training Set上,然后训练出来的模型,再用在Testing Set上面。

3.mismatch

mismatch它的原因跟overfitting,其实不一样,一般的overfitting,你可以用搜集更多的资料来克服,但是mismatch意思是说,你今天的训练集跟测试集,它们的分布是不一样的,在训练集跟测试集,分佈是不一样的时候,你训练集再增加,其实也没有帮助了。

 本人目前还在机器学习的初期,因此博客的有些知识点会有一定的差错,还请各位指正,感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值