深度学习中的正则化策略总结

文章目录

  • 1. 正则化的概念
    • 1.1 过拟合
  • 2. 参数范数惩罚
    • 2.1 L1和L2概述
    • 2.2 L1正则化
      • 2.2.1 L1正则化与稀疏性
    • 2.3 L2正则化
  • 3. Dropout Regularization(随机失活)
  • 3.1 理解dropout
    • 3.2 dropout 如何工作
    • 3.3 dropout为何有效
    • 3.4 使用技巧
    • 3.5 dropout缺点
    • 3.6 当前Dropout的使用情况
  • 4. Early stopping
    • 4.1 目的
    • 4.2 原理
    • 4.3 直观理解
    • 4.4 为什么可以减小过拟合
    • 4.5 Early Stopping的缺点
    • 4.6 个人喜好
  • 5. 写在最后
  • 参考文献

1. 正则化的概念

1.1 过拟合

  • 在机器学习中,我们经常会遇到模型过拟合问题。过拟合通俗来讲就是训练误差很小,但测试误差很大,模型的泛化能力不强。
  • 为了解决过拟合问题,有以下几种解决方案:
    (1)增大训练样本,减少特征数量
    (2)简化模型
    (3)交叉验证
    (4)正则化
  • 方案中前三个考虑的并不是算法问题,是从统计学角度分析问题,而正则化是从模型的本质出发,所以这里我们重点讨论正则化方法。

2. 参数范数惩罚

2.1 L1和L2概述

  • L1正则化和L2正则化可以看做是损失函数的惩罚项。所谓惩罚是指对损失函数中的某些参数做一些限制(稍后详细解释)。对于线性回归模型,使用L1正则化的模型叫做Lasso回归,使用L2正则化的模型叫做Ridge回归(岭回归)
  • 线性回归L1正则化损失函数(Lasso):

min ⁡ w [ ∑ i = 1 N ( w T x i − y i ) 2 + λ ∣ ∣ w ∣ ∣ 1 ] . . . . . . . . . . ( 1 ) {\min _w}\left[ {\sum\limits_{i = 1}^N {{{({w^T}{x_i} - {y_i})}^2} + \lambda ||w|{|_1}} } \right]..........(1) wmin[i=1N(wTxiyi)2+λw1]..........(1)

  • 线性回归L2正则化损失函数(Ridge):

min ⁡ w [ ∑ i = 1 N ( w T x i − y i ) 2 + λ ∣ ∣ w ∣ ∣ 2 2 ] . . . . . . . . . . ( 2 ) {\min _w}\left[ {\sum\limits_{i = 1}^N {{{({w^T}{x_i} - {y_i})}^2} + \lambda ||w||_2^2} } \right]..........(2) wmin[i=1N(wTxiyi)2+λw22]..........(2)

  • L1和L2的作用:
    (1)L1正则化可以使得参数稀疏化,即得到的参数是一个稀疏矩阵,但不建议用来特征选择(会损失数据的信息,吴恩达建议)。
    (2)L2正则化和L1正则化都可以防止过拟合,接下来慢慢介绍。

2.2 L1正则化

2.2.1 L1正则化与稀疏性

(1)事实上,”带正则项”和“带约束条件”是等价的,下面来说明一下。

  • 为了约束w的可能取值空间从而防止过拟合,我们为该最优化问题加上一个约束,就是w的L1范数不能大于C(C为实质就是正则化系数,λ的倒数,C越小,正则化强度越大)

min ⁡ w ∑ i = 1 N ( w T x i − y i ) 2 {\min _w}\sum\nolimits_{i = 1}^N {{{({w^T}{x_i} - {y_i})}^2}} wmini=1N(wTxiyi)2

s . t . ∣ ∣ w ∣ ∣ 1 ⩽ C s.t.||w|{|_1} \leqslant C s.t.w1C

  • 问题转化成了带约束条件的凸优化问题,写出拉格朗日函数:

∑ i = 1 N ( w T x i − y i ) 2 + λ ( ∣ ∣ w ∣ ∣ 1 − C ) . . . . . . . . . . . ( 3 ) \sum\nolimits_{i = 1}^N {{{({w^T}{x_i} - {y_i})}^2}} + \lambda (||w|{|_1} - C){ ...........(3)} i=1N(wTxiyi)2+λ(w1C)...........(3)

  • 设W∗和λ∗是原问题的最优解,则根据KKT条件得(λ为拉格朗日乘子):

0 = ∇ w [ ∑ i = 1 N ( w T x i − y i ) 2 + λ ( ∣ ∣ w ∣ ∣ 1 − C ) ] 0 = {\nabla _w}\left[ {\sum\nolimits_{i = 1}^N {{{({w^T}{x_i} - {y_i})}^2}} + \lambda (||w|{|_1} - C)} \right] 0=w[i=1N(wTxiyi)2+λ(w1C)]

0 = λ ( ∣ ∣ w ∣ ∣ 1 − C ) 0 = \lambda (||w|{|_1} - C) 0=λ(w1C)

0 ⩽ λ ∗ 0 \leqslant {\lambda _*} 0λ
一般情况下,λ>0,所以||w||1=C,所以C时正则化系数。故”带正则项”和“带约束条件”是等价的。
(2)现在我们来建立一个模型:

  • 假设L1正则化得损失函数为如下,其中J0为损失函数。可以看到J函数含有绝对值,是不完全可微的,所以就需要通过某种方法来优化。

J = J 0 + λ ∑ w ∣ w ∣ J = {J_0} + \lambda \sum\nolimits_w {|w|} J=J0+λww

  • 当我们在原始损失函数J0后添加L1正则化项时,相当于对J0做了一个约束,我们令:

L = λ ∑ w ∣ w ∣ L = \lambda \sum\nolimits_w {|w|} L=λww

  • 此时我们的任务变成在L约束下求出J0取最小值的解.
    J = J 0 + L J = {J_0} + L J=J0+L

  • 考虑二维情况下,即L=|w1|+|w2|,对于梯度下降法,求解J0的过程可以画出等值线,同时L1正则化的函数L也可以在w1、w2的二维平面上画出来。如下图:
    深度学习中的正则化策略总结_第1张图片

  • 上图中等值线是J0的等值线,黑色方形是L函数的图形。在图中,当J0等值线与L图形首次相交的地方就是最优解。L中的λ控制着黑色菱形的大小,参数解的空间就在菱形的边上。

  • 为了更加清晰的认识到为什么会产生稀疏解,我们再来一个图分析一下:
    深度学习中的正则化策略总结_第2张图片
    深度学习中的正则化策略总结_第3张图片

  • 可以看到梯度每下降一次,w就会沿着切线方向移动(而且是w2方向),当移动到(0,w2*)时,w的切线方向,与梯度方向垂直,不在移动,从而产生了一个稀疏的解,拓展到高维w空间,则会产生很多0解,稀疏就是这么来的。

2.3 L2正则化

  • 经过深入理解L1正则化,那么L2正则化与L1很相似,只是正则化p范数变成了2,我们直接上图分析:
    深度学习中的正则化策略总结_第4张图片- 与L1相比,L2会产生值较小的解,但解不会为0。为了和L1对应,这里再把产生较小解的原因给出一张图:
    深度学习中的正则化策略总结_第5张图片
  • 这里的解释和L1是一样的,w总是沿着切线的方向移动。
  • 另外要注意一点,正则化参数一定要选择合适,使得w的空间范围尽量接近代价函数的最小值。(参考值λ=0.02,0.03,0.09)
    ==============================================================================
    为什么L2正则化会防止过拟合呢,或者说,为什么解的值较小的时候会防止过拟合呢?
  • 拟合过程中通常都倾向于让权值尽可能小,最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。可以设想一下对于一个线性回归方程,若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什么影响,专业一点的说法是抗扰动能力强(鲁棒性)。

3. Dropout Regularization(随机失活)

3.1 理解dropout

  • 用于解决过拟合问题
  • Dropout存在两个版本:直接(不常用)和反转。(这里只对Inverted Dropout进行说明)
  • dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃(注意是暂时),如下图所示(图片来自Srivastava的dropout论文):
    深度学习中的正则化策略总结_第6张图片

3.2 dropout 如何工作

  • 对于每一隐藏层:以一定概率(1-keep_prob)随机删除该层的一些隐藏神经元,保持输入输出神经元不变
  • 将输入通过修改后的网络进行前向传播,然后将误差通过修改后的网络进行反向传播
  • 对于另外一批的训练样本,重复上述操作
  • 特别注意:只有在训练网络的时候使用dropout,在测试集上(预测的时候)不要使用dropout,也就意味着我们在预测(分类)的时候,用训练好的参数做前向传播的时候,要把dropout关掉!
  • 参考代码:
d = np.random.rand(3, 2) < keep_drop
a = np.multiply(a, d)
a /= keep_drop //对激活值进行缩放,保持期望不变,这就是inverted_dropout
  • 下面看两个生动的栗子:
    深度学习中的正则化策略总结_第7张图片
    深度学习中的正则化策略总结_第8张图片

3.3 dropout为何有效

  • 由于每次用输入网络的样本进行权值更新时,隐含节点都是以一定概率随机出现,因此不能保证每2个隐含节点每次都同时出现,这样权值的更新不再依赖于有固定关系隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况,减少神经元之间复杂的共适应性。
  • 由于每一次都会随机地删除节点,下一个节点的输出不再那么依靠上一个节点,也就是说它在分配权重时,不会给上一层的某一结点非配过多的权重,起到了和L2正则化压缩权重差不多的作用。
  • 可以将dropout看作是模型平均的一种,平均一个大量不同的网络。不同的网络在不同的情况下过拟合,虽然不同的网络可能会产生不同程度的过拟合,但是将其公用一个损失函数,相当于对其同时进行了优化,取了平均,因此可以较为有效地防止过拟合的发生。对于每次输入到网络中的样本(可能是一个样本,也可能是一个batch的样本),其对应的网络结构都是不同的,但所有的这些不同的网络结构又同时共享隐含节点的权值,这种平均的架构被发现通常是十分有用的来减少过拟合方法
  • 也可以简单理解就是大大简化了网络。

3.4 使用技巧

  • 在可能出现过拟合的网络层使用dropout
  • dropout也可以被用作一种添加噪声的方法,直接对input进行操作。输入层设为更接近1的数,使得输入变化不会太大

3.5 dropout缺点

  • 明确定义的损失函数每一次迭代都会下降,而dropout每一次都会随机删除节点,也就是说每一次训练的网络都是不同的,损失函数不再被明确地定义,在某种程度上很难计算,我们失去了调试工具

3.6 当前Dropout的使用情况

当前Dropout被大量利用于全连接网络,不适合卷积。而且一般人为设置为0.5或者0.3,而在卷积隐藏层由于卷积自身的稀疏化以及稀疏化的ReLu函数的大量使用等原因,Dropout策略在卷积隐藏层中使用较少。
总体而言,Dropout是一个超参,需要根据具体的网路,具体的应用领域进行尝试。

4. Early stopping

4.1 目的

  • 为了获得性能良好的神经网络,网络定型过程中需要进行许多关于所用设置(超参数)的决策。超参数之一是定型周期(epoch)的数量:亦即应当完整遍历数据集多少次(一次为一个epoch)?如果epoch数量太少,网络有可能发生欠拟合(即对于定型数据的学习不够充分);如果epoch数量太多,则有可能发生过拟合(即网络对定型数据中的“噪声”而非信号拟合)。

  • 早停法旨在解决epoch数量需要手动设置的问题。它也可以被视为一种能够避免网络发生过拟合的正则化方法(与L1/L2权重衰减和丢弃法类似)。

  • 根本原因就是因为继续训练会导致测试集上的准确率下降。
    那继续训练导致测试准确率下降的原因猜测可能是1. 过拟合 2. 学习率过大导致不收敛。

4.2 原理

  • 将数据分为训练集和验证集
  • 每个epoch结束后(或每N个epoch后): 在验证集上获取测试结果,随着epoch的增加,如果在验证集上发现测试误差上升,则停止训练;
  • 将停止之后的权重作为网络的最终参数
  • 这种做法很符合直观感受,因为精度都不再提高了,在继续训练也是无益的,只会提高训练的时间。那么该做法的一个重点便是怎样才认为验证集精度不再提高了呢?并不是说验证集精度一降下来便认为不再提高了,因为可能经过这个Epoch后,精度降低了,但是随后的Epoch又让精度又上去了,所以不能根据一两次的连续降低就判断不再提高。一般的做法是,在训练的过程中,记录到目前为止最好的验证集精度,当连续10次Epoch(或者更多次)没达到最佳精度时,则可以认为精度不再提高了。

4.3 直观理解

  • 最优模型是在垂直虚线的时间点保存下来的模型,即处理测试集时准确率最高的模型。
    深度学习中的正则化策略总结_第9张图片

4.4 为什么可以减小过拟合

  • 当还未在神经网络运行太多迭代过程的时候,w参数接近于0,因为随机初始化w值的时候,它的值是较小的随机值。当你开始迭代过程,w的值会变得越来越大。到后面时,w的值已经变得十分大了。所以early stopping要做的就是在中间点停止迭代过程。我们将会得到一个中等大小的w参数,会得到与L2正则化相似的结果,选择了w参数较小的神经网络。
    深度学习中的正则化策略总结_第10张图片

4.5 Early Stopping的缺点

  • 没有采取不同的方式来解决优化损失函数和降低方差这两个问题,而是用一种方法同时解决两个问题 ,结果就是要考虑的东西变得更复杂。之所以不能独立地处理,因为如果你停止了优化代价函数,你可能会发现代价函数的值不够小,同时你又不希望过拟和。
    深度学习中的正则化策略总结_第11张图片

4.6 个人喜好

  • 如果不用early stopping降低过拟合,另一种方法就是L2正则化,但需尝试L2正则化超级参数λ的很多值,个人更倾向于使用L2正则化,尝试许多不同的λ值。

5. 写在最后

上面分析的是从模型的复杂度来考虑如何减小过拟合的,如果从数据的角度,当然我们选择数据增强来使模型更好。数据增加数据集并不一定代表我们的模型会变好,在欠拟合的情况下,模型不会有很好的提升。

参考文献

参考文献1
参考文献2
参考文献3
参考文献4
Dropout: A Simple Way to Prevent Neural Networks from Overfitting
参考文献6
参考文献7

你可能感兴趣的:(优化算法)