正则化

作者: 小王子特洛伊 | 来源:发表于2019-07-11 07:12 被阅读111次

    过拟合

    上图展示了不同线性回归模型对训练集样本的拟合情况,可以发现,第一个模型是一条直线,不能很好的拟合训练集,这就是欠拟合(Underfitting)或者说模型是高偏差的(high bias)。第三个模型是一个高阶多项式,虽然对训练集拟合的很好,但它的特征过多,如果没有足够的数据约束,就不会有良好的泛化能力(泛化能力是指一个模型应用到新样本的能力,比如这里的新样本是指没有出现在训练集的样本),也就不能对新样本做出正确的预测,这就是过度拟合(Overfitting)或者说模型是高方差的(high varience)。第二个则是一个理想的模型。

    过拟合问题会在特征过多的模型中出现, 虽然训练出的假设函数能很好的拟合训练数据,通过代价函数也能够得到很小的损失,但因为它要千方百计地拟合训练集,所以通常会是一个非常复杂的曲线,导致无法泛化到新样本中,从而无法对新样本做出正确的预测。不仅是线性回归,其他机器学习算法也都有可能面临过拟合问题,下图展示了逻辑回归模型中过拟合的情况:

    通常来说过拟合的解决方法包括:

    • 减少特征的个数
    • 使用正则化,减少参数的权重
    • 增加数据量

    正则化

    通常过拟合是由于模型特征过多,过于复杂引起的,所以我们可以通过降低特征的权重来简化模型。我们尝试将图中较为复杂的模型(蓝色): h_\theta(x)=\theta_0+\theta_1x+\theta_2x^2+\theta_3x^3+\theta_4x^4 中的 x^3x^4 的参数 \theta_3\theta_4 调小来简化模型,如果使 x^3x^4 的参数调整的非常小,甚至接近于 0,那么就相当于在原模型中去掉了这两个高阶项,这样模型就被简化为了二次函数(紫色): h_\theta(x)=\theta_0+\theta_1x+\theta_2x^2,从而可以避免过拟合。然而实际情况中,我们并不知道预测结果与哪个特征的相关度低,所以不知道应该将哪个特征的参数变小,那么我们可以尝试修改代价函数,将所有参数都变小,如下所示:
    J(\theta)=\frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2+\color{red}{\lambda\sum_{i=1}^n\theta_j^2}

    注意参数 \theta_j 中的 j 是从 1 开始的,意味着我们只对特征的参数进行缩小,不对偏差项 \theta_0 进行缩小,实际上并没有什么差别。上式在原有代价函数的基础上加入了正则化项(红色),正则化参数 \lambda 相当于在两个不同目标之间做取舍,一方面是最小化损失值,也就是代价函数的前半部分,另一方面是最小化参数,也就是代价函数的后半部分。也就是说\lambda要在更好地拟合训练集和控制参数更小,从而使模型简单,避免过拟合之间保持平衡。所以需要选择合适的 \lambda 参数,如果过小则起不到简化模型的作用,仍然具有很高的方差及过拟合问题,如果过大的话则不能很好地拟合训练数据,具有很高的偏差,比如将 \lambda 设为 10^{10} ,那么所有特征接近于 0,相当于模型变成了一条直线:h_\theta(x)=\theta_0,如下图所示:

    线性回归的正则化

    梯度下降

    将线性回归的代价函数加入正则化项:
    J(\theta)=\frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2+\color{red}{\lambda\sum_{i=1}^n\theta_j^2}

    优化目标为最小化代价函数 J(\theta) 的参数\thetamin_\theta J(\theta)

    J(\theta) 求关于 \theta 的偏导,使用梯度下降公式重复迭代更新参数,注意 \theta_0\theta_j 单独更新:
    \cases{\theta_0=\theta_0-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_0^{(i)} &\text{if $\theta_0$}\\ \theta_j=\theta_j-\alpha\left[\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}+\color{red}{\frac{\lambda}{m}\theta_j}\right]&\text{if $\theta_{j(j\in1,n)}$} }

    关于 \theta_j 的计算公式可以简化为:
    \theta_j=\theta_j(1-\alpha\frac{\lambda}{m})-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}

    通常 1-\alpha\frac{\lambda}{m}<1,后半部分则和原有梯度下降一样,可以理解为正则化项只是在原有梯度下降基础上,让参数 \theta_j 乘以一个小于 1 的数(比如 0.99),从而使得参数值更小。

    正规方程

    我们可以通过正规方程直接求得最小化代价函数 J(\theta) 的参数 \theta
    \Theta=(X^TX)^{-1}X^Ty

    其中 Xm\times(n+1) 维的设计矩阵,每一行代表一个单独的训练样本。ym 维的向量,包含训练集所有的标签。正则化项是一个 (n+1)\times(n+1) 维的矩阵,对角线第二至最后一个元素都为 1,其他元素都为 0。比如 n = 2,那么正则化项矩阵为:
    \begin{bmatrix} 0 & 0 & 0 \\ 0 & 1 & 0\\0 & 0 & 1 \end{bmatrix}

    将正规方程加入正则化项:
    \Theta=(X^T X+\color{red} { \lambda \begin{bmatrix} 0 & 0 & \cdots & 0 \\ 0 & 1 & \cdots & 0 \\ \vdots & \cdots & \ddots & \vdots \\ 0 & \cdots & 0 & 1 \end{bmatrix}})^{-1}X^Ty

    正则化项矩阵实际上是对代价函数关于参数的求导,我们知道如果样本数 m 小于特征数 n,那么矩阵 X^TX是不可逆的,或者叫做奇异矩阵,虽然用伪逆函数(Octave:pinv)可以得到从数字上看似有意义的解,但不会得到很好的假设模型。不过,在加入正则化项后,只要正则化参数 \lambda 大于 0,即可保证括号内的矩阵一定是可逆的,所以正则化解决了不可逆问题,也就可以解决过拟合问题(样本过少,特征过多)。

    逻辑回归的正则化

    通常逻辑回归模型中如果包含大量的多项式特征,会容易导致过拟合问题,如下图所示:

    假设函数为:
    h_\theta(x)=g(\theta_0+\theta_1x_1+\theta_2x_1^2+\theta_3x_1^2x_2+\theta_4x_1^2x_2^2+\cdots)

    代价函数为:
    J(\theta)=-\left[\frac{1}{m}\sum_{i=1}^my^{(i)}log(h_\theta(x^{(i)}))+(1-y^{(i)})log(1-h_\theta(x^{(i)}))\right]

    将代价函数加入正则化项:
    J(\theta)=-\left[\frac{1}{m}\sum_{i=1}^my^{(i)}log(h_\theta(x^{(i)}))+(1-y^{(i)})log(1-h_\theta(x^{(i)}))+\color{red}{\frac{\lambda}{2m}\sum_{j=1}^n\theta_j^2}\right]

    这样能减小参数的权重,即使有过多的参数也能得到平滑的决策边界,从而避免过拟合。此时,我们需要单独更新\theta_0\theta_{j},和线性回归梯度下降类似,将 \theta_j 的更新加入正则化,分别迭代更新:
    \cases{\theta_0=\theta_0-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_0^{(i)} &\text{if $\theta_0$}\\ \theta_j=\theta_j-\alpha\left[\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}+\color{red}{\frac{\lambda}{m}\theta_j}\right]&\text{if $\theta_{j(j\in1,n)}$} }

    参考

    相关文章

      网友评论

        本文标题:正则化

        本文链接:https://www.haomeiwen.com/subject/wnemxctx.html