为了解决过拟合问题,通常有两种办法,第一是减少样本的特征(即维度),第二就是我们这里要说的"正则化".
下面是一些可以帮助缓解过拟合现象的正则化技巧
使用正则项(Regularization)
L1 Regularization
L1范数为:
L1正则项如下所示, 其中 代表原始的不加正则项的损失函数, 代表加了正则项以后的损失函数, 则代表训练batch的样本大小 :
将上式对参数 求导如下(由于正则项与 无关, 因此参数 的导数不变):
上式中 表示 的符号, 当 时, , 当 时, , 为了实现方便, 我们特意规定, 当 时, , 相当于去掉了正则项.
因此, 权重 的更新表达式可如下表示:
L1正则化使模型参数稀疏的原理是什么?
角度一: 解空间性状
"百面机器学习"
角度二: 函数叠加(梯度下降更新公式)
从以上的更新表达式我们可以看出, 当 为正时, L1正则化会将更新后的 变的再小一点, 而当 为负时, L1正则化会将其变的更大一点---因此L1的正则化效果就是让 尽可能的向 靠近, 即最终的 参数矩阵会变的更加稀疏
角度三: 贝叶斯先验
"百面机器学习"
补充: 为什么 L1 和 L2 分别对应拉普拉斯先验和高斯先验?
为什么权重矩阵稀疏可以防止过拟合?
可以从两个方面来理解:
1)特征选择(Feature Selection):
大家对稀疏规则化趋之若鹜的一个关键原因在于它能实现特征的自动选择。一般来说,xi的大部分元素(也就是特征)都是和最终的输出yi没有关系或者不提供任何信息的,在最小化目标函数的时候考虑xi这些额外的特征,虽然可以获得更小的训练误差,但在预测新的样本时,这些没用的信息反而会被考虑,从而干扰了对正确yi的预测。稀疏规则化算子的引入就是为了完成特征自动选择的光荣使命,它会学习地去掉这些没有信息的特征,也就是把这些特征对应的权重置为0。
2)可解释性(Interpretability):
另一个青睐于稀疏的理由是,模型更容易解释。例如患某种病的概率是y,然后我们收集到的数据x是1000维的,也就是我们需要寻找这1000种因素到底是怎么影响患上这种病的概率的。假设我们这个是个回归模型: (当然了,为了让 限定在 的范围,一般还得加个Logistic函数)。通过学习,如果最后学习到的 就只有很少的非零元素,例如只有 5 个非零的 ,那么我们就有理由相信,这些对应的特征在患病分析上面提供的信息是巨大的,决策性的。也就是说,患不患这种病只和这5个因素有关,那医生就好分析多了。但如果 1000 个 都非 0,医生面对这 1000 种因素,累觉不爱.
范式和 范式都能实现稀疏, 为什么不选择用 而要用 ?
一是因为L0范数很难优化求解(NP难问题),二是L1范数是L0范数的最优凸近似,而且它比L0范数要容易优化求解
L2 Regulation(权重衰减/岭回归)
L2范数为:
L2正则项如下所示, 其中 代表原始的不加正则项的损失函数, 代表加了正则项以后的损失函数, 式中的系数 主要是为了消去求导后产生的常数 , 方便表示 (因为可以根据 的值来替代这些常数):
将上式对参数 求导如下:
则, 权重 的更新表达式可如下表示:
由于, 三个值都是正的, 因此, 加上 正则化以后, 权重整体减小了, 这也是"权重衰减"的由来.
为何权重参数 减小就可以防止过拟合?
直观解释:
更小的权值w,从某种意义上说,表示网络的复杂度更低,对数据的拟合刚刚好(这个法则也叫做奥卡姆剃刀),而在实际应用中,也验证了这一点,L2正则化的效果往往好于未经正则化的效果
"数学一点"的解释:
过拟合的时候,拟合函数的系数往往非常大,为什么?如下图所示,过拟合,就是拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大. 而正则化是通过约束参数的范数使其不要太大,所以可以在一定程度上减少过拟合情况。
L2 范式的好处是什么?
防止过拟合:
最基本的好处是可以提高模型泛化能力, 防止过拟合
优化计算:
从优化或者数值计算的角度来说, L2正则化有利于提高模型训练速度, 加快计算
原因: https://www.cnblogs.com/callyblog/p/8094745.html
L1 和 L2 的区别
1. L1相对于L2能够产生更加稀疏的模型:
原因见上面L1稀疏性的原理
2. 二者梯度下降速度不同:
根据L1和L2的函数图像可以看出, L1是按照线性函数进行梯度下降的, 而L2则是按照二次函数, 因此, L1在下降时的速度是恒定的, 在接近于0的时候会很快就将参数更新成0 , 而L2在接近于0 时, 权重的更新速度放缓, 使得不那么容易更新为0 :
3. 二者解空间性状不同:
这一点也可以解释为什么L1相比于L2更加稀疏的原因
数据增广(Data Augmentation)
水平或垂直翻转图像、裁剪、色彩变换、扩展和旋转等等, 也可利用GAN辅助生成(不常用)
Dropout
Dropout是指在深度网络的训练中, 以一定的概率随机的"临时丢弃"一部分神经元节点. 具体来讲, Dropout作用于每份小批量训练数据, 由于其随机丢弃部分神经元的机制, 相当于每次迭代都在训练不同结构的神经网络, 可以被认为是一种实用的大规模深度神经网络的模型继承算法.
对于包含 个神经元节点的网络, 在Dropout的作用下可以看作为 个模型的集成, 这 个模型可认为是原始网络的子网络, 它们共享部分权值, 并且拥有相同的网络层数, 而模型整个的参数数目不变, 大大简化了运算.
对于任意神经元来说, 每次训练中都与一组随机挑选的不同的神经元集合共同进行优化, 这个过程会减弱全体神经元之间的联合适应性, 减少过拟合的风险, 增强泛化能力.
工作原理和实现:
应用Dropout包括训练和预测两个阶段, 在训练阶段中, 每个神经元节点需要增加一个概率系数, 在前向传播时, 会以这个概率选择是否丢弃当前的神经元
在测试阶段的前向传播计算时, 每个神经元的参数都会预先乘以概率系数p, 以恢复在训练中该神经元只有p的概率被用于整个神经网络的前向传播计算
Drop Connect
Drop Connect 是另一种减少算法过拟合的正则化策略,是 Dropout 的一般化。在 Drop Connect 的过程中需要将网络架构权重的一个随机选择子集设置为零,取代了在 Dropout 中对每个层随机选择激活函数的子集设置为零的做法。由于每个单元接收来自过去层单元的随机子集的输入,Drop Connect 和 Dropout 都可以获得有限的泛化性能 [22]。Drop Connect 和 Dropout 相似的地方在于它涉及在模型中引入稀疏性,不同之处在于它引入的是权重的稀疏性而不是层的输出向量的稀疏性。
早停
早停法可以限制模型最小化代价函数所需的训练迭代次数。早停法通常用于防止训练中过度表达的模型泛化性能差。如果迭代次数太少,算法容易欠拟合(方差较小,偏差较大),而迭代次数太多,算法容易过拟合(方差较大,偏差较小)。早停法通过确定迭代次数解决这个问题,不需要对特定值进行手动设置。
Reference
https://www.cnblogs.com/callyblog/p/8094745.html