ps: 本文文字摘自网络
在解决实际问题的过程中,我们会倾向于用复杂的模型来拟合复杂的数据,但是使用复杂模型会产生过拟合(overfitting)的风险,而正则化就是常用的减少过拟合风险的工具之一。
过拟合是指模型在训练集上误差很小,但是在测试集上表现很差(即泛化能力 [generalization ability] 差),过拟合的原因一般是由于数据中存在噪声或者用了过于复杂的模型拟合数据,而模型却过于复杂,过分地拟合噪声(noise)和异常值(outliers)。
在训练数据不够多时,或者overtraining时,常常会导致overfitting(过拟合)。其直观的表现如下图所示,随着训练过程的进行,模型复杂度增加,在training data上的error渐渐减小,但是在验证集上的error却反而渐渐增大——因为训练出来的网络过拟合了训练集,对训练集外的数据却不work。
为了防止过拟合,可以用的方法有很多。
有一个概念需要先说明,在机器学习算法中,我们常常将原始数据集分为三部分:(1)training data、(2)validation data,(3)testing data。这个validation data是什么?它其实就是用来避免过拟合的,在训练过程中,我们通常用它来确定一些超参数(比如根据validation data上的accuracy来确定early stopping的epoch大小、根据validation data确定learning rate等等)。那为啥不直接在testing data上做这些呢?因为如果在testing data做这些,那么随着训练的进行,我们的网络实际上就是在一点一点地overfitting我们的testing data,导致最后得到的testing accuracy没有任何参考意义。因此,training data的作用是计算梯度更新权重,validation data如上所述,testing data则给出一个accuracy以判断网络的好坏。
避免过拟合的方法有很多:
- 提前退出(early stopping);
- 数据集扩增(Data augmentation);
- 正则化(Regularization)包括L1、L2(L2 regularization也叫weight decay);
- dropout.
正则化的作用:
控制参数幅度,不让模型过于复杂
限制参数搜索空间
接下来简单介绍L1正则化和L2正则化:
L1正则化和L2正则化可以看做是损失函数的惩罚项。所谓『惩罚』是指对损失函数中的某些参数做一些限制。对于线性回归模型,使用L1正则化的模型建叫做Loss回归,使用L2正则化的模型叫做Ridge回归(岭回归)。下图是Python中Loss回归的损失函数,式中加号后面一项
α
∣
∣
w
∣
∣
1
alpha ||w||_1
α∣∣w∣∣1即为L1正则化项;
Ridge回归的损失函数,式中加号后面一项
α
∣
∣
w
∣
∣
2
2
alpha||w||_2^2
α∣∣w∣∣22即为L2正则化项。
最后再补充一个角度:正则化其实就是对模型的参数设定一个先验,这是贝叶斯学派的观点。L1正则是拉普拉斯先验,l2是高斯先验,分别由参数
σ
sigma
σ确定。在数据少的时候,先验知识可以防止过拟合。
举两个最简单的例子。
-
抛硬币,推断正面朝上的概率。如果只能抛5次,很可能5次全正面朝上,这样你就得出错误的结论:正面朝上的概率是1——过拟合!如果你在模型里加正面朝上概率是0.5的先验,结果就不会那么离谱。这其实就是正则。
-
最小二乘回归问题:加L2范数正则等价于加了高斯分布的先验,加L1范数正则相当于加拉普拉斯分布先验。
文字来源
[1] https://www.julyedu.com/question/big/kp_id/23/ques_id/988
[2] 正则化为什么能防止过拟合:https://www.cnblogs.com/alexanderkun/p/6922428.html
[3] 机器学习中使用正则化来防止过拟合是什么原理?https://www.zhihu.com/question/20700829
[4] 机器学习中正则化项L1和L2的直观理解:https://blog.csdn.net/jinping_shi/article/details/52433975
最后
以上就是幽默老师最近收集整理的关于【笔记】为什么需要正则化?文字来源的全部内容,更多相关【笔记】为什么需要正则化内容请搜索靠谱客的其他文章。
发表评论 取消回复