吴恩达机器学习课程 | 03 过拟合

在学习算法通过训练集学习模型的过程中,可能会发生“过度学习”的情况。比如要训练一个识别树叶的模型,已有的训练集中的树叶都是锯齿状的树叶,如果过度学习这个训练集,最终得出来的模型就会以为树叶必须有锯齿,于是会把没有锯齿的树叶判断为不是树叶。这种问题称为过拟合 overfitting问题。

那么怎么解决过拟合问题?

有至少两种方法可以缓解这个问题,第一种方法是减少特征的数量,但一般来说特征的减少会造成信息的缺失,导致最终学习出来的模型存在一定的缺陷。

第二种方法就是调整模型的各个参数。考虑到过拟合问题的本质就是我们的模型(也就是函数)的图像几乎百分之百地经过了所有训练集上的数据点,即过度拟合,加上训练集中的样本并不全面,导致我们的学习算法最终学到的函数其实是错误(片面)的。由于函数的图像由各个参数所决定,而过拟合函数的参数过于精确复杂,我们需要做的就是调整这些参数的精确度。怎么调整这些参数?这就需要用到正则化 regularization 的方法。

Regularization

例如对于下图的训练集,左图是正常的拟合结果,而右图则是过拟合的结果(当然右图有可能是一个很好的拟合结果,但为了方便说明概念,这里假定右图是过拟合的结果)。

吴恩达机器学习课程 | 03 过拟合

可以看到右图的曲线所代表的函数比左图复杂很多。使用 regularization 的方法可以缓解过拟合的问题,具体的做法是设置一系列惩罚项,用来减小一些参数的值,对于上图,则是减小 θ3\theta_3θ4\theta_4 的值。在自动调整参数的过程中,通过一些手段,使得 θ3\theta_3θ4\theta_4 保持在一个较小的值,具体的方式是通过这样的一个 cost function:

J(θ)=12mi=1m(hθ(x(i))y(i))2+1000θ32+1000θ42J(\theta)=\frac{1}{2m}\sum^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})^2+1000\theta_3^2 + 1000\theta^2_4

对于这个式子,为什么能做到将 θ3\theta_3θ4\theta_4 控制在 0 左右呢?因为我们的目标是将 cost function 最小化,由于上式在后面加了这么大的两项,为了使总体最小,这就导致了最终 θ3\theta_3θ4\theta_4 最后的值会非常小。

通过这个式子,可以将 θ3\theta_3θ4\theta_4 的值控制在 0 左右,这使得最后得到的模型几乎是个二次函数。

假如我们的问题有 100 个特征,但不知道具体可以通过减小哪些参数值来缓解过拟合问题,对于这种情况,我们会采取将所有的参数值一并减小的措施来缓解过拟合问题。更一般化的 cost function 如下,其中 n 为特征的个数:

J(θ)=12m[i=1m(hθ(x(i))y(i))2+λj=1nθj2]J(\theta)=\frac{1}{2m}\left[\sum^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})^2+\lambda\sum^{n}_{j=1}\theta_j^2\right]

  • λj=1nθj2\lambda\sum^{n}_{j=1}\theta_j^2 称为 regularization termλ\lambda 称为 regularization parameter
  • 注意 jj 是从 1 开始的,也就是说 θ0\theta_0 不会受到影响。

需要注意的是,当 λ\lambda 过大时,会导致除 θ0\theta_0 以外的所有参数的值都在 0 左右,导致最终式子几乎相当于只剩下一个参数 θ0\theta_0,这会导致欠拟合,所以 λ\lambda 值的选择很重要。那么怎么选择 λ\lambda 的值?如何让计算机自动地选择 λ\lambda 呢?

补充:

吴恩达机器学习课程 | 03 过拟合

欠拟合

与过拟合相对应,欠拟合 underfitting 的意思是对训练集的拟合程度很差。

Regularized linear regression

使用线性回归模型拟合数据如果发生过拟合问题该如何解决?

加入正则化项后的线性回归模型的 cost function 与之前相同:

J(θ)=12m[i=1m(hθ(x(i))y(i))2+λj=1nθj2]J(\theta)=\frac{1}{2m}\left[\sum^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})^2+\lambda\sum^{n}_{j=1}\theta_j^2\right]

现在我们需要找到这个 cost function 的最小值,也就是找到最优的那一组参数,那么就需要梯度下降算法,如下:

Repeat{θ0:=θ0α1mi=1m(hθ(x(i))y(i))x0(i)θj:=θjα[1mi=1m(hθ(x(i))y(i))xj(i)+λmθj](j=1 to n)}\text{Repeat} \{ \\ \quad\theta_{0}:=\theta_{0}-\alpha \frac{1}{m}\sum^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})x^{(i)}_0 \\ \quad\theta_{j}:=\theta_{j}-\alpha \left[ \frac{1}{m}\sum^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})x^{(i)}_j+\frac{\lambda}{m}\theta_j \right]\quad (j=1 \text{ to } n)\\\}

上面算法的第二个式子整理一下变成:

θj:=θj(1αλm)α1mi=1m(hθ(x(i))y(i))xj(i)\theta_{j}:=\theta_{j}(1-\alpha\frac{\lambda}{m})-\alpha \frac{1}{m}\sum^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})x^{(i)}_j

对于上式,1αλm1-\alpha\frac{\lambda}{m} 是一个比 11 略小的数,α1mi=1m(hθ(x(i))y(i))xj(i)\alpha \frac{1}{m}\sum^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})x^{(i)}_j 则与没有加入正则项之前的导数项一致。

这个式子所表达的意思是,先让 θj\theta_j 乘以一个比 1 小的数,也就是先缩小一些,然后再减去与之前(没有加入正则项之前)相同的导数项。

除了使用梯度下降法之外,还可以使用 normal equation,加入正则项后的 normal equation 如下:

#TODO

Regularized logistic regression

使用 logistic 回归来分类样本,如果发生过拟合(如下图)该如何解决?

吴恩达机器学习课程 | 03 过拟合

将 logistic 回归原来的 cost function 改为:

J(θ)=[1mi=1my(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]+12mλj=1nθj2J(\theta)=-\left[\frac{1}{m}\sum_{i=1}^m y^{(i)}\log h_\theta(x^{(i)})+(1-y^{(i)})\log (1-h_\theta(x^{(i)}))\right]+\frac{1}{2m}\lambda\sum_{j=1}^n\theta_j^2

对应的梯度下降算法为:

Repeat{θ0:=θ0α1mi=1m(hθ(x(i))y(i))x0(i)θj:=θjα[1mi=1m(hθ(x(i))y(i))xj(i)+λmθj](j=1 to n)}\text{Repeat} \{ \\ \quad\theta_{0}:=\theta_{0}-\alpha \frac{1}{m}\sum^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})x^{(i)}_0 \\ \quad\theta_{j}:=\theta_{j}-\alpha \left[ \frac{1}{m}\sum^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})x^{(i)}_j+\frac{\lambda}{m}\theta_j \right]\quad (j=1 \text{ to } n)\\\}

其中假设函数为:hθ(x)=11+eθTXh_\theta(x)=\frac{1}{1+e^{-\theta^TX}}