文章目录
- 1. 正则化的概念
- 2. 参数范数惩罚
- 2.1 L1和L2概述
- 2.2 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=1∑N(wTxi−yi)2+λ∣∣w∣∣1]..........(1)
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=1∑N(wTxi−yi)2+λ∣∣w∣∣22]..........(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}} wmin∑i=1N(wTxi−yi)2
s . t . ∣ ∣ w ∣ ∣ 1 ⩽ C s.t.||w|{|_1} \leqslant C s.t.∣∣w∣∣1⩽C
- 问题转化成了带约束条件的凸优化问题,写出拉格朗日函数:
∑ 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(wTxi−yi)2+λ(∣∣w∣∣1−C)...........(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(wTxi−yi)2+λ(∣∣w∣∣1−C)]
0 = λ ( ∣ ∣ w ∣ ∣ 1 − C ) 0 = \lambda (||w|{|_1} - C) 0=λ(∣∣w∣∣1−C)
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+λ∑w∣w∣
- 当我们在原始损失函数J0后添加L1正则化项时,相当于对J0做了一个约束,我们令:
L = λ ∑ w ∣ w ∣ L = \lambda \sum\nolimits_w {|w|} L=λ∑w∣w∣
-
此时我们的任务变成在L约束下求出J0取最小值的解.
J = J 0 + L J = {J_0} + L J=J0+L
-
考虑二维情况下,即L=|w1|+|w2|,对于梯度下降法,求解J0的过程可以画出等值线,同时L1正则化的函数L也可以在w1、w2的二维平面上画出来。如下图:
-
上图中等值线是J0的等值线,黑色方形是L函数的图形。在图中,当J0等值线与L图形首次相交的地方就是最优解。L中的λ控制着黑色菱形的大小,参数解的空间就在菱形的边上。
-
为了更加清晰的认识到为什么会产生稀疏解,我们再来一个图分析一下:
-
可以看到梯度每下降一次,w就会沿着切线方向移动(而且是w2方向),当移动到(0,w2*)时,w的切线方向,与梯度方向垂直,不在移动,从而产生了一个稀疏的解,拓展到高维w空间,则会产生很多0解,稀疏就是这么来的。
2.3 L2正则化
- 经过深入理解L1正则化,那么L2正则化与L1很相似,只是正则化p范数变成了2,我们直接上图分析:
- 与L1相比,L2会产生值较小的解,但解不会为0。为了和L1对应,这里再把产生较小解的原因给出一张图:
- 这里的解释和L1是一样的,w总是沿着切线的方向移动。
- 另外要注意一点,正则化参数一定要选择合适,使得w的空间范围尽量接近代价函数的最小值。(参考值λ=0.02,0.03,0.09)
==============================================================================
为什么L2正则化会防止过拟合呢,或者说,为什么解的值较小的时候会防止过拟合呢?
- 拟合过程中通常都倾向于让权值尽可能小,最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。可以设想一下对于一个线性回归方程,若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什么影响,专业一点的说法是抗扰动能力强(鲁棒性)。
3. Dropout Regularization(随机失活)
3.1 理解dropout
- 用于解决过拟合问题
- Dropout存在两个版本:直接(不常用)和反转。(这里只对Inverted Dropout进行说明)
- dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃(注意是暂时),如下图所示(图片来自Srivastava的dropout论文):
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
- 下面看两个生动的栗子:
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 直观理解
- 最优模型是在垂直虚线的时间点保存下来的模型,即处理测试集时准确率最高的模型。
4.4 为什么可以减小过拟合
- 当还未在神经网络运行太多迭代过程的时候,w参数接近于0,因为随机初始化w值的时候,它的值是较小的随机值。当你开始迭代过程,w的值会变得越来越大。到后面时,w的值已经变得十分大了。所以early stopping要做的就是在中间点停止迭代过程。我们将会得到一个中等大小的w参数,会得到与L2正则化相似的结果,选择了w参数较小的神经网络。
4.5 Early Stopping的缺点
- 没有采取不同的方式来解决优化损失函数和降低方差这两个问题,而是用一种方法同时解决两个问题 ,结果就是要考虑的东西变得更复杂。之所以不能独立地处理,因为如果你停止了优化代价函数,你可能会发现代价函数的值不够小,同时你又不希望过拟和。
4.6 个人喜好
- 如果不用early stopping降低过拟合,另一种方法就是L2正则化,但需尝试L2正则化超级参数λ的很多值,个人更倾向于使用L2正则化,尝试许多不同的λ值。
5. 写在最后
上面分析的是从模型的复杂度来考虑如何减小过拟合的,如果从数据的角度,当然我们选择数据增强来使模型更好。数据增加数据集并不一定代表我们的模型会变好,在欠拟合的情况下,模型不会有很好的提升。
参考文献
参考文献1
参考文献2
参考文献3
参考文献4
Dropout: A Simple Way to Prevent Neural Networks from Overfitting
参考文献6
参考文献7