斯坦福机器学习课程 第三周 (4)正则化:解决过拟合问题

机器学习模型需要拥有很好地泛化能力来适应训练集中没有出现过的新样本。

在这个节中,我们将介绍正则化方面的知识,这有助于预防过拟合的问题的产生。

解决过拟合问题

视频地址

到现在为止,你已经见识了几种不同的学习算法。包括线性回归和逻辑回归,它们能够有效地解决许多问题,但是当将它们应用到某些特定的机器学习应用时,会遇到过度拟合(over-fitting)的问题,可能会导致它们效果很差。

在这一节中,我将为你解释什么是过度拟合问题,并且在此之后接下来的几节中,我们将谈论一种称为正则化(regularization)的技术,它可以改善或者减少过度拟合问题,以使学习算法更好实现。

梯度下降中的过拟合问题

让我们继续使用那个线性回归来预测房价的例子。

欠拟合

我们通过建立以住房面积为自变量的函数来预测房价,我们可以对该数据做线性回归:

但是这不是一个很好的模型,我们来看看这些数据,很明显,随着房子面积增大,住房价格的变化趋势趋于稳定,或者往右越平缓。因此这个算法没有很好地拟合训练数据。

我们把这个问题称为欠拟合(under fitting),这个问题的另一个术语叫做高偏差(High bias)

这两种说法大致相似,意思是它只是没有很好地拟合训练数据。

bias这个词是过去传下来的一个专业名词,它的意思是如果拟合一条直线,到训练数据,就好像算法有一个很强的偏见,或者说非常大的偏差。

因为该算法认为房子价格与面积仅仅线性相关,尽管与该数据的事实相反,它还是接近于拟合一条直线,而此法最终导致拟合数据效果很差。

刚好合适

当我们加入一个二次项,在这组数据中,我们用二次函数来拟合它:

事实证明这个拟合效果很好。

过拟合

另一个极端情况是,如果我们拟合一个四次多项式,因此在这里我们用五个参数来拟合这五个训练样本,你可以得到看上去像这样的一条曲线:

一方面似乎对训练数据做了一个很好的拟合,因为这条曲线通过了所有的训练实例。但是,这任然是一条扭曲的曲线。它不停上下波动,因此事实上,我们并不认为它是一个预测房价的好模型。

这个问题我们把他叫做过度拟合(over fitting),另一个描述该问题的术语是高方差(variance)

介于高偏差高方差这两者之间的情况叫做“刚好合适”

概括地说,过拟合的问题将会在变量过多的时候发生,这种时候训练出的方程总能很好的拟合训练数据,所以你的代价函数实际上可能非常接近于0,甚至就是0。但是这会导致这种模型无法泛化到新的数据样本中,以至于无法预测新样本价格。

在这里术语“泛化(generalize)”指的是一个假设模型能够应用到新样本的能力。

逻辑回归中的过拟合问题

类似的方法同样可以应用到逻辑回归

这里是一个以$x_{1}$,$x_{2}$为变量的逻辑回归。

欠拟合

我们先用下面这个假设函数来拟合:

$$
h_{\theta}(x) = g(\theta_{0} + \theta_{1}x_{1} + \theta_{2}x_{2})
$$

$$
(g=sigmoid\ function)
$$

拟合的结果如下:

它直接分开了正样本和负样本,但这个模型并不能够很好地拟合数据。因此这是一个欠拟合的例子。或者说假设模型具有高偏差。

刚好适合

相比之下,如果我们再加入一些变量,改用这样一个多项式:

$$
h_{\theta}(x) = g(\theta_{0} + \theta_{1}x_{1} + \theta_{2}x_{2} + \theta_{3}x_{1}^{2} + \theta_{4}x_{2}^{2} + \theta_{5}x_{1}x_{2})
$$

那么你可以得到一个能比较好的拟合数据的判定边界:

过拟合

在另一种极端情况下,如果你用高阶多项式来拟合数据:

$$
h_{\theta}(x) = g(\theta_{0} + \theta_{1}x_{1} + \theta_{2}x_{1}^{2} + \theta_{3}x_{1}^{2}x_{2} + \theta_{4}x_{1}^{2}x_{2}^{2} + \theta_{5}x_{1}^{2} x_{2}^{3} + \theta_{6}x_{1}^{3}x_{2} + …)
$$

那么逻辑回归可能发生自身扭曲:

它会千方百计的来形成扭曲以至于成为一条能尽量拟合每一个样本的拟合曲线。

这是一个过拟合的例子,是一个高方差假设模型,它不能够很好泛化到新样本。

解决过拟合问题

当我们使用一维或二维数据时,我们可以通过绘制出假设模型的图像来研究问题所在,再选择合适的多项式来拟合数据。因此在以之前的房屋价格为例,我们可以绘制假设模型的图像就能看到模型的曲线非常扭曲,并通过所有的样本房价:

我们可以通过绘制这样的图形来选择合适的多项式阶次,但当我们遇到有很多变量的假设模型时,我们就无法绘制出图像了:

当我们有过多变量,同时只有非常少的训练数据时,就会出现过度拟合的问题。

为了解决过度拟合问题,有两种方法:

  • 1.要尽量减少选取的变量的数量。

    • 具体而言我们可以人工检测变量的条目,保留重要的特征,舍弃无用的特征
    • 模型选择算法(后面的课程会提到)
  • 2.正则化

    • 保留所有的特征变量,但是通过减少参数$\theta_{j}$的数量级或值的大小。

正则化相关的知识点将在接下来的内容中介绍。

代价函数

视频地址

在这一节中,我将传达给你一个关于正则化的直观的感受,并且我们还要写出使用正则化时需要使用的代价函数。

在上一节中,我们看到了如果说我们要用一个二次函数来拟合这些数据,拟合的效果会很好。

然而我们用一个更高次的多项式去拟合,我们最终可能得到一个曲线,能非常好的拟合训练集,但是这真的不是一个好的结果。

它过度拟合了数据,因此泛化性并不是很好。

让我们考虑下面的假设:

我们想要加上惩罚项,从而使参数$\theta_{3}$和$\theta_{4}$足够的小。这里我的意思就是,尽量减少代价函数的均方误差。

对于上面这个函数,我们对它添加一些项:

现在,如果想最小化这个函数,我们需要尽量减少$\theta_{3}$和$\theta_{4}$的值。

如果我们减少了这两项的值,就像是在上面的式子中忽略了后面的两项:

最终得到一个近似的二次函数,从而达到恰当地拟合数据的表达式。


在这个具体的例子中,我们看到了,惩罚$\theta_{3}$和$\theta_{4}$这两个大的参数值的效果。

所以推广到更通用的情况下,这里给出了正规化背后的思路。这种思路就是如果我们的参数值对应一个较小的值的话,那么往往我们会得到一个形式更简单的假设函数。

所以我们最后一个例子中我们惩罚的只是$\theta_{3}$和$\theta_{4}$,使这两个数值均接近于零。我们从而得到了一个更简单的假设。

通常情况下来讲,参数值减少的越多,函数越光滑,因此就不易发生过拟合的问题。


具体例子

来让我们看看具体的例子:

对于房屋价格预测,我们可能有上百种特征,我们谈到了一些可能的特征,比如说:

  • $x_{1}$是房屋的尺寸
  • $x_{2}$是卧室的数目
  • $x_{3}$是房屋的层数

我们可能有一百个特征。

跟前面的多项式例子不同,我们是不知道$\theta_{3}$,$\theta_{4}$是高阶多项式的项,即如果我们有一百个特征,我们是很难提前选出那些关联度更小的特征的。我们不知道如何选择参数来缩小参数的数目。

因此在正规化中,我们要做的事情,就是通过修改我们的代价函数(这里就是线性回归的代价函数)

从而缩小我所有的参数值,修改方式就是在这后面添加一项:

当我在最后添加一个额外的正则化项的时候,我们收缩了每个参数,并且因此 我们会使我们所有的参数$\theta_{1}.\theta_{2}.\theta_{3}.\theta_{4}…\theta_{100}$的值变小。

顺便说一下,按照惯例来讲,我们是从$\theta_{1}$开始的:

所以我实际上没有去惩罚$\theta_{0}$,因此$\theta_{0}$的值是大的。

在实际情况中,是否包含$\theta_{0}$只会有非常小的差异。

正规化优化的目标

我们正规化之后的代价函数如下:

在后面的正规化项中的$λ$我们称为正规化参数

$λ$要做的就是控制在两个不同的目标中的一个平衡关系:

  • 第一个目标就是:我们想要训练使假设函数更好的拟合训练数据。
  • 第二个目标就是:我们想要保持参数值较小。

参数$λ$就是用来控制这两者之间的平衡,目标就是平衡拟合训练的目的和保持参数值较小的目的。(即欠拟合和过拟合的平衡)

对于我们房屋价格预测的例子来说,尽管我们之前已经用非常高的高阶多项式来拟合,我们将会得到一个非常弯曲和复杂的曲线函数,就像下面这样:

但现在我们不这样了,你只需要确保使用了正规化目标的方法,那么你就可以得到一个类似于二次函数但并不是真正的二次函数的一条曲线:

这样我们就得到了对于这个数据来说更好的假设函数。


在正规化线性回归中,如果正规化参数值被设定为非常大,那么会发生什么呢?

我们将会非常大地惩罚我们的参数,会使得所有的参数接近于0。如果我们这么做,那么就相当于我们从假设函数中去掉了这些项,并且使得我们只是留下了一个简单的假设:

$$
h_{\theta}(x) = \theta_{0}
$$

那就是类似于拟合了一条水平直线:

对于数据来说这就是欠拟合(underfitting)

换句话说,就是这种假设有过于强烈的“偏见”或者过高的偏差(bais),认为预测的价格只是等于$\theta_{0}$。

因此为了使正则化运作的良好,我们应该去选择一个不错的正则化参数$λ$,并且当我们讲到多重选择时,我们将会介绍一种方法来自动选择正则化参数$λ$。这就是高度正则化的思路。

正则化线性回归

视频地址

对于线性回归的求解,我们之前推导了两种学习算法:一种基于梯度下降、一种基于正规方程。

在这段视频中,我们将继续学习这两个算法,并把它们推广到正则化线性回归中去。

基于梯度下降

这是我们上节课推导出的正则化线性回归的优化目标:

前面第一部分是一般线性回归的目标函数,后半部分是正则化项。其中$\lambda$是正则化参数。我们想找到能最小化代价函数的参数$\theta$。

之前,我们使用梯度下降求解原来没有正则项的代价函数:

我们会反复更新参数$\theta_{j}$,其中$j=0,1,2,3,…,n$。

让我们把$j=0$的情况单独写出来:

我只是把$\theta_{0}$的更新分离出来,剩下的这些参数($\theta_{j}$其中$j=1,2,3,…,n$)更新作为另一部分,所以这样做其实没有什么变化。仅仅是把$\theta_{0}$的更新从其他参数中分离出来。

我这样做的原因是因为上节课提到的,对于正则化的线性回归,我们惩罚参数从$\theta_{1}$开始,我们不惩罚$\theta_{0}$。所以当我们修改这个正则化线性回归的算法时,我们将对$\theta_{0}$有所不同。

具体地说,如果我们要对这个算法进行修改,并用它求解正则化的目标函数,我们需要做的是把下面的这一项加上正则化项:

如果这样做的话,那么你就有了用于最小化正则化代价函数$J(\theta)$的梯度下降算法。

对于上面式子中第二项:

可以改写为这种形式:

具体来讲,这一项的值:

通常是一个小于1的具体的实数(通常情况下是一个比1小一点点的值),所以我们可以把它想成一个像$0.99$一样的数字。

所以对$\theta_{j}$更新的结果我们可以看作是被替换为$\theta_{j}$的0.99倍(把$\theta_{j}$向0压缩了一点点)。

另外后面的这一项:

实际上与我们原来的梯度下降更新完全一样。


当我们使用正则化线性回归时,我们需要做的就是在每一个被正则化的参数$\theta_{j}$上乘以了一个比1小一点点的数字,然后,我们执行跟以前一样的更新。

基于正规方程

梯度下降只是拟合线性回归模型的两种算法之一,另一种算法是基于正规方程。

我们的做法是建立这个设计矩阵X:

其中每一行对应于一个单独的训练样本。

然后创建一个m维度的向量y,包含了所有训练集里的标签:

所以X是一个$m \times (n+1)$维矩阵。

为了最小化代价函数$J$:

我们发现一个办法就是让$\theta$等于这个式子:

$$
\theta=(X^{T}X)^{-1}X^{T}y
$$

这是没有使用正则化的表达式。

如果我们使用了正则化,我们想要得到最小值,那么我们的推导方式如下:

取$J$关于各个参数的偏导数,并令他们等于0:

然后通过一些数学推导,你可以得到这样的式子:

$$
\theta=(X^{T}X + \lambda
\begin{bmatrix}
0 & 0 & … & 0 \\
0 & 1 \\
… & … & … \\
0 & 0 & … & 1 \\
\end{bmatrix}
)^{-1}X^{T}y
$$

其中正则化矩阵左上角的元素是0,其余对角线元素都是1,剩下的元素也都是0。矩阵的维度是$(n+1)\times(n+1)$。

举个具体的例子来说明:

假设$n=2$,那么这里我们的矩阵是一个$3\times3$维的矩阵。这个矩阵看起来就是下面这种形式:

$$
\begin{bmatrix}
0 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & 1 \\
\end{bmatrix}
$$

如果你采用新定义包含正则项的$J(\theta)$,那么这个计算$\theta$的式子,能使你的$J(\theta)$达到全局最小值。

不可逆问题(*选学)

最后,我想快速地谈一下不可逆性的问题,这部分是比较高阶的内容,所以这一部分还是作为选学。

之前当我讲正规方程的时候,我们也有一段讲不可逆问题的选学视频,这节视频是作为那一节的补充。

现在考虑m(即样本总数)小于等于特征数量n:

$$
m \le n
$$

如果你的样本数量比特征数量小的话,那么这个矩阵$X^{T}X$将是不可逆的或奇异(singluar)的。

幸运的是,正规化也为我们解决了这个问题,具体地说,只要正则参数是严格大于0的:

$$
\lambda \gt 0
$$

实际上是可以证明:

$$
\theta=(X^{T}X + \lambda
\begin{bmatrix}
0 & 0 & … & 0 \\
0 & 1 \\
… & … & … \\
0 & 0 & … & 1 \\
\end{bmatrix}
)^{-1}X^{T}y
$$

$$
X^{T}X + \lambda
\begin{bmatrix}
0 & 0 & … & 0 \\
0 & 1 \\
… & … & … \\
0 & 0 & … & 1 \\
\end{bmatrix}
$$

这个矩阵是可逆的。

因此,使用正则化还可以照顾一些$X^{T}X$不可逆的问题

坚持原创技术分享,您的支持将鼓励我继续创作!