Machine Learning_Ng 第7讲 过拟合与正则化

本文首发于https://www.cnblogs.com/jngwl,如需转载,请务必 于文章显要位置处注明原文出处。

# 过拟合问题(The Problem of Overfitting)


1.什么是过拟合

   过拟合问题是指训练出来的模型在训练集上表现很好,但在测试集上表现很差。即由于过度拟合原始数据,丢失了算法的本质,泛化能力较差。

  image

2.为什么会产生过拟合问题

(1) 数据有噪声

为什么数据有噪声,就可能导致模型出现过拟合现象呢?

所有的机器学习过程都是一个search假设空间的过程!我们是在模型参数空间搜索一组参数,使得我们的损失函数最小,也就是不断的接近我们的真实假设模型,而真实模型只有知道了所有的数据分布,才能得到。

往往我们的模型是在训练数据有限的情况下,找出使损失函数最小的最优模型,然后将该模型泛化于所有数据的其它部分。这是机器学习的本质!

那好,假设我们的总体数据如下面左图所示,(我这里就假设总体数据分布满足一个线性模型y = kx+b,现实中肯定不会这么简单,数据量也不会这么少,至少也是多少亿级别,但是不影响解释。反正总体数据满足模型y此时我们得到的部分数据,其中还有噪声的话,如下右图所示:

81cbb54e06f5d9c5efe4abe4b6f0159f16a57bfc715ec14c2e938685af7f909b

那么由上面训练数据点训练出来的模型肯定不是线性模型(总体数据分布下满足的标准模型),比如训练出来的模型如下:

6078e1f0db1fe9f9fdbda458c72de891

如果我拿着这个有噪声训练的模型,在训练集合上通过不断训练,可以做到损失函数值为0,但是拿着这个模型,到真实总体数据分布中(满足线性模型)去泛化,效果会非常差,因为你拿着一个非线性模型去预测线性模型的真实分布,显而易得效果是非常差的,也就产生了过拟合现象!

(2)训练数据不足,有限的训练数据

当我们训练数据不足的时候,即使得到的训练数据没有噪声,训练出来的模型也可能产生过拟合现象。假设我们的总体数据分布如下,为一个二次函数模型吧:

715bf81104afe26a02d4ed9e2281690b7193848ffdbeffa9436fc66c5e9c9593

我们得到的训练数据由于是有限的,比如是上面右图。那么由这个训练数据,我得到的模型是一个线性模型,通过训练较多的次数,我可以得到在训练数据使得损失函数为0的线性模型,拿这个模型我去泛化真实的总体分布数据(实际上是满足二次函数模型),很显然,泛化能力是非常差的,也就出现了过拟合现象!

(3)训练模型过度导致模型非常复杂

训练模型过度导致模型非常复杂,也会导致过拟合现象!这点和第一点原因结合起来其实非常好理解,当我们在训练数据训练的时候,如果训练过度,导致完全拟合了训练数据的话,得到的模型不一定是可靠的。

比如说,在有噪声的训练数据中,我们要是训练过度,会让模型学习到噪声的特征,无疑是会造成在没有噪声的真实测试集上准确率下降!

3.怎么解决过拟合问题

(1)丢弃一些不能帮助我们正确预测的特征可以是手动选择特征,也可以使用一些模型选择的算法(如PCA)

(2)正则化保留所有所有的特征,但是减少参数的大小(magnitude)

(3)early stopping

(4)数据集扩增(Data augmentation)

 

# 正则化(Regularization)


1.什么是正则化(What)

正则化(Regularization-Regular-Regularize),顾名思义即规则化,什么是规则?你妈喊你6点前回家吃饭,这就是规则,一个限制。因此,正则化即:给需要训练的目标函数加上一些规则(限制),让他们不要自我膨胀,不要像红色曲线一样想象力过于丰富

2.为什么要正则化(Why)

在机器学习算法中,我们常常将原始数据集分为三部分:training datavalidation datatesting data。这个validation data是什么?它其实就是用来避免过拟合的,在训练过程中,我们通常用它来确定一些超参数(比如根据validation data上的accuracy来确定early stopping的epoch大小、根据validation data确定learning rate等等)。那为啥不直接在testing data上做这些呢?因为如果在testing data做这些,那么随着训练的进行,我们的网络实际上就是在一点一点地overfitting我们的testing data,导致最后得到的testing accuracy没有任何参考意义。因此,training data的作用是计算梯度更新权重,validation data用来确定一些参数以避免过拟合问题,testing data则给出一个accuracy以判断网络的好坏

过拟合的时候,拟合函数的系数往往非常大,为什么?如上图红色所示,过拟合,就是拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。而正则化是通过约束参数的范数使其不要太大,所以可以在一定程度上减少过拟合情况。

因此,采用正则化的目的通常为:减少过拟合问题, 进而增强泛化能力

3.正则化线性回归

假设我们的模型为$h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2^2+\theta_3x_3^3+\theta_4x_4^4$,通过下图我们可以看出正是那些高次项导致了过拟合的发生。因此,我们要想办法使高次项的系数接近于0,以避免过拟合问题。

image

当我们 有非常多的特征,并且不知道其中哪些特征我们要惩罚时,我们将对所有的特征进行惩罚, 并且让代价函数最优化的软件来选择这些惩罚的程度,即$$J(\theta)=\frac{1}{2m}[\sum_{i=1}^{m}((h_\theta(x^{(i)})-y^{(i)})^2+\lambda\sum_{j=1}^{n}\theta_j^2)]$$其中,$\lambda$称为正则化参数(Regularization Parameter):当λ的值很大时,为了使Cost Function 尽可能的小,所有的$\theta$的值(不包括$\theta_0$ )都会在一定程度上减小; 但是,如果λ的值太大了,那么$\theta$(不包括$\theta_0$ )都会趋近于0,这样我们所得到的只能是一条 平行于x 轴的直线。 所以对于正则化,我们要取一个合理的λ的值,这样才能更好的应用正则化。

此外,需注意我们不对$\theta_0$进行惩罚

image

对于线性回归的求解,有两种算法:

(1)梯度下降法

每次在原有算法更新规则基础上令$\theta$(不包括$\theta_0$ )减去一个额外的值。或者理解为使$\theta_j$乘以一个(0,1)之间的小数,其他更新规则不变;$\theta_j=\theta_j-\alpha\frac{\partial}{\partial \theta_j}J(\theta)$且$h_\theta(x^{(i)})$中有一项为$\theta_jx_j^{(i)}$

image.

(2)正规方程法

image

4.正则化逻辑回归

类似于线性回归,我们也是给代价函数增加惩罚因子,如下图

imageimage

(1)梯度下降法

image

(2)更高级优化算法

image

 

参考链接

1.https://dwz.cn/kCkHDisw

2.https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes

posted @ 2019-01-02 22:18  清风与归_G  阅读(274)  评论(0编辑  收藏  举报