机器学习-过拟合

这一节其实不应该放在这里记录的,
但我本来想在这一章提正则化,索性就把欠拟合和过拟合记录一下~

什么是欠拟合与过拟合

首先我们明确一下,什么是欠拟合,什么是过拟合
简单来说,欠拟合就是你学的不够多,并没有学到足够的或者说准确的数据之中的联系。过拟合就是你学的太多了,学到训练样本独有的(或者说是训练样本的噪声的特性也被你学进去了)
所以这么一看,对于欠拟合的解决方法就是多学一点,过拟合的解决方法就是少学一点。
事实上,在实际工作中几乎所有的方法都是想做到这两点:让过拟合的少学,让欠拟合的多学。

过拟合的解决方法

1.正则项

什么是正则项呢?正则项可以认为是,我们在为了降低模型复杂度而在损失函数中对过于复杂的模型进行惩罚的部分。或者也可以这么理解,我们把模型的复杂度视作是一个我们需要考虑的特征,从而它也是损失函数的一部分。(这只是我的理解)
那么添加上正则项为什么就能减少过拟合呢?根据奥卡姆剃刀原则,相同效果(或者相近效果的情况下)模型是越简单越好。我们把过拟合视作是学到了一个过于复杂的模型,那么减少模型的复杂程度,自然而然就能够降低过拟合度。
那什么样的惩罚项才能称作是正则项呢,事实上不同的模型,他的正则项也不是特别一样,
比如说树模型,树的节点的数量就是正则项(xgboost甚至除了节点数还加上了树节点的值),前篇说到的线性回归,就有什么经典的L1和L2作为正则项。
总的来说,正则项就是将经验风险最小化变成了结构风险最小化(经验风险最小化就是指不加正则项的模型,这样学到的模型它是最接近训练数据的,结构风险最小化就是考虑了模型的复杂度进行正则,这样学到的模型除了考虑训练数据,还考虑到了模型的复杂程度)
结构风险最小化表述为:
在这里插入图片描述
接下来我们就聊聊,正则项里面最经典的L1和L2正则项
在提这两个之前,我先说一下什么范数
范数就是
在这里插入图片描述
这有点像什么呢,没错,闵可夫斯基距离的度量(虽然是和0的)
首先来看L0正则项,L0正则项的含义是,如果一个参数非0得到的收益不足某个阈值,那么增加这样的复杂度是得不偿失的,就令这个参数为0,但是L0正则项非连续,非凸,不可求导的特点,非常难求解。
因此我们考虑L0范数最紧的凸放松:L1范数。
L1范数是什么呢,绝对值,那加上绝对值之后,有什么特点呢,
我们试着利用梯度下降法去更新参数看一看,
在这里插入图片描述
在这里插入图片描述
注:这里可以看出L1正则项的加入,会让参数的更新逐步趋向于0,这样就可以实现参数的稀疏化,因此L1正则也具有特征选择的作用。

同样的道理,L2正则项更新参数之后,在这里插入图片描述
可以看到L2正则项,使得参数的权值趋向于0
在周志华老师的西瓜书中,有这样一张图在这里插入图片描述从等高线的角度,我们可以发现,L1倾向于使得参数更接近坐标轴,也就是使得参数为0,而,L2更倾向于使得参数更平均,使得参数在零附近更加稠密且平滑。

从贝叶斯的角度来说,正则化等价于对模型参数引入先验分布
在上一章我们推出线性回归时,说最小平方损失函数是为了让数据到直线的距离最小化,事实上,我们还有一种推出最小平方损失函数的方法。
根据中心极限定理,大量独立随机变量之和近似于正态分布,我们把误差视作是各种各样的随机变量之和,那么误差也应该满足正态分布
在这里插入图片描述
我们定义误差是预测的y值和真实的y值只差
就可以通过最大似然估计推导出最小平方损失函数
如果我们定义一个先验分布(0均值的高斯先验)
我们知道,现在的最大似然估计即是
在这里插入图片描述
同样步骤之后,我们会发现,最后得到的损失函数是原损失函数加上L2正则(我们称作Ridge Regression 岭回归)
同样的道理,我们如果给定的先验分布式拉普拉斯分布,那么得到的结果就是L1正则(也就是LASSO回归)
拉普拉斯分布如下:
在这里插入图片描述
在实际中L2正则的表现往往优于L1正则,但是L1正则会大大减少计算量
至此正则部分就基本讲完了。

2.数据集扩充

数据集扩充是一个神奇的东西,因为吧,过拟合和欠拟合的解决办法都有数据集扩充,当然他们两个的适用情况是不一样的。
我们知道,过拟合是由于学到了仅属于训练集的特征(或者称之为噪声),只要能提供更多的数据集,就有可能避免这一点,毕竟其它数据不具有训练集所独有的特点
数据集扩充也有很多方法
1.直接获取更多的数据(在工业中,这种方法最为直接,但也需要消耗一定的人力财力)
2.根据当前数据集生成:根据当前的数据集估计数据分布参数,使用该分布产生更多的数据,不过这一般不用,因为当前数据集估计的分布也含有抽样误差。
3.数据增强:通过一定的规则扩充数据,如变换尺度,改变位置等等

3.早停法

这种方法就是指,我们不需要训练集误差函数下降到极小值才停止迭代,我们可以提前结束。
每一次迭代后计算训练集和验证集的错误率,当验证集的错误率最小的时候,停止训练。虽然训练集误差还能降低,但是验证集已经开始上升了,为了获得更好的泛化模型~早停也不无不可
当然在实际工作中,每次Epoch(一个Epoch就是对所有训练数据的一次遍历)我们记录目前最好的accuracy ,如果连续10次Epoch都没达到最好的accuracy,我们早停。

优化网络结构

对于神经网络而言,减少网络层数或者减少神经元个数,都可以限制网络的拟合能力。当然Dropout也是一个优化结构的trick,我们在训练时,每次随机忽略隐层的某些节点,相当于使用了多种不同的网络结构进行拟合。

多种模型结合

Bagging就是一个典型的方法,通过多种模型进行vote决定最后的输出,比如说Random Forest

增加噪声

1.输入增加噪声,输入增加噪声,会在输出中添加权值的干扰项,这样在训练时会对权值进行衰减,起到了L2正则的作用。
2.权值增加噪声,初始化网络的时候,用0均值的高斯分布作为初始化
3.对网络的响应增加噪声,但是这是一种乱来的办法,如前向传播中,让某些神经元的输出变为binary 或 random 。显然,这种方法会打乱网络的训练过程,让训练更慢。但是Hinton说,测试集效果会有显著提升

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值