机器学习-过拟合的诊断与预防

  • 2018-12-02
  • 352
  • 1

我下面的总结是根据吴恩达视频针对线性回归的过拟合问题,神经网络部分还未学。关于更全面的见其他大神所写的:机器学习中防止过拟合的处理方法 – 一只鸟的天空


1. 过拟合的诊断

吴恩达视频第10章《Advice for applying machine learning》,讲述的是关于模型的诊断,里面详细讲述了过拟合以及此情况下的误差曲线,见下图figure 1,此图来自于《10-4 Diagnosing Bias VS. Variance》
1541381433535
figure 1

过拟合外在表现就是,训练的模型在训练集上表现良好,但是在测试集上误差非常大。

通常原因有:

  • 数据集太小;
  • 特征量过多;
  • 模型复杂度过高(比如多项式次数过高)。

2. 防止过拟合的处理方法

2.1 Early stopping

Early stopping是一种通过截断迭代次数来防止过拟合的方法,即在模型对训练数据集迭代收敛之前停止迭代来防止过拟合。
Early stopping方法的具体做法是,在每一个 Epoch 结束时(一个Epoch集为对所有的训练数据的一轮遍历)计算 validation set 的 accuracy (后面的accurary 都是指validation set 的 accuracy),当 accuracy 不再提高时,就停止训练。这种做法很符合直观感受,因为 accurary 都不再提高了,在继续训练也是无益的,只会提高训练的时间。那么该做法的一个重点便是怎样才认为 accurary 不再提高了呢?并不是说 accuracy一降下来便认为不再提高了,因为可能经过这个Epoch后,accuracy降低了,但是随后的Epoch又让 accuracy 又上去了,所以不能根据一两次的连续降低就判断不再提高。一般的做法是,在训练的过程中,记录到目前为止最好的 accuracy,当连续10次Epoch(或者更多次)没达到那个最高 accuracy 时,则可以认为 accuracy 不再提高了。此时便可以停止迭代了(Early Stopping)。这种策略也称为“No-improvement-in-n”,n即Epoch的次数,可以根据实际情况取,如10、20、30……

2.2 数据集扩增

数据集太小也是导致过拟合的一个原因。吴恩达机器学习 10-6 Learning Curves在此视频中可以看到样本数量和 training error 与 validation error 的关系图。

数据集扩增,就是获取更多的符合要求的数据一般有以下方法:

  • 从数据源头采集更多数据
  • 复制原有数据并加上随机噪声
  • 重采样
  • 根据当前数据集估计数据分布参数,使用该分布产生更多数据等

在分类问题中需要制作数据集的 label 所以更加耗费人力,此时多采用方法二,即复制原数据并加上随机噪声。

2.3 正则化方法

正则化方法是指在进行目标函数或代价函数优化时,在目标函数或代价函数后面加上一个正则项,使模型复杂度降低,一般有 L1 正则与 L2 正则。

2.3.1 L1正则

L1正则是基于L1范数,即在目标函数后面加上参数的L1范数和项,即参数绝对值和与参数的积项: C = C_0 + \frac{\lambda}{m}\sum_{w}\vert w\vert,其中 C 为正则化后的损失函数,C_0为原损失函数,\lambda为正则化系数,m为样本数量。

在 L1 线性回归(又称Lasso回归)中,代价函数为:

J(\theta) = \frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)} – y^{(i)})^2 + \frac{\lambda}{m}\sum_{j=1}^n\vert\theta_j\vert

上面式子中 j \neq 0,不对偏置做正则化。使用梯度下降法更新:

\begin{aligned} \theta_0 &= \theta_0 – \alpha\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)} – y^{(i)})^2 x_0^{(i)}\\ \theta_j &= \theta_j – \alpha[\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)} – y^{(i)})^2 x_j^{(i)} + \frac{\lambda}{m}sgn(\theta_j)], j=1,2,…,n \end{aligned}

其中,\alpha > 0, \lambda > 0sgn 是符号函数,即 sgn(z)\vert_{z>0}=1, sgn(z)\vert_{z<0}=-1,上面第二式化简后有:

\begin{aligned} \theta_j &= (\theta_j – \alpha\frac{\lambda}{m}) – \alpha\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)} – y^{(i)})^2 x_j^{(i)}, \theta_j > 0\\ \theta_j &= (\theta_j + \alpha\frac{\lambda}{m}) – \alpha\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)} – y^{(i)})^2 x_j^{(i)}, \theta_j < 0 \end{aligned}

显然 \alpha \frac{\lambda}{m} > 0 ,当 \theta_j > 0 时,减掉一个正数,当 \theta < 0 时,加上一个正数。即L1正则项是为了使得那些原先处于零(即 \vert\theta_j\vert \approx0)附近的参数 \theta_j 往零移动,使得部分参数为零,从而降低模型的复杂度(模型的复杂度由参数决定),从而防止过拟合,提高模型的泛化能力。
其中,L1 正则中有个问题,便是 L1 范数在 0 处不可导,即 \vert\theta_j\vert 在 0 处不可导,因此在 \theta_j 为0时,使用原来的未经正则化的更新方程来对 \theta_j 进行更新,即令 sgn(0)=0,这样即:
sgn(\theta_j)\vert_{\theta_j>0}=1, sgn(\theta_j)\vert_{\theta_j<0}=-1, sgn(\theta_j)\vert_{\theta_j=0}=0

2.3.2 L2正则

视频资料地址:吴恩达机器学习 7-3 Regularized linear regression

L2正则是基于L2范数,即在目标函数后面加上参数的L2范数和项,即参数的平方和与参数的积项,即:C = C_0 + \frac{\lambda}{2n}\sum_{w}w^{2} ,其中 C 为正则化后的损失函数,C_0为原损失函数,\lambda为正则化系数,m为样本数量。 \frac{1}{2}是为了求导后公式美观。

在 L2 线性回归(又称Ridge回归)中,代价函数为:

J(\theta) = \frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)} – y^{(i)})^2 + \frac{\lambda}{2m}\sum_{i=1}^n \theta^2

上面式子中 j \neq 0,不对偏置做正则化。使用梯度下降法更新:

\begin{aligned} \theta_0 &= \theta_0 – \alpha\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)} – y^{(i)})^2 x_0^{(i)}\\ \theta_j &= \theta_j – \alpha[\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)} – y^{(i)})^2 x_j^{(i)} + \frac{\lambda}{m}\theta_j], j \neq 0 \end{aligned}

其中,\alpha > 0, \lambda > 0,上面第二式化简后有:

\theta_j = \theta_j(1 – \alpha\frac{\lambda}{m}) – \alpha\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)} – y^{(i)})^2 x_j^{(i)}, j \neq 0

显然 \alpha\frac{\lambda}{m} > 01- \alpha\frac{\lambda}{m} < 1,在每次更新时额外地减小权值,更小的权值意味着模型复杂度更低。这样减小各个权值,也就降低了模型复杂度,也就能防止过拟合。

4. Dropout

在神经网络中,防止过拟合常用Dropout,该方法是通过修改神经网络本身结构(临时随机删减 隐含层神经元)来实现。例如对于如下所示(figure 2)的三层人工神经网络:

1541383525504

figure 2

对于上图所示的网络,在训练开始时,随机得删除一些(可以设定为一半,也可以为1/3,1/4等)隐藏层神经元,即认为这些神经元不存在,同时保持输入层与输出层神经元的个数不变,这样便得到如下的神经网络(figure 3):

1541383564038

figure 3

然后按照 BP 学习算法对网络中的参数进行学习更新(虚线连接的单元不更新,因为认为这些神经元被临时删除了)。这样一次迭代更新便完成了。下一次迭代中,同样随机删除一些神经元,与上次不一样,做随机选择。重复过程直到训练结束。


版权声明: 本网站所有资源采用BY-NC-SA 4.0协议进行授权,转载应当以相同方式注明文章来自:机器学习-过拟合的诊断与预防 - 一方的天地

评论

  • root回复

    使用 KaTex 解析 LaTex 的话,多行代码一定要使用 \begin{} \end{}且不能使用 align,应该使用 aligned。这个问题浪费了我一个多小时。

发表评论

陕ICP备18010914号
知识共享许可协议
本作品由一方天地采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资源请尽快联系站长,本站会在24h内删除有争议的资源。 -