机器学习中的正则化(Regularization)

正则化的概念及原因

简单来说,正则化是一种为了减小测试误差的行为(有时候会增加训练误差)。我们在构造机器学习模型时,最终目的是让模型在面对新数据的时候,可以有很好的表现。当你用比较复杂的模型比如神经网络,去拟合数据时,很容易出现过拟合现象(训练集表现很好,测试集表现较差),这会导致模型的泛化能力下降,这时候,我们就需要使用正则化,降低模型的复杂度。

正则化的几种常用方法

  • L1 & L2范数

首先介绍一下范数的定义,假设 x是一个向量,它的 lp范数定义:
                                                          
在目标函数后面添加一个系数的“惩罚项”是正则化的常用方式,为了防止系数过大从而让模型变得复杂。在加了正则化项之后的目标函数为:
                                                         
式中, 是一个常数, m为样本个数, λ是一个超参数,用于控制正则化程度。

L1正则化时,对应惩罚项为 L1 范数 :
                                                  
L2正则化时,对应惩罚项为 L2 范数:
                                              
从上式可以看出,L1 正则化通过让原目标函数加上了所有特征系数绝对值的和来实现正则化,而L2 正则化通过让原目标函数加上了所有特征系数的平方和来实现正则化。

两者都是通过加上一个和项来限制参数大小,却有不同的效果:L1 正则化更适用于特征选择,而L2 正则化更适用于防止模型过拟合

让我们从梯度下降的角度入手,探究两者的区别。
为了方便叙述,假设数据只有两个特征即 w1,w2,考虑L1 正则化的目标函数:
                                                                             
在每次更新 w1时:
                                                              

若 w1为正数,则每次更新会减去一个常数;若 w1为负数,则每次更新会加上一个常数,所以很容易产生特征的系数为 0 的情况,特征系数为 0 表示该特征不会对结果有任何影响,因此L1 正则化会让特征变得稀疏,起到特征选择的作用。

现考虑L2 正则化的目标函数:
                                                    
在每次更新 w1时:
                                                      
从上式可以看出每次更新时,会对特征系数进行一个比例的缩放而不是像L1 正则化减去一个固定值,这会让系数趋向变小而不会变为 0,因此L2正则化会让模型变得更简单,防止过拟合,而不会起到特征选择的作用。
以上就是 L1,L2正则化的作用以及区别。

下面来看一个课程中的例子,当不使用正则化,发生过拟合时:

overfitting


使用 正则化,正常拟合

在这里插入图片描述


在图中可以有比较直观的感受是,过拟合时,分类边界的起伏会更大,也就是在部分点斜率更大,而正常拟合时,分类边界更加平缓。这也是为什么在目标函数中加入“惩罚项”可以达到正则化的效果,“惩罚项”可以使每个参数趋向更小,在求导时斜率也会更小,等于变相的让模型更加简单了,更加简单的模型当然更加不容易过拟合。

 

训练集增强

更大数量的训练集是提升机器学习模型泛化能力最好的方法。做一个不可能的假设,如果你的训练集包含了所有的你需要测试的数据,那么该模型的泛化能力将是100%(开个玩笑)。在实际项目中,获取训练数据的成本会很高,这时候就需要我们自己来“创造”数据。希望在以后,GAN可以成功的应用到训练集增强领域。
对于一些特定的场景,“创造”数据其实是很简单的,例如图像识别。下面有一张6,我们可以对他采用小幅旋转,平移,放大,缩小甚至给图片加上波动等方法,他的标签实际还是6,但是我们已经多了很多的训练数据。需要注意的是不应做翻转操作,因为6会翻转成9,这会变成一个错误的样本。

6本来的样子

旋转20度

6翻了变成9

dropout

dropout 是一种计算方便但功能强大的正则化方法,适用于最近很火的神经网络。他的基本步骤是在每一次的迭代中,随机删除一部分节点,只训练剩下的节点。每次迭代都会随机删除,每次迭代删除的节点也都不一样,相当于每次迭代训练的都是不一样的网络,通过这样的方式降低节点之间的关联性以及模型的复杂度,从而达到正则化的效果。这点上有点类似 bagging,但是远比 bagging 来的简单。

直观理解:

 

dropout之前(左)与dropout之后(右)

说dropout简单是因为你只需要设置一个超参数 keep_prob,这个参数的意义是每层节点随机保留的比例,比如将 keep_prob 设置为 0.7,那么就会随机30%的节点消失,消失这个动作其实很简单,只是将这一层的参数矩阵与根据 keep_prob 生成的 {0, 1} 矩阵做 逐点乘积,当然前向传播与反向传播都需要做以上的操作。

dropout的缺点在于,需要将训练集分为不同子集输入每一次的迭代,这就需要较大的训练集,所以在训练集较小的情况下,dropout的效果可能并不好。我们上面也说过,增大数据集是最好的正则化方式,所以在增大数据集的情况下,使用 dropout 需要使用的计算代价可能会比他带来正则化效果更高,这需要我们在实际使用场景中做取舍。

earlystopping

提前终止可能是最简单的正则化方式,他适用于模型的表达能力很强的时候。这种情况下,一般训练误差会随着训练次数的增多逐渐下降,而测试误差则会先下降而后再次上升。我们需要做的就是在测试误差最低的点停止训练即可。
下面还是一个DL课程中的例子,分别展示了训练1500次与2500次时的训练误差与测试误差:

训练1500次,测试集上的正确率是82%

训练2500次,测试集上的正确率是80%

 

可以看出随着训练次数的增加,训练误差会一直下降,而训练2500次的测试误差要高于训练1500次的测试误差,所以我们在1500次的时候停止会更好。

以上就是机器学习中常用的几种正则化方式,正则化在机器学习中占了很重的地位,在《deep learning》中介绍了更多的正则化方法,有兴趣的同学可以深入研究。


链接:https://www.jianshu.com/p/569efedf6985

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 正则化是一种用于限制模型复杂度的正则化技术,它使学习算法更健壮,更稳定,更可靠。它通过向模型添加附加项(正则化项),以降低模型复杂度。正则化项可以是L1正则化(Lasso正则化)或L2正则化(Ridge正则化)等。 ### 回答2: 在机器学习正则化是一种通过在模型的损失函数引入惩罚项来避免过拟合的技术。其原理是通过约束模型的复杂度,使得模型更加简单而具有较好的泛化能力。 正则化主要有两种形式:L1正则化和L2正则化。L1正则化引入了模型参数的绝对值之和作为惩罚项,即通过最小化损失函数和正则化项的和来寻找最优解。L2正则化则引入了模型参数的平方和作为惩罚项,即通过最小化损失函数和正则化项的和来寻找最优解。 正则化的原理是通过对模型参数进行约束,可以使得某些参数趋近于0,从而实现特征选择和降低模型复杂度的目的。L1正则化倾向于产生稀疏解,即只有部分参数非0,从而实现特征选择,有助于模型的解释性。而L2正则化则倾向于参数趋近于0而非完全为0,可以降低模型的复杂度,并避免过拟合。 正则化可以有效地控制模型的复杂度,在训练过程通过平衡拟合程度和模型复杂度来选择最优解。当正则化力度较大时,模型会更加关注减小正则化项,从而更加趋向于简单的模型。当正则化力度较小时,模型会更加关注拟合训练数据,可能导致过拟合。 总之,正则化机器学习用于避免过拟合、提高模型泛化能力的重要技术。通过限制模型的复杂度,正则化可以提高模型的性能和稳定性。 ### 回答3: 机器学习正则化是一种通过添加惩罚项来控制模型复杂度的技术。正则化的目的是防止模型过拟合(overfitting),即在训练数据上表现优秀但在新数据上表现较差的情况。 正则化的原理是在模型的损失函数,加入一个额外的惩罚项,以限制模型参数的取值范围。这个惩罚项可以是L1正则化(L1 regularization)或者L2正则化(L2 regularization)。 L1正则化通过在损失函数加入模型参数的绝对值之和乘以一个超参数lambda的惩罚项,使得模型参数趋向于稀疏化。通过L1正则化,可以使得模型自动选择重要的特征,并且减少不相关或冗余特征的影响。 L2正则化通过在损失函数加入模型参数的平方之和乘以一个超参数lambda的惩罚项,使得模型参数的取值更加平滑。通过L2正则化,可以减小模型参数的大小,并且降低模型对训练数据的噪声的敏感性。 正则化的原理是在训练模型时,通过调整惩罚项的权重,平衡拟合训练数据和控制模型复杂度之间的关系。正则化在一定程度上约束了模型的自由度,使得模型更加稳定、泛化能力更强,从而能够更好地适应新数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值