深度学习——这可能是你看过的最全的【正则化】讲解
1、前言
学完吴恩达老师的深度学习后,对深度学习也有有了较为基础而全面的认识,但是还是没有形成肌肉记忆,有些时候反应不过来,索性开一个专题将自己不太熟悉的部分重新再梳理一遍。整理一些比较容易搞混的地方的,如有疏漏或者错误也欢迎大家批评指正,我们的目标是一起学习进步。
- 想必大家都知道L1、L2正则化,还有dropout、归一化等,这些方法都是正则化吗?在使用它们时应该注意什么?它们之间有什么关系呢?
2、正则化-Regularization
- 定义1:在《统计学习方法》里被定义为“是结构化风险最小化策略的实现,是在经验风险上加一个正则化项(regularizer)或者惩罚项(penalty term)。这个定义直观上和L1、L2正则化是一致的,但是正则化实际上不止于此。
- 定义2:“正则化”在在经典的“花书”教材《深度学习》里有个定义:降低泛化误差而不是训练误差的方法都可以叫”正则化“方法。
正则化的目的是使模型性能更趋于稳定可靠。这篇文章采取了广义的正则化的范畴,指正则化操作不仅限于添加正则化项,所有有利于模型稳定可靠(提升泛化能力,降低结构风险)的方法都可以认为是正则化;数据、模型、训练方法等一系列操作都分布着正则化方法。从这个角度,归一化操作也可以被看做是一种正则化方法。
3、正则化和过拟合
一个好的模型,不仅仅是对于已知的数据(训练数据)性能表现良好,对于未知的数据(测试数据)也应该表现良好,也就是具有良好的泛化能力。测试数据的误差,也被称为泛化误差。当训练误差很小,泛化误差很大时,就过拟合了。以逻辑回归为例:当其把训练样本“分的太清了”后,泛化能力也会下降。
4、什么时候需要正则化
由上述定义可知,为了降低泛化误差而不是训练误差时正则化,所以防止模型过拟合时正则化。
5、正则化方法汇总1
一、在模型形式中
- L1正则化:模型的高次项数量过多,数量越多函数越复杂,分割边界越扭曲越过拟合,我们可以通过让高次项系数W变为0,从而消掉高次项。有朋友会疑惑为什么要多此一举消掉高此项,直接不要高此项不就好了,但是就像我上面说的我们虽然找到很多具备分类能力的模型,但是我们知道越复杂的拟合能力越强,我们想找最好的那个,就需要先假设复杂函数形式,然后以某种方式做减法,降低模型的复杂度,找到拟合的平衡点。
- L2正则化:模型的高次项数量过多,可以通过让高此项系数W变为接近0的很小的数,从而让高此项的权重或者影响作用降低,同时又保留高此项带来的复杂拟合能力。
- 弹性网络正则化:L1正则化+L2正则化。将L1的正则化和L2的正则化联合使用。
二、在模型训练过程中
-
早停法:不仅在模型的形式方面防止过拟合,还可以在训练过程中控制过拟合,因为我们是通过迭代法逐渐逼近最优解,所以可以提早结束迭代、停止训练。如图所示,随着训练迭代次数增加,训练误差减小,但泛化误差增大。
-
数据增强:过拟合说明数据不够用,太少了,我们可以增加样本数据,如果还能获取更多数据当然更好,但是一般数据已经是固定的了,所以可以对原有数据进行处理,比如上采样、数据增强等等,让数据看似“增多”。
-
Dropout:过拟合说明我把全部样本数据信息都学到了,那如果我在训练模型过程中,每次迭代不用全部样本,而是部分样本,所以深度学习里的“Dropout”方法就是这种原理,在模型训练过程中,随机的丢弃掉一部分样本,这部分样本不参与参数更新。还有卷积神经网络中的池化层也有此作用。
三、在模型训练前
- 数据预处理:我们使用的是原始数据去训练模型,如果适当地对特征进行一些处理,人为地改变数据,丢弃掉个别数据的偶然性提取共性,是不是也可以达到防止过拟合的效果。比如归一化(标准化)、离散化(分箱),LightGBM模型优异的性能就是采用的直方图分箱的方式,既提高了计算效率,又防止过拟合。
四、在模型训练后
- 多模型融合:采用单个模型可能存在过拟合,如果将多个模型进行集成融合就可以取长补短,在某种程度上降低了过拟合。
6、L1正则和L2正则2 3
L1正则和L2正则是最常用的正则化方法。用来限制损失函数中较高阶的参数大小。在损失函数时加入l1、l2范数。其中λ是正则化系数,是一个超参数,调节惩罚的力度,越大则惩罚力度越大。
一、L1正则
L1正则化,是指权值向量w中各个元素的绝对值之和。L1正则化可以让一部分特征的系数缩小到0,所以L1适用于特征之间有关联的情况,可以产生稀疏权值矩阵(很多权重为0,则一些特征被过滤掉),即产生一个稀疏模型,可以用于特征选择。L1也可以防止过拟合。
二、L2正则
L2正则化是指权值向量中各个元素的平方和然后再求平方根,对参数进行二次约束,参数w变小,但不为零(接近0),不会形成稀疏解 。它会使优化求解稳定快速,使权重平滑。所以L2适用于特征之间没有关联的情况。
通过添加正则化项,我们从当前权重(等式中的第一项)中引入了额外的减法。每次执行更新时,我们都会使权重变小一点。所以L2正则化叫做权重衰减。
三、弹性网络正则化(elastic net regularization)
7、早停法4
其基本含义是在训练中计算模型在验证集上的表现,当模型在验证集上的表现开始下降的时候,停止训练,这样就能避免继续训练导致过拟合的问题。其主要步骤如下:
- 将原始的训练数据集划分成训练集和验证集
- 只在训练集上进行训练,并每个一个周期计算模型在验证集上的误差,例如,每15次epoch(mini batch训练中的一个周期)
- 当模型在验证集上的误差比上一次训练结果差的时候停止训练
- 使用上一次迭代结果中的参数作为模型的最终参数
如下图之后的某个epoch,模型的验证误差逐渐上升,模型出现过拟合,所以需要提前停止训练,早停法主要是训练时间和泛化错误之间的权衡。不同的停止标准也是给我们带来不同的效果。
8、数据增强(data augmentation)5
- 几何变换类:翻转、旋转、缩放、裁剪、移位 、
- 颜色变换类:高斯噪声、模糊、颜色变换、擦除、填充等
- 多样本数据增强等高级增强方法
9、Dropout6
Dropout通过修改神经网络本身来实现的,它是在训练网络时用的一种技巧。
- 只针对 全连接层 进行操作
- 训练阶段和测试阶段的操作不同
一、训练阶段
按概率p随机将神经元置0 ,从而达到降低模型复杂度的目的:
dropout之后的网络只是原网络的一个子网络 ,复杂度不比原网络低。由于每个神经元的dropout是随机dropout,因此每一轮都相当于在一个新的子网络上训练。那么最终得到的模型便是无数个子网络共同训练的成果,效果自然会更好。
二、测试阶段
所有神经元均呈激活态,但其权重需乘上概率p,以保证各权重能有和训练阶段相同的期望
10、数据预处理
这里主要讲归一化,注意一般的正则化和归一化不等同,一般的正则化只在损失函数中增加惩罚项(正则项),而归一化主要是为了解决网络中数据分布变化大,学习过程慢的问题。归一化可以提高网络的泛化能力,所以也是广义的正则化。
在BN中,归一化步骤如下:
总结
这篇文章中讲解的正则化方法都是广义的,都可以降低过拟合问题,其中L1和L2正则是较为常见的正则化方法,是通过添加正则化项实现的,目的也是为了降低过拟合。在深度学习模型训练过程中,可以采取不同的方法来改善过拟合问题。