机器学习基石笔记(四)

四、 How Can Machines Learn Better?

   我个人感觉第四讲是整个基石课程的精髓所在,很多东西说的很深也很好。

 首先是overfitting的问题,过拟合是一个常发生的情况,简单的理解就是下图,low Ein不一定是好事,因为我们的目的是low Eout。所以不能过拟合你的训练集是每个machine learning工程师需要注意的事情。

 

overfitting简单的理解就是:学习的人太厉害,而需要学习的知识太简单,如上图,你用一个5次的函数去学习这样一个数据集,实在是大材小用了。

当然影响overfitting的还有其他因素,总的来说要避免overfitting我们需要做到:1、很少的噪声数据 2、适合的dvc 3、足够多的数据。

下图是一个悲伤的故事,我们知道十次函数的学习能力肯定远远的超过二次函数,但似乎在这两种情况下,它的表现都很令人捉鸡...

Why?如果你还记得之前的学习曲线和公示的话大概就会清楚了,如下图所示,需要注意的是,这一切都建立在N比较小的时候。

  需要注意的是,我们通常可能认为g10不如g2的时候,是因为它对噪声的影响太过敏感了,而事实上在完全没有噪声的数据上,他也是完败的,这里引出来的问题是,真的没有“噪声”么?或许目标的复杂度一定程度上也可以看做噪声?

  In fact,我们可以把噪声分为两类,stichastic noise,真实世界产生的噪声数据,deterministic noise,由模型的复杂度引起的噪声数据,后者简单的理解就是,我用10次多项式去拟合一个由50次多项式产生的数据,肯定有很多地方我是做不到拟合的,那么那些数据从某种意义上来说,就是噪声。

  下图蓝色表示好,红色表示很差。左图很好理解,右图在左下角需要解释一下。因为目标函数是一个十次函数产生的数据,所以在模型的复杂度从10往下走的时候,表现的会越来差。因为当你用10次多项式的函数去拟合小于10次的目标函数的时候,表现的当然回事overftting

  

 

  

  下面说的是一个避免overfitting的一个常见的方法: Regularization,正则化!

  这里林老师引入正则化的角度非常棒,我们上面知道,H2的表现有时候比H10好,然后H10是可以做成H2的效果的,只要让多出来的几项的参数为0即可,也就是如果我们给H10的W加上一系列的限制,或许他可以取得不错的效果。

  下图事关于constrained optimization的方法,其实就是拉格朗日乘子法的后一步。

  

  下图是三个参数之前的关系:

  

并且,正则化可以很好的和VCbound联系起来,因为减小了参数的自由度,自然也就降低了模型的复杂度,也就减小了过拟合的风险:

 

 

 

    Then,是Validation,在实践中非常重要的一个问题,因为我们不可能获得最终的测试集的,当然即使可以也不应该用,因为不利于模型的Generalization,所以设置验证集是很有用and很有必要的。

    validation在模型的选择、超参数的选择上面有很大的作用。

    但在给定的数据集上划分train set和validation set同样存在一个悖论问题,很好理解,K太大,train就不准,k太小,validation就不准,因此根据经验,一般取K=N/5:

    

  

    更加好的方法是V-fold Validation,就是把数据集分成V个fold,然后分别把每个作为验证集在用其他V-1的fold去train,得到的V个结果再平均,这个结果很不错,问题是计算量有点大,一般在实际中取5-fold或者10-fold

 

  Conclusion

    Ok,终于到基石的最后一章了,整个笔记我觉得写得很一般...不过还好其实只是给自己看的,有些东西好不容易理解了,还是记下来常看看比较好,所以就这样了吧..

    奥卡姆的剃须刀阐释了一个原则:simple is better,翻译过来就是,不要想太多.....

    后面还提到了一个data snooping的问题,也就是我们要尽量少的利用数据的先验,除非你知道你算法应用的场景一定也满足这个先验,不然很容易让你的模型overfitting。

    然后是一个总结性的东西:

    

 

 

 

    

 

 

 

 

 

 

 

posted @ 2016-09-23 14:21  亦轩Dhc  阅读(549)  评论(0编辑  收藏  举报