1.训练误差和泛化误差
训练误差:
指模型在训练数据集上表现出来的误差
泛化误差:
指模型在任意一个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的误差来近似
训练误差和泛化误差可以使用平方损失函数和交叉熵损失函数来进行计算
在机器学习里,通常假设训练数据集和测试数据集里的每一个样本都是从 同一个 概率分布中相互独立的生成的(IID分布)
基于该IID分布,给定任意一个机器学习模型(含参数:w,b),他的训练误差和泛化误差都是一样的。
如果将模型参数设置成随机值,则训练误差和泛化误差会非常相近。而模型经过在训练集上迭代更新得到的参数,是遵循最小训练误差原则的,
所以这种训练误差的期望是小于或等于泛化误差的(表现形式为train_acc>=test_acc),即由训练数据集上学习到的模型参数在训练数据集
上的表现由于或等于在测试数据集上的表现。 由于无法从训练误差估计泛化误差,所以一昧的降低训练误差不一定代表降低泛化误差
机器学习模型应该关注泛化误差
2. 模型选择:
在机器学习中们通常要评估各种模型的表现,从中选择模型。
可供选择的模型可以是有着不同超参数的同类模型,比如多层感知机可以选择隐藏层的个数,以及每个隐藏层中单元个数和激活函数。
验证数据集:
严格来讲,测试集只能在所有超参数和模型参数选定后使用一次。不可以使用测试数据选择模型,如调参。由于无法从训练误差
估计泛化误差,因此也不应该只依赖于训练数据选择模型。因此!!!可以预留一部分在训练数据集和测试数据集以外的数据来
进行模型选择,这部分数据被称为验证数据集,简称验证集。例如可以在训练集中抽取一小部分作为验证集,其余做训练集。
由于现实情况限制,一般测试集作为验证集,实验报告的测试结果(如测试准确率)应为验证结果(如验证准确率)
折交叉验证:
因为验证数据集不参与模型训练,所以预训练数据集不能留太多。
K折交叉验证(K-fold cross-validation)。在K折交叉验证中,把原始训练数据集分割成K个不重合的子数据集,然后
做K次模型训练和验证。每一次使用一个子数据集验证模型,并使用其余K-1个子数据集来训练模型。最后对K次训练误差和
验证误差分别求平均
3. 欠拟合和过拟合
欠拟合(underfitting):模型无法得到较低的训练误差
过拟合(overfitting):模型的训练误差远小于他在测试数据集上的误差
有很多因素导致这两个拟合问题,重点有模型复杂度和训练数据集大小
模型复杂度:
可以用K阶多项式来进行模型,一般K越大,即模型参数越多,模型复杂度也就越高。
一般地,对于给定训练数据集,如果模型复杂度过低(如一阶多项式函数,即|w|=1),很容易欠拟合;
如果模型复杂度过高,很容易出现过拟合。
应对欠拟合和过拟合的一个办法就是针对数据集选择合适复杂度的模型
训练数据集大小:
一般来说,如果训练数据集中样本数量过少,特别是比模型参数数量(按元素记)更少时,容易欠拟合。
泛化误差不会随着训练数据集里样本数量增加而增大。
所以当模型复杂度较高(比如层数较多的模型)时,训练数据集大一些更好
李沐深度学习-模型拟合,欠拟合,过拟合文档
最新推荐文章于 2024-07-21 07:50:37 发布