【动手学深度学习】模型选择(训练数据,验证数据,测试数据,过拟合,欠拟合)

模型选择(训练数据,验证数据,测试数据,过拟合,欠拟合)
在使用深度学习解决问题时会用到三种不同的数据:训练数据、验证数据和测试数据
训练数据:用来训练模型,让我们的模型能够拟合住我们的训练数据,这个样本通常会大一些
验证数据:用来验证模型的准确率
测试数据:一般只用一次,当验证数据的结果还不错时,就可以使用测试数据来看一下这个模型的好坏了
为什么要有验证数据?
例如:训练多层感知机模型时,我们可能希望比较具有 不同数量的隐藏层、不同数量的隐藏单元以及不同的激活函数组合的模型。 为了确定候选模型中的最佳模型,我们通常会使用验证集。原则上我们在确定超参数的时候不能使用训练数据,因为我们如果过拟合了训练数据,还可以在测试数据上来评估过拟合,但是如果我们过拟合了测试数据,我们就没办法知道了。所以我们不能仅仅依靠训练数据或者测试数据来进行模型选择。解决此类问题的常见做法是我们将数据分成三份,除了训练集和测试集之外还有一个验证集。
当数据量较少时如何解决?
K折交叉验证
当训练数据比较稀缺,甚至可能无法提供足够的数据来构成一个合适的验证集,这个时候就有了K折交叉验证:原始训练数据集被分成K个不重叠的子集。然后执行K次模型训练和验证,每次在K-1个子集上进行训练,并在剩余的一个子集(在该轮中没有用于训练的子集)上进行验证。最后,通过对K次实验的结果取平均来估计训练和验证误差
拟合:给出一堆离散的点,要是能找到一个函数将他们串联起来,就是拟合
欠拟合:在训练集、验证集和测试集均表现不佳,欠拟合是指模型无法继续减少训练误差(训练误差:模型在训练集上计算得到的误差)
过拟合:在训练数据集上表现很好,但是在验证集和测试集上表现不佳,即模型的泛化能力差,是指训练误差远小于验证误差(泛化误差:型应用在同样从原始样本的分布中抽取的无限多数据样本时,模型误差的期望)
过拟合和欠拟合的通俗解释:
当数据不是很复杂的时候,比如具有线性特点的数据,却使用了非常复杂的模型,比如多层的神经网络,那么就会出现过拟合的情况,过拟合的情况会导致训练样本的误差可能会非常非常低,完全的学习到了训练样本的特征,但是一但去跑测试样本,当这个模型见到一个陌生的数据,那么他的误差可能就会很大。反过来,当数据非常复杂,比如一些非线性的情况,却使用了非常简单的模型,比如最基本的线性回归,那么就会出现欠拟合的情况,就是基本没有学习到训练样本的特征,这样的模型可能误差会非常高。那么我们所期望得到的模型应该是使用与数据复杂度相配的模型来解决问题。
过拟合的原因:
1.可调整参数的数量:当可调整参数的数量(有时称为自由度)很大时,模型往往更容易过拟合。
2.参数采用的值:当权重的取值范围较大时,模型可能更容易过拟合。
3.训练样本的数量:即使你的模型很简单,也很容易过拟合只包含一两个样本的数据集。而过拟合一个有数百万个样本的数据集则需要一个极其灵活的模型。
4.模型复杂度:对于简单的数据选取的模型过于复杂,比如隐藏层过多,隐藏层的神经元过多
如何解决过拟合?
1.权重衰退
2.Droupout

你可能感兴趣的:(动手学深度学习,深度学习,机器学习,人工智能)