过拟合与欠拟合

1. 过拟合

1.1 什么是过拟合?

学习时选择的模型所包含的参数过多(由于一味追求对训练数据的拟合,导致模型过于复杂),以致于出现这一模型对已知数据预测得很好,但对未知数据预测的很差的现象,即泛化能力比较弱。

lossauc
tain减少升高
test增加降低

训练误差持续降低,测试误差却在上升,auc相差2个百分点即为过拟合。

1.2 产生原因

1. 使用的model过于复杂,泛化能力差;

2. 数据的noise太大;

3. 训练数据有限。

1.3 解决方案

1.3.1 数据集扩增

基于Bootstrap重采样原理,在原始数据集上做一些改动,如图片旋转、缩放、剪切、添加噪声等。

1.3.2 减少选取特征的数量

(1)人工选择

(2)算法选取

1.3.3 正则化(regularization)

在损失函数中增加一个用于描述模型复杂度的部分,如权重与阈值的平方和。

L1使网络中的W尽可能为0,相当于减少了网络复杂度,L2则是增加了惩罚项。

1.3.4 早停(early stopping)

将数据分成训练集和验证集,训练集用来计算梯度、更新连接权重和阈值,验证集用来估计误差,若训练集误差降低但验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权重和阈值。

1.3.5 去除噪音数据

数据清洗

1.3.6 droupout

在训练过程中随机使一定比例(0.5)的神经元失活。

Droupout原理(是一种正则化的方法)

当一组训练数据经过某一层神经元的时候,随机使这一层上的部分神经元失活,让数据只经过一部分神经元计算。

相当于在不同的神经网络上进行训练,这样就减少了神经元之间的依赖性,对于同一组训练数据,利用不同的神经网络之后,求其输出的平均值可以减少overfitting。

对参数W的训练进行球形限制(max-normalization),对dropout的训练非常有用。

1.3.7 soft weight sharing

权重共享

1.3.8 使用验证集

Validation data 就是用来避免过拟合的,在训练过程中,通常用它来确定一些超参数,如根据验证集上的auc来确定early stopping的epoch大小。

     如果在testing data上做这些,那么随着训练的进行,我们的网络实际上就是在一点点的overfiting我们的test data,导致最后得到的test acc 没有任何参考意义。

2. 欠拟合

2.1 定义

模型在训练和预测时都表现不好的情况(即在训练数据和未知数据上表现都很差)。

2.2 解决方案

1. 添加其他特征项(组合|泛化|相关性);

2. 添加多项式特征;

3. 减少正则化参数。

3. 参数寻优----全局最小

通常采用以下策略来试图“跳出”局部极小,从而进一步接近全局最小。

(1) 以多组不同参数值初始化多个神经网络,训练后,取其中误差最小的解作为最终参数。

相当于从多个不同的初始点开始搜索,这样就可能陷入不同的局部极小,从中进行选择有可能获得更接近全局最小的结果。

(2) 使用“模拟退火”技术,在每一步都以一定的概率接受比当前解更差的结果,从而有助于“跳出”局部极小。

在每步迭代过程中,接受“次优解”的概率要随着时间的推移而逐渐降低,从而保证算法稳定。

(3) 使用随机梯度下降,SGD在计算梯度时加入了随机因素,所以即便陷入了局部极小点,其计算出的梯度仍可能不为0,这样就有机会跳出局部极小继续搜索。

(4) 遗传算法也常用来训练NN以更好地逼近全局最小。

备注: 以上用于跳出局部极小的技术大多是启发式,理论上尚缺乏保障。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值