【深度学习(deep learning)】花书第7章 深度学习中的正则化 读书笔记
第7章 深度学习中的正则化
前言
打基础,阅读花书,感觉一次性啃不动。看一点算一点,写一点笔记留作纪念。以便日后查看与回顾。正则化这一章给出了好多很实用的技巧与思想。正则化技术按照参数/数据/模型/训练四个方面分类的想法来自参考资料4与5。2020.11.21-2020.11.23以下是正式内容。
一、正则化
- 过拟合(overfitting):过分追求训练误差小,导致没有很好泛化能力,训练误差与测试误差之间的差距太大。
- 欠拟合(underfitting):模型在训练集上不能获得足够低的误差,拟合能力不强。
- 正则化(regularizer):给代价函数添加一些惩罚项,以希望缓解过拟合,这些惩罚项被称为正则化项,体现着对学习算法的偏好。
示意图如下:(图片来自花书)
深度神经网络拥有很强的学习能力,过拟合的风险比较大。因此正则化的目的就是减小模型的泛化误差。深度学习背景下,是以偏差的增加换取方差的减小。按照正则化发挥作用的层面不同,将深度学习中的正则化技术分成参数/数据/模型/训练四类。
二、参数正则化
2.1 参数范数惩罚 *
在目标函数J中加入参数范数惩罚项Ω,限制模型的学习能力(减小学习算法的容量)。
J
~
(
θ
;
X
,
y
)
=
J
(
θ
;
X
,
y
)
+
α
Ω
(
θ
)
,
α
>
0
\tilde{J}\left( \boldsymbol{\theta ;X,y} \right) =J\left( \boldsymbol{\theta ;X,y} \right) +\alpha \varOmega \left( \boldsymbol{\theta } \right) ,α>0
J~(θ;X,y)=J(θ;X,y)+αΩ(θ),α>0
通常只对权重做惩罚,不对偏置做惩罚。默认对所有层使用同样的α。
参数的不同范数对应着不同偏好,会起到不同的正则化效果。
2.1.1 L2参数正则化 *
最简单,最常用,又叫权重衰减。
Ω
(
θ
)
=
1
2
∥
θ
∥
2
2
\varOmega \left( \boldsymbol{\theta } \right) \ =\ \frac{1}{2}\lVert \boldsymbol{\theta } \rVert _{2}^{2}
Ω(θ) = 21∥θ∥22
则目标函数:
J
~
(
w
;
X
,
y
)
=
J
(
w
;
X
,
y
)
+
α
2
w
T
w
\tilde{J}\left( \boldsymbol{w;X,y} \right) =J\left( \boldsymbol{w;X,y} \right) +\frac{\alpha}{2}\boldsymbol{w}^T\boldsymbol{w}
J~(w;X,y)=J(w;X,y)+2αwTw梯度:
∇
w
J
~
(
w
;
X
,
y
)
=
∇
w
J
(
w
;
X
,
y
)
+
α
w
\nabla _w\tilde{J}\left( \boldsymbol{w;X,y} \right) =\nabla _wJ\left( \boldsymbol{w;X,y} \right) +\alpha \boldsymbol{w}
∇wJ~(w;X,y)=∇wJ(w;X,y)+αw更新权重:
w
←
w
−
ϵ
(
∇
w
J
(
w
;
X
,
y
)
+
α
w
)
=
(
1
−
ϵ
α
)
w
−
ϵ
∇
w
J
(
w
;
X
,
y
)
\boldsymbol{w}\gets \boldsymbol{w}-\epsilon \left( \nabla _wJ\left( \boldsymbol{w;X,y} \right) +\alpha \boldsymbol{w} \right) =\left( 1-\epsilon \alpha \right) \boldsymbol{w}-\epsilon \nabla _wJ\left( \boldsymbol{w;X,y} \right)
w←w−ϵ(∇wJ(w;X,y)+αw)=(1−ϵα)w−ϵ∇wJ(w;X,y)
这样,在更新梯度之前,会对权重进行收缩。
利用hessian矩阵进行二阶近似,令w* 为不加正则化的最优参数,w~是加了正则化的最优参数,H是J在w* 处的hessian矩阵,则:
α
w
~
+
H
(
w
~
−
w
∗
)
=
0
\alpha \boldsymbol{\tilde{w}}+H\left( \boldsymbol{\tilde{w}}-\boldsymbol{w}^* \right) =0
αw~+H(w~−w∗)=0
w
~
=
(
H
+
α
I
)
−
1
H
w
∗
\boldsymbol{\tilde{w}}=\left( \boldsymbol{H}+\alpha \boldsymbol{I} \right) ^{-1}\boldsymbol{Hw}^*
w~=(H+αI)−1Hw∗
当α取向0,w~趋向w* ,相当于不加正则化。
将H进行特征值分解(标准正交基)得到:
w
~
=
Q
(
Λ
+
α
I
)
−
1
Λ
Q
T
w
∗
\boldsymbol{\tilde{w}}=\boldsymbol{Q}\left( \boldsymbol{\Lambda }+\alpha \boldsymbol{I} \right) ^{-1}\boldsymbol{\Lambda Q}^T\boldsymbol{w}^*
w~=Q(Λ+αI)−1ΛQTw∗
权重衰减会沿着H的特征向量的轴缩放w*。缩放的比例为:
λ
i
λ
i
+
α
\frac{\lambda _i}{\lambda _i+\alpha}
λi+αλi
只有在显著减小目标函数方向(H的特征值大)上的参数会保留相对完好,无助于减小目标函数的方向(H的特征值小)上的参数会在正则化的过程中衰减掉。
2.1.2 L1参数正则化 *
惩罚项是参数绝对值之和。
Ω
(
θ
)
=
∥
w
∥
1
=
∑
i
∣
w
i
∣
\varOmega \left( \boldsymbol{\theta } \right) =\lVert \boldsymbol{w} \rVert _1=\sum_i{\left| w_i \right|}
Ω(θ)=∥w∥1=i∑∣wi∣则目标函数:
J
~
(
w
;
X
,
y
)
=
J
(
w
;
X
,
y
)
+
α
∥
w
∥
1
\tilde{J}\left( \boldsymbol{w;X,y} \right) =J\left( \boldsymbol{w;X,y} \right) +{\alpha}\lVert \boldsymbol{w} \rVert _1
J~(w;X,y)=J(w;X,y)+α∥w∥1梯度:
∇
w
J
~
(
w
;
X
,
y
)
=
∇
w
J
(
w
;
X
,
y
)
+
α
s
i
g
n
(
w
)
\nabla _w\tilde{J}\left( \boldsymbol{w;X,y} \right) =\nabla _wJ\left( \boldsymbol{w;X,y} \right) +\alpha sign(\boldsymbol{w})
∇wJ~(w;X,y)=∇wJ(w;X,y)+αsign(w)
不再线性地缩放w,而是添加一个常数。
同样地,将目标函数进行二次泰勒展开近似,但是需要假设H是对角矩阵(数据经过处理,去除了相关性)。
L1正则化会产生更稀疏的解(0更多,非零元素数目少)。
2.2 作为约束的范数惩罚
2.2.1 约束惩罚项
希望对惩罚施加约束:
Ω
(
θ
)
<
k
\varOmega \left( \boldsymbol{\theta } \right) <k
Ω(θ)<k可以构建拉格朗日函数:
L
(
θ
,
α
;
X
,
y
)
=
J
(
θ
;
X
,
y
)
+
α
Ω
(
(
θ
)
−
k
)
,
α
>
0
\mathcal{L}\left( \boldsymbol{\theta ,}\alpha ;\boldsymbol{X,y} \right) =J\left( \boldsymbol{\theta ;X,y} \right) +\alpha \varOmega \left( \left( \boldsymbol{\theta } \right) -k\right),α>0
L(θ,α;X,y)=J(θ;X,y)+αΩ((θ)−k),α>0则最优的参数为:
θ
∗
=
a
r
g
min
θ
max
α
,
α
≥
0
L
(
θ
,
α
)
\boldsymbol{\theta }^*=\underset{\boldsymbol{\theta }}{arg\min}\ \underset{\alpha ,\alpha \ge 0}{\max}\ \mathcal{L}\left( \boldsymbol{\theta ,}\alpha \right)
θ∗=θargmin α,α≥0max L(θ,α)
2.2.2 将惩罚显式化
L2范数相当于将参数限制在一个圆形内。则相当于一个带约束条件的无惩罚项的目标函数
J
(
θ
;
X
,
y
)
s
.
t
.
∥
θ
∥
2
2
≤
C
J\left( \boldsymbol{\theta ;X,y} \right) \ \ \ s.t. \lVert \boldsymbol{\theta } \rVert _{2}^{2} \le C
J(θ;X,y) s.t.∥θ∥22≤C通过构造拉格朗日函数,将其转化为无约束的问题。
L
(
θ
,
α
;
X
,
y
)
=
J
(
θ
;
X
,
y
)
+
α
(
∥
θ
∥
2
2
−
C
)
\mathcal{L}\left( \boldsymbol{\theta ,}\alpha ;\boldsymbol{X,y} \right) =J\left( \boldsymbol{\theta ;X,y} \right) +\alpha( \lVert \boldsymbol{\theta } \rVert _{2}^{2} - C)
L(θ,α;X,y)=J(θ;X,y)+α(∥θ∥22−C)
显式约束的好处:
1.可以先计算J的梯度,再去考虑满足约束的最近的θ。
2.惩罚项可能导致目标函数非凸,非凸就会导致陷入局部最优的可能性。
3.增加一定的稳定性。
2.3 正则化解决欠约束问题
许多算法依赖求解矩阵1的逆,但是这个矩阵不一定可逆。
X
T
X
\boldsymbol{X}^T\boldsymbol{X}
XTX而正则化的算法对应求解
X
T
X
+
α
I
\boldsymbol{X}^T\boldsymbol{X}+\alpha \boldsymbol{I}
XTX+αI
这个矩阵可以保证是可逆的。
比如L2正则化的线性回归(岭回归)。
西瓜书有说矩阵不可逆,无法求解析解的情况可以通过施加正则化解决。花书也给出了相关说明。
2.4 参数绑定与参数共享
参数范数约束,是对参数本身的衡量(体现某种对参数本身的先验知识),也可以看作是对参数与零点的距离的惩罚。零点就是对参数衡量的一个相对指标(比如以原点为圆心的圆,表示参数的L2范数)。
如果知道了参数之间的相关关系(参数之间相关性的先验知识),比如某些参数应当彼此接近,可以用向量距离的范数来衡量,即参数绑定。即将参数衡量的相对指标换成另一个参数。(以另一个参数为圆心,构建一个圆的约束)。
比如使用L2范数: Ω ( w ( A ) , w ( B ) ) = ∥ w ( A ) − w ( B ) ∥ 2 2 \varOmega \left( \boldsymbol{w}^{\left( A \right)},\boldsymbol{w}^{\left( B \right)} \right) =\lVert \boldsymbol{w}^{\left( A \right)}-\boldsymbol{w}^{\left( B \right)} \rVert _{2}^{2} Ω(w(A),w(B))=∥w(A)−w(B)∥22
如果希望参数相等,则可使用显式的约束,称为参数共享。好处是可以减少内存,减少训练开支。主要用于卷积神经网络。
三、数据正则化
3.1 数据集增强 *
解决过拟合,增强模型泛化能力的最好的办法就是加大数据量。可以通过添加“人造数据”加大数据量。对于一些特定的任务(比如任务是分类,数据是图片),创建假数据比较容易。
- 对于图像,可以进行图像的平移/旋转/缩放/翻转/改变光照等变化。但是不能改变标记。(6不能旋转成9,b不能镜像到d)
- 语音识别任务也可以进行数据集增强。
- 数据增强的另一种方式是在输入层注入噪声(比如去噪自编码器)。也可以在隐藏单元注入噪声(抽象层的数据集增强)
3.2 噪声鲁棒性
- 在输入层(隐层)注入噪声 = 数据增强
- 在隐层注入噪声 → dropout
- 在权重(参数)中注入噪声,应用在循环神经网络,表示权重的不确定性 = 关于权重的贝叶斯推断的随机实现
- 在输出中注入噪声,对标签中的错误(噪声)显式建模,标签平滑。
3.3 半监督学习
带有标记的样本数目少,无标记的样本多,而获取人工标记的成本高。可以利用大量的无标记样本丰富数据集。
使用有标记+无标记数据的学习过程就是半监督学习。深度学习背景下,半监督学习通常是指学习一个表示,目的是相同类有相同的表示。
可以使用一个模型(一套参数),同时考虑监督部分的损失与无监督部分的损失。半监督学习也可以看作模型层面的正则化。
四、模型正则化
4.1 多任务学习
将多个相关的任务放到一起学习,合并多个任务中的样例。可以视为对参数施加了软约束(因为共享给其他任务),同时合并多任务的样例从而增加了数据量(样本数量与样本间的相关信息)。
多任务学习的常规形式:(图来自花书)
共享参数(底层):抽象出来的,通用的x的信息池。原本是来自不同的任务层面的。只有满足“任务是相关的”,才能这样抽取。
具体任务的参数(上层):结合任务对应的样本实现泛化。
对于某个任务,等于加入了额外的信息 = 数据增强。对于其他任务,可以看作引入了噪声,从而增强泛化。
4.2 稀疏表示
惩罚神经网络中的激活单元,稀疏化激活单元。
L1参数惩罚获得的是W的稀疏解,即参数的稀疏。
稀疏表示获得的是h的稀疏解,即表示的稀疏。
-
表示的稀疏可以通过表示正则化完成,与参数的正则化机制是一样的,即: J ~ ( θ ; X , y ) = J ( θ ; X , y ) + α Ω ( h ) , α > 0 \tilde{J}\left( \boldsymbol{\theta ;X,y} \right) =J\left( \boldsymbol{\theta ;X,y} \right) +\alpha \varOmega \left( \boldsymbol{ h } \right) ,α>0 J~(θ;X,y)=J(θ;X,y)+αΩ(h),α>0
除了L1惩罚之外,还可以用student-t导出的先验惩罚,KL散度惩罚等。 -
表示的稀疏还可以通过激活值的硬性约束来获得,比如正交匹配追踪。可以用作特征提取。
4.3 Bagging集成
集成是结合多个模型降低泛化误差的技术。
通过平均或者投票的方式结合多个模型,又叫做模型平均,是集成的一种。
可行的原因:不同的模型在同一个测试集上通常不会产生完全相同的误差(模型之间具有多样性,或者说相对独立)。Bagging是基于自助采样法的,每个模型的训练集并不完全一样,而神经网络又是数据敏感的学习器,所以每个模型之间会有很大差异。
而且神经网络在训练过程中也包含足够多的随机因素,比如权值初始化/小批量更新/超参数等等,这些都会明显影响神经网络间的差异。
当差异足够大时(独立性足够强),Bagging就可以带来显著的泛化误差的降低,尤其是降低方差方面。
4.4 Dropout *
可以看作是一个深度神经网络内部的Bagging集成近似。
Bagging的显著缺点是需要训练多个模型,对于深度模型而言这个开销尤其地大。
Dropout可以看作在深度神经网络内部利用子网模拟集成。子网络是通过删除非输出单元实现的,删除可以通过乘0 系数简单实现。然后再将自网络集成起来,子网络都是来源于父网络的,权重共享。
1.训练
具体操作:
1.在小批量训练时,依据一个概率,采样得到决定单元是否删除的二元状态掩码。掩码μ:1代表正常保留,0代表删除(乘0系数,它的输出保持为0)。掩码的采样是相互独立的。概率一般指掩码为1的概率,是提前定义的超参数,比如输入层为0.8,隐层中为0.5。
2.然后进行前向传播/反向传播/学习更新等。
每次只训练一部分的子网络,参数共享使得剩余的网络也能有比较好的参数设置。因为是在批训练过程中进行的,所以每个子网都是在原始训练集的一个子集上训练的,这和Bagging是一样的。
2.推断
假设模型是以后验概率的形式给出。Bagging的最终结果由算术平均给出。dropout则是包含掩码与掩码概率分布的算术平均,有多达指数级别的项,是不可能计算的。
通过计算成员的几何平均 也可以很好地近似整个集成的预测。
几何平均:(d是可被丢弃的单元数,μ是均匀分布的,未规范化,不一定是一个严格的概率分布)
p
~
(
y
∣
x
)
=
∏
μ
p
(
y
∣
x
,
μ
)
2
d
\tilde{p}\left( y|\boldsymbol{x} \right) =\sqrt[2^d]{\prod_{\boldsymbol{\mu }}{p\left( y|\boldsymbol{x,\mu } \right)}}
p~(y∣x)=2dμ∏p(y∣x,μ)
权重比例截断规则:
没有必要计算所有子网络从而模拟p~,可以修改整体网络(一个网络)中每个单元,单元i的输出的权重乘以这个单元被包含的概率。
相当于在训练结束后将权重 除以 这个单元被包含的概率的倒数。
实现时,可以在训练期间每个节点的输出中除以这个单元被包含的概率(乘上它的倒数)。这样在预测时,通过一遍正常的前馈即可,不需要进行权重的调整。
虽然没有理论证明,但是效果很好。
3.优点
- 效果好,可以和其他正则化方法叠加使用
- 计算方便
- 适用范围广
缺点:
- 样本数量少时,效果不好(Bagging集成的通病)
- 每一层包含的神经元要有一定数量
五、训练正则化
5.1 早停(提前终止)*
对于大型模型(表示能力很强)总会出现:训练误差持续降低,验证误差会再次上升。
早停:当验证集误差不再下降时,及时停止模型训练。深度学习中最常用的正则化形式,简单易行且有效。同时早停还可以减少计算成本。
若将训练的轮数也视为超参数,则早停就是在第一轮训练中寻找到最佳的训练轮数这个超参数(那个拐点)。当验证集误差在指定轮数内没有进一步改善时,就判定终止。
早停必须要有验证集,就意味着用于训练的数据会下降。为了利用这些数据,可以训练第二轮,有两种策略:
- 再次初始化,使用全部训练数据,并且使用第一轮确定的早停训练轮数。
- 保持早停时的参数,使用全部数据继续训练,直到验证集的平均损失函数达到早停时的水平。
5.2 对抗训练 *
制造对抗样本迷惑网络,增强其抗扰动能力。
对抗训练:在包含对抗样本扰动的训练集上训练网络。
可以通过对抗训练减少原来独立同分布的测试集的错误率,达到正则化的目的。
网络会被对抗样本迷惑的主要原因是模型的过度线性。通过对抗样本训练可以使局部纯线性转化为局部近似恒定,降低对抗扰动。
参考资料
1.机器学习,周志华
2.统计学习方法,第二版,李航
3.https://zhuanlan.zhihu.com/p/38431213
4.https://github.com/MingchaoZhu/DeepLearning
5.https://www.bilibili.com/video/BV1kE4119726?p=5&t=1340
6.https://www.cnblogs.com/lucius/p/9391286.html