在刚开始入门深度学习的时候,一提到欠拟合、过拟合,脑子自然会联想到那两幅曲线图,相信你们都知道我说的是哪两幅(手动狗头两个,请自行脑补)。可是在最近自己上手调代码的时候,对于这两个概念只能想到那两幅曲线图,想用语言描述一下,竟有些不知该云啥,遂有了这篇学习笔记。
欠拟合
欠拟合是指模型无法很好地拟合训练数据集中的规律和特征,导致在训练集和验证集上都表现较差的现象。欠拟合通常是由于模型过于简单,参数过少,或者训练数据集中的真实模式和规律复杂等原因导致的。
判断模型是否处于欠拟合阶段,可以通过以下几种方法:
-
观察训练误差和验证误差: 如果模型在训练集和验证集上的误差都较高,且没有明显的趋势改善,可能存在欠拟合现象。
-
绘制学习曲线: 绘制模型的学习曲线,观察训练误差和验证误差随训练轮次的变化情况。如果模型在训练集和验证集上的误差都很高,且没有明显下降趋势,则可能存在欠拟合现象。
解决欠拟合问题的方法包括:
-
增加模型复杂度: 增加模型的复杂度,例如增加神经网络的层数或神经元的数量,使得模型可以更好地拟合训练数据集中的规律和特征。
-
添加新特征: 增加训练数据集的特征数量,或者通过特征工程技术提取新的特征,使模型可以更好地捕捉数据中的规律和特征。
-
减小正则化: 如果使用了正则化技术,例如L1正则化、L2正则化或Dropout等,可能会限制模型的复杂度,导致欠拟合问题。在这种情况下,可以尝试减小正则化的程度,或者完全去除正则化。
-
增加训练数据集的样本数量: 增加训练数据集的样本数量,使模型可以更好地学习数据中的规律和特征,从而避免欠拟合问题。
过拟合
过拟合是指模型在训练过程中过度学习了训练数据集中的噪声和随机变化,导致在验证集或测试集上表现较差的现象。过拟合通常是由于模型过于复杂,参数过多,或者训练数据集过小等原因导致的。
出现过拟合的原因包括:
-
模型过于复杂: 模型具有过多的参数或复杂的结构,使得模型可以很好地拟合训练数据集中的噪声和随机变化,但在验证集或测试集上的泛化性能较差。
-
训练数据集过小: 训练数据集过小,无法很好地覆盖样本空间中的所有情况,导致模型无法很好地泛化到新的数据上。
-
数据标签噪声: 数据集中存在标签错误或噪声,使得模型学习到了错误的模式或规律。
-
特征过多: 特征数量过多,导致模型学习到了训练数据中的噪声和随机变化,而不是真正与目标变量相关的特征。
判断模型是否出现了过拟合,可以通过以下几种方法:
-
观察训练误差和验证误差: 当你查阅资料时,总能看到的一句话——如果模型在训练集上的误差较低,但在验证集或测试集上的误差较高,则可能存在过拟合现象。
-
绘制学习曲线: 绘制模型的损失曲线,观察训练误差和验证误差随训练轮次的变化情况。如果训练误差持续下降,但验证(测试)误差开始上升,则可能存在过拟合现象。在学习李沐老师的《动手学深度学习》课程(b站可看)时,他强调过很多次我们应该主要关注验证误差,训练误差基本没有意义。
如果发现模型出现了过拟合现象,可以通过以下方法来解决:
- 简化模型: 减少模型的复杂度,例如减少神经网络的层数或神经元的数量。
- 数据增强: 增加训练数据集的样本数量,或者通过数据增强技术生成新的训练样本,使模型更好地泛化到新的数据上。
- 正则化: 使用正则化技术,例如L1正则化、L2正则化或Dropout等,来减少模型的参数数量,防止模型过度拟合训练数据集中的噪声和随机变化。(沐神说在真正的大模型中,正则化其实收效甚微,但不代表没有效果嗷)
总结
综上,无论是过拟合还是欠拟合,都是模型与数据集不平衡的原因,就像门当户对的婚姻大概率更幸福一样。过拟合说明模型学习能力相较于当前的数据集过于强势,欠拟合则代表模型学习能力相较于数据集比较弱势。
tips:李沐老师说,根据他的经验在训练模型时,通常将模型先训练到有点过拟合的状态,再通过减缓过拟合的技术往回拉,这样模型的效果会更加好。(不幸的是,我还处于入门小白阶段,没有上手过比较大的项目,暂时还没有深刻体会到,不过还是选择将这句话记录在这,希望能帮助到看到此处的有缘人。)