【深度学习(deep learning)】花书第7章 深度学习中的正则化 读书笔记

【深度学习(deep learning)】花书第7章 深度学习中的正则化 读书笔记

第7章 深度学习中的正则化


前言

打基础,阅读花书,感觉一次性啃不动。看一点算一点,写一点笔记留作纪念。以便日后查看与回顾。正则化这一章给出了好多很实用的技巧与思想。正则化技术按照参数/数据/模型/训练四个方面分类的想法来自参考资料4与5。2020.11.21-2020.11.23
以下是正式内容。

一、正则化

  1. 过拟合(overfitting):过分追求训练误差小,导致没有很好泛化能力,训练误差与测试误差之间的差距太大。
  2. 欠拟合(underfitting):模型在训练集上不能获得足够低的误差,拟合能力不强。
  3. 正则化(regularizer):给代价函数添加一些惩罚项,以希望缓解过拟合,这些惩罚项被称为正则化项,体现着对学习算法的偏好。

示意图如下:(图片来自花书)
【深度学习(deep learning)】花书第7章 深度学习中的正则化 读书笔记
【深度学习(deep learning)】花书第7章 深度学习中的正则化 读书笔记

深度神经网络拥有很强的学习能力,过拟合的风险比较大。因此正则化的目的就是减小模型的泛化误差。深度学习背景下,是以偏差的增加换取方差的减小。按照正则化发挥作用的层面不同,将深度学习中的正则化技术分成参数/数据/模型/训练四类。

二、参数正则化

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} ∇w​J~(w;X,y)=∇w​J(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−ϵ(∇w​J(w;X,y)+αw)=(1−ϵα)w−ϵ∇w​J(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}) ∇w​J~(w;X,y)=∇w​J(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 多任务学习

将多个相关的任务放到一起学习,合并多个任务中的样例。可以视为对参数施加了软约束(因为共享给其他任务),同时合并多任务的样例从而增加了数据量(样本数量与样本间的相关信息)。

多任务学习的常规形式:(图来自花书)
【深度学习(deep learning)】花书第7章 深度学习中的正则化 读书笔记
共享参数(底层):抽象出来的,通用的x的信息池。原本是来自不同的任务层面的。只有满足“任务是相关的”,才能这样抽取。
具体任务的参数(上层):结合任务对应的样本实现泛化。

对于某个任务,等于加入了额外的信息 = 数据增强。对于其他任务,可以看作引入了噪声,从而增强泛化。

4.2 稀疏表示

惩罚神经网络中的激活单元稀疏化激活单元
L1参数惩罚获得的是W的稀疏解,即参数的稀疏。
稀疏表示获得的是h的稀疏解,即表示的稀疏。

  1. 表示的稀疏可以通过表示正则化完成,与参数的正则化机制是一样的,即: 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散度惩罚等。

  2. 表示的稀疏还可以通过激活值的硬性约束来获得,比如正交匹配追踪。可以用作特征提取

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.优点

  1. 效果好,可以和其他正则化方法叠加使用
  2. 计算方便
  3. 适用范围广

缺点:

  1. 样本数量少时,效果不好(Bagging集成的通病)
  2. 每一层包含的神经元要有一定数量

五、训练正则化

5.1 早停(提前终止)*

对于大型模型(表示能力很强)总会出现:训练误差持续降低,验证误差会再次上升。
早停:当验证集误差不再下降时,及时停止模型训练。深度学习中最常用的正则化形式,简单易行且有效。同时早停还可以减少计算成本。

若将训练的轮数也视为超参数,则早停就是在第一轮训练中寻找到最佳的训练轮数这个超参数(那个拐点)。当验证集误差在指定轮数内没有进一步改善时,就判定终止。

早停必须要有验证集,就意味着用于训练的数据会下降。为了利用这些数据,可以训练第二轮,有两种策略:

  1. 再次初始化,使用全部训练数据,并且使用第一轮确定的早停训练轮数。
  2. 保持早停时的参数,使用全部数据继续训练,直到验证集的平均损失函数达到早停时的水平。

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

上一篇:[每日一题2020.06.15]P1226 【模板】快速幂取余运算


下一篇:分享一下学习css,js心得