深度学习中的正则化
为了能够减少测试误差,即增加泛化性能,正则化便诞生了。 --by 小坤兽
参数范数惩罚
正则化在深度学习出现之前就已经被使用了数十年,例如线性回归和逻辑回归中就可以使用简单直接的正则化策略。
通常可以在目标函数
J
J
J之上添加一个参数范数惩罚
Ω
(
θ
)
\Omega(\theta)
Ω(θ),限制模型的学习能力。最终的木匾函数记为
J
∼
(
θ
;
X
,
y
)
=
J
(
θ
;
X
,
y
)
+
α
Ω
(
θ
)
J^{\sim}(\theta;X, y) = J(\theta;X,y) + \alpha\Omega(\theta)
J∼(θ;X,y)=J(θ;X,y)+αΩ(θ)
其中
α
∈
[
0
,
inf
)
\alpha \in [0, \inf)
α∈[0,inf)是权衡惩罚项和标准目标函数相对贡献的超参数。
α
\alpha
α越大,正则项惩罚越大。
在神经网络中,我们有时希望网络的每一层使用单独的惩罚,并分配不同的
α
\alpha
α系数。这样寻找超参数的代价很大,因此为了减少搜索空间,我们会在所有层使用相同的权重衰减。
L 2 L^2 L2参数正则化
J
∼
(
θ
;
X
,
y
)
=
J
(
θ
;
X
,
y
)
+
α
2
ω
⊤
ω
J^{\sim}(\theta;X, y) = J(\theta;X,y) + \frac{\alpha}{2}\omega^\top\omega
J∼(θ;X,y)=J(θ;X,y)+2αω⊤ω
L
2
L^2
L2正则化通常被称为权重衰减、岭回归或Tikhonov正则。
这个正则策略通过向目标函数添加一个正则项
Ω
(
θ
)
=
1
2
∣
∣
ω
∣
∣
2
2
\Omega(\theta)=\frac12||\omega||^2_2
Ω(θ)=21∣∣ω∣∣22来使权重更加接近原点。
由梯度下降法可以得到,每一轮迭代的新的
ω
\omega
ω表达式为
ω
←
(
1
−
ϵ
α
)
ω
−
ϵ
∇
ω
J
(
ω
;
X
,
y
)
\omega\leftarrow(1-\epsilon\alpha)\omega-\epsilon\nabla_\omega J(\omega;X,y)
ω←(1−ϵα)ω−ϵ∇ωJ(ω;X,y)
也就是说,加入权重衰减之后会影响
ω
\omega
ω的学习规则的改变,每次迭代前会先收缩一侧权重向量。这是我们从单一步骤上看到的,那么整个学习过程中,会有什么样的影响呢?
如下图右侧所示(左侧为
L
1
L^1
L1参数正则化),设
ω
∗
\omega^*
ω∗是未加入正则项时的最优权重向量,即
ω
∗
=
arg
min
ω
J
(
ω
)
\omega^* = \arg\min_\omega J(\omega)
ω∗=argminωJ(ω),原点显然满足
ω
O
=
arg
min
ω
∣
1
2
ω
⊤
ω
∣
\omega_O = \arg\min_\omega |\frac12\omega^\top\omega|
ωO=argminω∣21ω⊤ω∣,故当我们加入正则项后选取的
ω
\omega
ω距离原点更近时表示算法受到正则项影响更大,相反则表示受到惩罚项的影响更大。
同时在图中可以看出,在椭圆被拉伸较长的方向上移动时,目标函数的值会变得飞快,而在其他方向上则比较小,这也是受到损失函数的二阶海森矩阵特征值的影响的直接结果。
L 1 L^1 L1参数正则化
J
∼
(
θ
;
X
,
y
)
=
J
(
θ
;
X
,
y
)
+
α
∣
∣
ω
∣
∣
1
J^{\sim}(\theta;X, y) = J(\theta;X,y) +\alpha||\omega||_1
J∼(θ;X,y)=J(θ;X,y)+α∣∣ω∣∣1
由于无法直接求梯度,将损失函数求次梯度可得
∇
ω
J
∼
(
ω
;
X
,
y
)
=
α
s
i
g
n
(
ω
)
+
∇
ω
J
(
ω
;
X
,
y
)
\nabla_\omega J^\sim(\omega;X,y) = \alpha sign(\omega) + \nabla_\omega J(\omega;X,y)
∇ωJ∼(ω;X,y)=αsign(ω)+∇ωJ(ω;X,y)
其中,
s
i
g
n
(
x
)
sign(x)
sign(x)表示取x的正负号。
显然,
L
1
L^1
L1的正则化效果与
L
2
L^2
L2的效果大不一样,经过更复杂的推导可以得到结论:
L
1
L^1
L1正则化会产生更稀疏的解,即更多的维数上为零;而
L
2
L^2
L2正则化不会使参数变得稀疏。
将
L
1
L^1
L1参数正则化与最小二乘的线性回归模型结合,即是著名的LASSO模型,模型如上图中的左侧所示。
作为约束的范数惩罚
对于函数
J
∼
(
θ
;
X
,
y
)
=
J
(
θ
;
X
,
y
)
+
α
Ω
(
θ
)
J^{\sim}(\theta;X, y) = J(\theta;X,y) + \alpha\Omega(\theta)
J∼(θ;X,y)=J(θ;X,y)+αΩ(θ)
有时我们不希望范数惩罚项太大,因此需要给他加一个条件,例如
Ω
(
θ
)
≤
k
\Omega(\theta) \le k
Ω(θ)≤k。此时,我们就可以使用一个广义的拉格朗日函数来最小化这种带约束的函数。
J
∼
(
θ
;
X
,
y
)
=
J
(
θ
;
X
,
y
)
+
α
(
Ω
(
θ
)
−
k
)
J^{\sim}(\theta;X, y) = J(\theta;X,y) + \alpha(\Omega(\theta) - k)
J∼(θ;X,y)=J(θ;X,y)+α(Ω(θ)−k)
数据集增强
让机器学习模型泛化性能提升的最好办法是使用更多的数据进行训练。因此解决这一问题的最好方式便是构造新的数据集,进行数据增强。
数据增强的方式有很多种,本小节只介绍和正则化相关的方面:噪声注入。
理论上说,在一些分类问题中,将神经网络的输入层注入小的随机噪声应该不会对模型的结果造成太大的影响。然而Tang和Eliasmith在2010年证明了神经网络对噪声不是很健壮,因此需要将简单的随机噪声加入到神经网络中再训练,如去噪自编码器等。
噪声添加方式
- 对于某些模型而言,给输入添加方差极小的噪声等价于对权重施加范数惩罚。在一般情况下,添加噪声的效果远比简单的收缩参数要好。
- 将噪声添加到权重上也是一个不错的方式,主要应用在循环神经网络之上。
- 将噪声添加到输出之上也是一种现代神经网络所保持的显著特色,例如在最终输出上使用softmax时,由于softmax函数的特性,导致其永远无法真正预测概率,只会导致结果越来越极端,因此加入噪声正则化可以防止这种情况,达到标签平滑的效果。
提前终止
提前终止也属于一种正则化形式,它最常用,但也非常不显眼。
提前终止需要使用验证集,当验证集上的误差在一定循环次数之内没有进一步改善时,算法终止。
参数绑定和参数共享
参数范数惩罚时正则化参数,使其彼此接近的一种方式,而更流行的方法是使用约束强迫某些参数相等,常常被使用在卷积神经网络CNN中,将在后续章节进行介绍。
这样做的好处是显著降低了CNN的参数数量,显著提高了网络的大小,不需要相应增加训练数据。
稀疏表示
除了直接惩罚模型参数之外,还可以使用惩罚神经网络中的激活单元的方式,稀疏化激活单元,间接地施加复杂惩罚。
除了
L
1
L^1
L1惩罚可以诱导稀疏的参数之外,KL散度惩罚等方式也可以实现类似的效果。
含有隐藏单元的模型在本质上都能变得稀疏。
集成学习
这里主要涉及的是bagging算法,它通过结合几个同质模型来降低泛化误差。也被称为模型平均。
Dropout
这是神经网络中一种非常常见的正则化手段,计算方便且功能强大。
他可以按照预先设好的概率移除非输出单元对整个网络的影响,类似于一个共享了参数的bagging算法。如下图所示。
优点:计算方便,很少限制适用的模型或训练过程。
缺陷:减小了模型的有效容量,当数据量较小时,Dropout可能不是很有用;当数据量较大时,正则化手段的效果便不是特别明显了。
对抗训练
对于模型精确度已经“达到人类水准”的模型,通过故意构造数据点,也可以很轻易地使模型出现问题,如下图所示
人类能够看出两张照片都是熊猫,但神经网络却不能,主要原因就是两张图片的数据之间添加了人为制造的噪声,欺骗了分类器。
对抗训练有助于体现正则化的优势,在训练模型时可以加入这些对抗样本来训练网络。
切面距离、正切传播和流形正切分类器
许多机器学习通过假设数据位于低维流形附近来克服维数灾难。
因此衍生出了一些利用流形假设的算法,如切面距离、正切传播和流形正切分类器等,在后续章节将会进行介绍。