3.10 正则化
正则化技术令参数数量多于输入数据量的网络,以避免产生过拟合现象。正则化通过避免训练完美拟合数据样本的系数而有助于算法的泛化。
3.10.1 为什么要正则化
深度学习可能存在过拟合问题,有两个解决方法,一个是正则化,另一个是准备更多的数据。这是非常可靠的方法,但你可能无法时时刻刻准备足够多的训练数据,获取更多数据的成本很高,但正则化通常有助于避免过拟合或减少网络误差。
3.10.2 常见正则化方法
常见的机器学习算法的正则化方法有L1正则化、L2正则化、输出丢弃法(Dropout)、权重丢弃法(Drop Connect)、最大范数约束正则化、随机池化(Random Pooling)、早停法(Early Stop),还有对抗训练(Adversarial Training)、批归一化(Batch Normalization)、实例归一化(Instance Normalization)、组归一化(Group Normalization)、层次归一化(Layer Normalization)、可切换归一化(Switchable Normalization)、位置归一化(Positional Normalization)等。下面介绍几种最熟悉的正则化方法。
L1和L2正则化
正则化,就是在原来损失函数的基础上,加了一些正则化项(或者叫作模型复杂度惩罚项)。L1和L2正则化是最常用的正则化方法。L1正则化公式是直接在原来的损失函数基础上加上权重参数的绝对值。L2正则化公式是直接在原来的损失函数基础上加上权重参数的平方和。
Dropout
Dropout指暂时丢弃一部分神经元及其连接。对于某层的每个神经元,在训练阶段以一定的概率p随机将该神经元重置为0,测试阶段所有神经元呈激活状态,但其权重乘以(1-p),以保证训练和测试各阶段各自的权重拥有相同的期望。Dropout显著降低了过拟合,同时通过减少在训练数据上的训练节点提高了算法的学习速度。
Drop Connect
Drop Connect是Dropout的一般化的正则化方式。Drop Connect改变了在Dropout中对每个层随机选择激活函数的子集设置为0的做法,将网络架构权重的一个随机选择子集设置为0。Drop Connect和Dropout的不同之处在于它引入的是权重的稀疏性而不是层的输出向量的稀疏性。
最大范数约束正则化
最大范数约束正则化方法是通过约束参数范数对网络实施正则化。
解决过拟合的方式,除了上述的一些常见正则化方法,还有数据增强、早停法(Early Stopping)等,其中早停法根据合理的停止标准,限制模型最小化代价函数所需的训练迭代次数。早停法不需要对特定值进行手动设置就可以解决迭代次数过多或太少的问题。
3.10.3 图解L1和L2正则化
下面以线性回归为例进行理解。
假设线性回归的代价函数为:
加上L1正则化后的优化目标为:
加上L2正则化后的优化目标为:
使用等高线图来表示原目标函数的图像如图3-40所示。
图3-40 原目标函数的图像
当参数w1和w2取值为图像中最里面那个圆圈上的值时,可以使原目标函数最小。
当加上L1正则项之后,目标函数图像如图3-41所示。
图3-41 加上L1正则化后目标函数的图像
当加上L2正则项之后,目标函数图像如图3-42所示。
图3-42 加上L2正则化后目标函数的图像
图3-41中菱形即为,图3-42中圆形即为。若要使目标函数最小,就需要满足以下两个条件。
• 参数值在等高线上的圆圈越来越接近中心的圆圈。
• 菱形或圆形越小越好。在图3-41和图3-42中,等值线与F图形首次相交的地方就是最优解。
3.10.4 Dropout具体工作流程
Dropout在前向传播的时候,让某个神经元的激活值以一定的概率停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征。假设我们要训练这样一个标准的神经网络,如图3-43所示。
图3-43 标准的神经网络
假设输入是x,输出是y。正常的流程是:首先把x通过网络前向传播,然后把误差反向传播以决定如何更新参数让网络进行学习。使用Dropout之后,流程如下。
(1)随机(临时性的)删掉网络中一半的隐藏神经元,输入输出神经元保持不变(图3-44所示为部分临时被删除的神经元,其中虚线为部分临时被删除的神经元)。
(2)把输入x通过修改后的网络前向传播,把得到的损失结果通过修改的网络反向传播。当一小批训练样本执行完这个过程后,在没有被删除的神经元上按照随机梯度下降法更新对应的参数(w,b)。
(3)继续重复以下过程。
• 恢复被删掉的神经元。
• 从隐含层神经元中随机选择一个一半大小的子集临时删除。
• 对一小批训练样本,先进行前向传播,然后进行反向传播损失值,并根据随机梯度下降法更新参数(w,b)。
图3-44 部分临时被删除的神经元
3.10.5 为什么Dropout可以解决过拟合问题
我们从以下三个方面理解为什么Dropout可以解决过拟合。
(1)取均值的作用:标准的模型用相同的训练数据去训练5个不同的神经网络,一般会得到5个不同的结果,含有Dropout的模型中可以采用5个结果取均值或用多数取胜的投票策略去决定最终结果。综合起来取均值的策略通常可以有效防止过拟合问题。因为不同的网络可能产生不同的过拟合,取均值则有可能让一些“相反的”拟合互相抵消。
(2)减少神经元之间复杂的共适应关系:Dropout导致两个神经元不一定每次都在一个Dropout网络中出现。这样权重的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其他特定特征下才有效果的情况,迫使网络去学习更加复杂的特征,这些特征在其他的神经元的随机子集中也存在。
(3)Dropout类似于性别在生物进化中的角色:物种为了生存往往会倾向于适应这种环境,环境突变则会导致物种难以做出及时反应,性别的出现可以繁衍出适应新环境的变种,有效地阻止过拟合,即避免环境改变时物种可能面临的灭绝。
3.10.6 Dropout的缺点
Dropout是一种正则化方法,它有助于预防过拟合,但是使用Dropout也有一些需要注意的地方。
(1)算法过拟合可以使用Dropout,没有过拟合的时候一般不用Dropout。
(2)使用Dropout后,代价函数不再被明确定义,导致每次迭代损失函数值可能不会总体上单调递减。
(3)训练时间是没有Dropout网络的2~3倍。