那就从过拟合与欠拟合说起

过拟合与欠拟合

写在最前面:前段时间在电脑上发现了许多学习笔记和实验记录,秉承着人人为我,我为人人的思想。陆续会放出来供大家参考指正。同时也感谢前辈们对开源项目做出的贡献。
基础

方差:度量同样大小的训练集的变动所导致的学习性能的变化,刻画了数据扰动所造成的影响。

偏差:度量学习算法的期望预测与真实结果的偏离程度,刻画学习算法本身的拟合能力。
在这里插入图片描述

噪声:当任务上任何学习算法所能达到的期望泛化误差的下界,刻画了学习问题本身的难度。
图为:方差-偏差-噪声
方差-偏差-噪声
交叉验证法:将数据集划分为k个大小相似的互斥子集,每个子集都尽可能保持数据分布一致,即从数据中通过分层采样得到,然后每次用k-1个子集的并集作为训练集余下的做测试。重复上边过程可以得到k个结果最后返回k个评测中误差最小的模型。例如S折交叉验证。

过拟合

什么是过拟合?
直观的理解就是太注重细节以至于本末倒置,将一些干扰也作为判断的标准。引用西瓜书中的描述:“当学习器把训练 样本学的‘太好了’的时候,可能把已经训练样本自身的一些特点当做了所有潜在的样本都会具有的一般性质,这样就对 导致泛化性能下降,这种现象叫做过拟合”。具体表现为损失曲线呈现一种高方差状态。

为什么出现过拟合?

  1. 模型复杂度:模型过于复杂,把噪声数据的特征也学习到模型中,导致模型泛化性能下降。
  2. 数据集规模:数据集规模相对模型复杂度来说太小,使得模型过度挖掘数据集中的特征,把一些不具有代表性的特征也学习到了模型中。例如训练集中有一个叶子图片,该叶子的边缘是锯齿状,模型学习了该图片后认为叶子都应该有锯齿状边缘,因此当新数据中的叶子边缘不是锯齿状时,都判断为不是叶子。

如果模型过拟合如何解决?

1.交叉验证:通过交叉验证可以得到较优的模型,比如S折交叉验证。

2.增加训练数据:这是最有效的策略,直观上可以理解有更多的样本能够让模型学习到更多的有效特征,减少噪声的影响。

  • 方法1:数据增强技术,例如图像的平移、旋转、缩放、填鸭式等。
  • 方法2:用生成式对抗网络GAN合成大量的新训练数据
  • 方法3:迁移学习:使用已经在更大规模的源数据集上训练好的模型T参数来初始化要训练的模型A,这样模型A往往更快的收敛。但是源数据集中的场景要跟目标域数据集的场景要相近,差异过大则会效果变差具体要看实验结果。

3.正则化:正则化策略是以增大训练误差为代价来减少测试误差的所有策略。换句话说就是正则化是为了防止模型过拟合。L2范数就是最常用的正则化方法之一,L2正则化将权值大小加入到损失函数中,根据朗姆剃刀原理拟合效果相近的情况下模型复杂度越低越好。

L2正则化策略的公式推掉如下:

​ 设模型函数为:

y = W 1 X 1 + W 2 X 2 + b y=W_1X_1 + W_2X_2+b y=W1X1+W2X2+b

W 1 , W 2 W1,W_2 W1,W2分别表示两个自变量的权重,引入L2正则项之前,损失函数为:

J ( w ) = 1 2 m [ ∑ i = 1 m ( w i x i + b − y ) 2 ] J(w)=\frac{1}{2m}[\sum_{i=1}^m(w_ix_i +b-y)^2] J(w)=2m1[i=1m(wixi+by)2]

引入L2正则项后:

j ’ ( w ) = 1 2 m [ ∑ i = 1 m ( w i x i + b − y ) 2 + λ ∑ i = 1 m w i 2 ] j^{’}(w)=\frac{1}{2m}[\sum_{i=1}^m(w_ix_i +b-y)^2+\lambda\sum_{i=1}^mw_i^2] j(w)=2m1[i=1m(wixi+by)2+λi=1mwi2]

= j ′ ( w ) = J ( w ) + 1 2 m λ ∑ i = 1 m w i 2 =j^{'}(w)=J(w)+\frac{1}{2m}\lambda\sum_{i=1}^mw_i^2 =j(w)=J(w)+2m1λi=1mwi2

对w参数求偏导:

可以发现加入正则项后w相比原来的在减小即靠近0

​ 4.降低模型复杂度:在深度学习中可以通过减少网络的层数使用参数量更少的模型(模型强量化中设计一个小型的网 络);在ML的决策树模型中可以降低树的高度、剪枝等操作。

​ 5.提前终止:Early stopping是一种迭代次数截断的方法,在模型对训练数据集迭代收敛之前停止迭代来防止过拟合。 (具体理论可以参见花树)

具体步骤:在每一个Epoch结束时计算 validation data的accuracy,当accuracy不再提高是就停止训练。对于不在提高的定义:引入耐心值P,当前最优accuracy为V,当前Epoch的accuracy为V’。J为V’<V的次数,如果V’<V则J+1否则J=0。当J>=P时结束训练。

6.集成学习方法:集成学习是把多个模型集成在一起从而降低单个模型的过拟合风险。如Bagging方法。

具体步骤:首先对原始的m个训练样本进行有放回随机采样,构建N组m个样本的数据集,然后分别用N组数据集取训练DNN模型。即采用前向传播算法和反向传播算法得到的N个DNN模型的w、b参数组合。最后对N个DNN模型的输出用加权平均或者投票法决定最中输出。

集成学习将单个模型扩展为N个模型降低过拟合风险,但也把参数增加了N倍从而导致训练模型的代价增加。所以一般N的个数不能太多。N=5~10为最佳

7.Dropout:在训练模型时,随机失活一批神经元导致训练过程中不会每次都更新,最终的结果是每个神经元的权重w都不会更新的太大,起到了类似L2正则化的作用降低过拟合风险。在测试时不会dropout(pytorch中进行的优化,详见实验部分)

欠拟合

​ 理解了上边的过拟合下面介绍欠拟合。

什么是欠拟合:模型无论是在训练集还是在测试集上的表现都很差,损失曲线呈现一种高偏差状态。

为什么会出现欠拟合

  1. 模型过于简单:简单模型的学习能力比较差
  2. 提取的特征不好:当特征不足或者现有特征与样本标签的相关性不强时,模型容易出现欠拟合

如何解决欠拟合:

  1. 增加模型复杂度:如线性模型增加高次项改为非线性模型、在神经网络模型中增加网络层数或者神经元个数、深度学习中改为使用参数量更多更先进的模型等等。
  2. 增加新特征:特征工程(需要进一步研究)
  3. 降低正则项系数:如果损失函数中加了正则项,可以考虑减小正则项的系数 λ \lambda λ

过拟合-欠拟合-期望模型

实验 欢迎start
参考sudop

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值