理解深度学习中的正则化

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39845112/article/details/80114918

写在前面:这篇文章虽然公式有点多,但很好懂的。
仔细看一定会有很大收获。
 
 
本文介绍了对深度学习中正则化的理解,分为以下几部分:

  1. 什么是正则化?
  2. 为什么要正则化?
  3. 怎样理解正则化?
  4. 举例
     

首先从“什么是正则化”开始。

正则化方法很早之前就已经出现了,在机器学习方法中应用广泛,比如支持向量机(这个不知道也没关系)。它的形式很简单,是在目标函数后额外附加一项,使其影响目标函数最优点的选取。这种方法叫做正则化方法。(1.1)式是常见的L2正则化,等式右侧第一项为原目标函数,第二项为正则化项,构成等式左侧新的目标函数。

(1.1)J^(ω;X,y)=J(ω;X,y)+α2ωTω

 


接着,为什么要正则化?
正则化可以解决过拟合问题。
从贝叶斯论者的角度来说,我们知道,深度学习使用神经网络将样本空间映射到特征的概率分布空间。当映射函数可能存在的空间太大时,我们通过学习方法得到的映射函数可能并不满足现实世界的一些规则,所以在泛化,即推广到未训练过的现实世界真实存在的数据集(验证集)时,得到的结果会变差,这叫做“Variance”大,说明模型过拟合了。
我们可以使用最大后验点估计(Maximum A Posteriori),来解决这个问题,如式(2.1)所示。式中arg max表示令 p(θ | x) 最大的 θ 值,式中等式右侧的 log p(θ) 即是正则化项。如果 θ 服从高斯分布,那么式(2.1)是常见的L2正则化,见式(1.1)。这是我们从最大后验点估计这个贝叶斯论者的角度来看为什么要正则化。

(2.1)θMAP=argmaxθp(θ | x)=argmaxθlog p(x | θ)+log p(θ)

从频率论者的角度来说,我们希望权重 θ 的偏差(期望和真值的差,无偏估计时值为0)和标准差都很小。我们通过深度学习算法拟合映射函数,使训练集上的损失最小,此时组成映射函数的权重偏差最小。同时我们希望在验证集上的损失也能和训练集上的损失一样小,这样权重偏差也一样小。如果训练集上的权重偏差小,但验证集上的权重偏差大,此时权重的标准差大(这是概率统计知识,理解一下)。这是由于模型过拟合,使映射函数过度满足训练集样本的特征,即不仅满足正确的特征,又满足了一些额外的噪声特征,最终造成泛化误差大。
怎么解决这个问题呢?我们知道偏差和标准差是一对互相矛盾的变量,并不同时达到最小值;因此在训练集上学习时,如果偏差最小,那标准差往往没有达到最小。我们可以在偏差上做一些让步,使标准差变小,从而减小泛化误差。这可以通过正则化实现。
为了说明偏差和标准差是一对互相矛盾的变量,我们下面做简单的分析。假设 B(θ) 是偏差关于权重的函数, V(θ) 是标准差关于权重的函数。当 B(θ) 最小时,V(θ)=V1;当V(θ) 最小时,B(θ)=B1。使用 Lagrange 乘子法,将约束和极值写在一起,如下

(2.2)min {B(θ)+λ1[V(θ)V1]} min {V(θ)+λ2[B(θ)B1]}

整理后得到

(2.3)min [B(θ)+λ1V(θ)]min [B(θ)+1λ2V(θ)]

可见要使偏差和标准差同时达到最小,必须满足

(2.4)λ1λ2=1

这是一个强条件,很难满足,所以偏差和标准差很难同时达到最小,要想减小标准差,往往要付出增加偏差的代价。
我们可以使用正则化,使训练集在一定限制下偏差最小(并不是之前的无限制最小偏差),从而以偏差增加的代价实现标准差减小。这是从频率论者的角度来看为什么要正则化。
正则化除了解决上述过拟合问题外,还具有限制权重幅值的作用,使权重幅值不过大。可以从这方面理解一下“正则化”名字的由来。
 


最后,怎样理解正则化?
在这里,我们从频率论者的角度,仔细分析正则化中的附加项怎样能够通过限制偏差,减小标准差的。了解了这个过程,就能明白正则化是怎样工作的。
工欲善其事,必先利其器。我们在这里首先简单介绍一下用到的工具——KKT方法。KKT方法是对Lagrange乘子法的推广,在支持向量机中被用来减小计算中的数据向量维数,与核函数有关(这个不知道也没有关系)。
假设有一函数,欲求其最小值,

(3.1)min f(θ)

约束为

(3.2){hi(θ)0  0imgj(θ)=0  0jn

 hi(θ)  gj(θ) 写成向量的形式, h(θ)  g(θ) ,类比Lagrange乘子法,构造函数

(3.3)F(θ,α,β)=f(θ)+αh(θ)+βg(θ)

 Fθ=0 的解 θ(α,β)  代入式(3.3),得到  F~(α,β) ,在一定约束下求其最大值,如式(3.4)所示,

(3.4){max F~(α,β)αi0  0im

在这里有一个神奇但又合理的结论,就是经变换后的式(3.4)与原问题式(3.1)(3.2)的解相同,他们是“dual problem”。这个结论如果难以相信,可以结合Lagrange乘子法理解一下,或者自己演算推导一下。
同时,在 F~(α,β) 最大值处,满足推论

(3.5)αh(θ)=0

这个推论的意思是说,在最大值处, αi  hi(θ) 至少有一个值为0,如果 αi 的值不为0,那么 hi(θ) 的值一定为0。这个推论也需要理解一下。
以上是KKT方法的简单介绍。KKT方法及推论并不难,是Lagrange乘子法的推广,可以用类似Lagrange的方法理解。
说了这么多,KKT方法和正则化有什么关系?
我们知道,深度学习中的正则化有如下形式

(3.6)L~(θ,α)=L(θ)+αΩ(θ)

其中, L(θ) 是损失函数, Ω(θ) 是正则化项, α 是超参数, L~(θ,α) 是正则化后的损失函数。正则化前,通过计算损失函数梯度,更新权重 θ 以得到训练集最小损失;正则化后,通过计算式(3.6)左侧的损失函数梯度,更新权重 θ 以得到训练集在约束下的最小损失。
我们来看这个过程中 Ω(θ) 是怎样工作的。
类似式(3.3),令 L~(θ,α)θ=0 ,得到 θ(α) ,代入式(3.6)写成如下式(3.7)

(3.7){max L~(θ(α),α)α0 

根据KKT方法,式(3.7)的解与下式(3.8)的解相同,

(3.8){min L(θ)Ω(θ)0 

可以看出正则化项 Ω(θ) 是原损失函数的一个约束。但是,这还不够。接下来我们将进一步看清楚 α 的作用。
在深度学习过程中,超参数 α 通常是大于0的给定值(如果等于0相当于没有正则化)。
在给定值下, α 必须满足式(3.7)中的最大值条件,才能与式(3.8)等价。即

(3.9) L~(θ(α),α)α=0

上式是KKT方法的要求。然而,实际上,对于给定值,当 α>0 时,有

(3.10) L~(θ(α),α)α=Ω(θ(α))

(上式可能有点难,可以自己推导一下)
为了使式(3.10)满足式(3.9)的条件,从而满足KKT方法最大值条件的要求,我们做一个简单的变换。因为 α 是定值,所以 Ω(θ(α)) 也是定值,令

(3.11)Ω~(θ)=Ω(θ)Ω(θ(α))

易知,使用了正则化项 Ω~(θ) 的式(3.7)和(3.8)等价(将原来的 Ω 换成 Ω~ )。翻译成文字就是,正则化项使原目标函数在一定限制下取最小值,这个限制是由超参数 α 和正则化项共同确定的。在限制下的最小值处,根据推论式(3.5),最佳权重一定在限制的边界。在深度学习的实际计算中,由于 Ω~(θ)  Ω(θ) 只差一个常数,并不影响求损失函数最小值,所以不必求出这个常数也可以得到权重。这个变换是用来理解正则化的,不管有没有这一常数项,最终的取值都不变。
如果是L2正则化,易理解这个限制 Ω~(θ) 就是把权重 θ 的L2范数限制在由 α 确定的幅值里。如果权重是三维的,那么这个限制范围是一个球。在原损失函数加限制后的最小值处,根据推论式(3.5),最佳权重的幅值一定在球上。 α 在一定范围内变化时,球的幅值也跟着变化,因此可以选取合适的偏差代价,减小标准差,最终减小泛化误差。
由于我们讨论的是抽象的约束 Ω(θ) ,所以其他任何有关权重 θ 约束也适用的。

 


例:
为了便于理解,我们继续拿L2正则化举例子。
式(1.1)是L2正则化。现在有一函数,在无正则化时的损失最小值点在点A,图中蓝绿红三色是其损失函数的等值线。假设模型过拟合了,也就是说 θ 在训练集上与真实值的偏差小,但在验证集上与真实值的偏差大, θ 的标准差大。根据前边的分析,我们试图对函数正则化,通过增大损失,改变权重 θ 值,进而增大 θ 的偏差,达到减小标准差,减小泛化误差的目的。

L2正则化示意图

在训练模型时,我们往往选定式(1.1)中的 α 值。根据“怎样理解正则化”中的分析,我们知道肯定存在一个常数k,使得

(4.1)min J(ω;X,y)+α2(ωTωk2)

(4.2){min J(ω;X,y)ωTωk20

等价。
根据推论式(3.5),式(4.2)的原损失函数在约束下的最小值(也是新损失函数的最小值)在半径为k的圆上,是交点B。
我们进一步理解这个结果。老生常谈,我们是通过增大损失来增大 θ 的偏差的,上述关系依赖于损失最小的地方的 θ 与真实值的偏差最小。但是注意,同样的偏差,可能对应着不同大小的损失,也就是说我们有可能选择到尽可能小的损失增量,达到泛化误差小的偏差。以L2正则化为例,我们看到图中原来的损失函数在二维 θ 的截面上是椭圆,所以过A点在 θ1 的方向上的梯度小,过A点在 θ2 方向的梯度大。也就是说,从A点,同样的 θ 变化,对应着两个方向上不同的损失增加量, θ1 的方向上损失增加量小, θ2 的方向上损失增加量大。可以看出,在这张图中,L2正则化使原来的权重在 θ1 的方向减小的多,在 θ2 的方向上减小的少,使得损失函数增大得不多,是很合理的。
 


总结:我们通过KKT方法对正则化后的损失函数进行变换,深入分析了正则化项的作用。在以上分析中,正则化项只有一项。推广到两个和多个正则化项的情况,也可以通过KKT方法变换分析,过程与前述正文相同,你可以随心所欲用正则化方法施展神通。阅读以上四部分,相信你一定能理解深度学习中正则化是怎样工作的。

 
仓促写就,不足之处请指正。欢迎讨论。
 
 
参考书籍:
《深度学习》, Ian Goodfellow等, 人民邮电出版社;
《Numerical Recipes in C++》, William H.Press等, Cambridge University Press;

 
 


版权所有,转载请注明出处

展开阅读全文

没有更多推荐了,返回首页