【深度学习】模型超参数选择/过拟合、欠拟合

一、模型超参数选择

1、训练误差和泛化误差

训练误差: 模型在训练集上的误差。
泛化误差: 模型在新数据集上的误差。

举个例子
把模型A和B比作两个学生A和B,学生A靠着老师教导+机械记忆进行学习,学生B靠着老师教导+深度理解本质进行学习。他们都完美做对了老师布置的课后作业。接下来让他俩连续考试1000次(每次考试都换花样来出题),你认为谁的平均分会高一点呢?
机械刷过题但是从来不好好总结知识不深度理解知识的学生,平均成绩肯定会比较差(博主高中的时候亲身体验过,现在感概颇深)。我们说这两个学生在老师+课后作业上的训练误差是一样的,在1000次考试中的泛化误差不一样。B的泛化误差更小,表现更好。我们更加关心泛化误差。

2、训练数据集、验证数据集和测试数据集

训练数据集:用来训练模型的数据集。
验证数据集:从训练数据集中单独抽出来(这一部分不再参与训练)的数据集。(可以用来调超参数)
测试数据集:全新的数据集(甚至不知道标签是什么),理论上只用一次,绝对不能使用这种数据集来调超参数。

3、模型超参数选择——N折交叉验证

当拿到一份训练集时,一般而言会将训练集划分为两部分——训练数据集和验证数据集。
当设置了超参数,想要在验证集上验证在超参数下模型的效果,可以这样做:

  • 首先将训练集分为n份
  • 先取第一份作为验证集,余下n-1份作为训练集进行训练,得到模型的损失。
  • 之后取第二份作为验证集,余下n-1份作为训练集进行训练,得到模型的损失。
  • 取第三份作为验证集,余下n-1份作为训练集进行训练,得到模型的损失。
  • ……
  • 最终,将n个损失求平均,就可以得到模型在设定的超参数下的损失了。

这种计算模型在设定超参数下的损失的方法称为N折交叉验证将训练集进行N等份划分,依次将第1,2,……,N-1,N份作为验证集,进行N次训练,最终将N个损失的平均作为模型在设定超参数下的损失。)通过这种方式可以更加充分利用数据集的信息,在设定的超参数下得到的平均损失才更有代表性。N一般取5或者10。

所以,选择超参数的方法为:设定不同组超参数,依次进行N折交叉验证,取平均损失最小的那一组超参数。

二、过拟合/欠拟合

1、模型容量

模型容量是指模型能够拟合各种函数的能力。低容量的模型难以拟合训练数据,高容量的模型可以轻松拟合训练数据。

举个例子
单层感知机对于XOR类型的数据而言是低容量的,它无法对这些数据进行拟合。
一个拥有1000个隐藏层的多层感知机,它对于XOR类型的模型而言是高容量的,它可以轻松记住所有训练数据,甚至可以完美贴合所有训练数据(即模型误差(损失)接近0)。
再举个例子
左边的线是低容量模型,右边的是高容量模型。
在这里插入图片描述

上面两个例子中的模型都不是很好。低容量模型训练误差无法保证,欠拟合了;高容量模型训练误差可以保证,但是它处于过拟合的状态,泛化误差无法保证。
我们的目的就是,在保证训练误差足够小的前提下,减小泛化误差。所以,模型容量首先要保证足够,再通过各种手段尽可能减小容量。

我们为什么这么不喜欢过拟合呢? 一方面,如果数据中有很多噪声,这个时候模型容量过高,训练出了一个过拟合的模型,那么可想而知,模型受到噪声影响会有多么大。这个模型在测试集上测试,效果估计是不太行的。另外一方面,如果一个模型在训练集上的损失将近为0,那么这个模型一定非常复杂(如果这个模型是一条曲线的话,它一定是疯狂折来折去,确保能经过每一个样本点),这种情况下我们输入一个测试样本,它为了迎合训练集而产生的复杂参数在测试样本上将会产生严重的判断失误。

估计模型容量:

  • 模型参数个数
  • 模型参数值的选择范围(参数值可选择的范围越大,模型容量就越大。)

2、数据复杂度

一份数据集的复杂度可以由以下几个方面:

  • 数据样本个数
  • 样本中元素的个数
  • 时间、空间结构
  • 数据多样性

模型容量需要匹配数据复杂度,不然会出现欠拟合和过拟合。

3、什么时候下会产生过拟合

模型容量超过了数据的复杂度。其中一种情况是模型参数取值过大。模型取值范围大同样可以训练出一个泛化能力强的模型,但是出现过拟合的几率也大大提升了(可以选择的变多了,自然就选了一个让损失最小的,但是这样有可能只是在迎合训练集),所以最好限制一下参数的范围。

4、简单判断过拟合和欠拟合

实际中,我们使用观察训练误差和验证误差的方式来判断模型是否产生了过拟合或者欠拟合。一般而言,训练误差和验证误差都是一直下降的。

  • 如果出现了欠拟合,训练误差和验证误差会在非常少的epoch内不再下降,而且此时loss仍然很大。
  • 如果出现了过拟合,训练误差会一直下降,但是验证误差会先下降,在某个拐点突然上升(此时训练的模型已经过拟合,在训练集上表现良好,但是在验证集上误差变大了)。
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值