深度学习中“过拟合”的产生原因和解决方法
过拟合定义:模型在训练集上的表现很好,但在测试集和新数据上的表现很差。
训练集上的表现 | 测试集上的表现 | 结论 |
不好 | 不好 | 欠拟合 |
好 | 不好 | 过拟合 |
好 | 好 | 适度拟合 |
原因
训练数据集太小,过拟合出现的原因:
- 模型复杂度过高,参数过多
- 训练数据比较小
- 训练集和测试集分布不一致
- 样本里面的噪声数据干扰过大,导致模型过分记住了噪声特征,反而忽略了真实的输入输出特征
- 训练集和测试集特征分布 或 标签对应关系 不一样(如果训练集和测试集使用了不同类型的数据集会出现这种情况)
解决方案
1、降低模型复杂度
处理过拟合的第一步就是降低模型复杂度。为了降低复杂度,我们可以简单地移除层或者减少神经元的数量使得网络规模变小。与此同时,计算神经网络中不同层的输入和输出维度也十分重要。虽然移除层的数量或神经网络的规模并无通用的规定,但如果你的神经网络发生了过拟合,就尝试缩小它的规模。
2、增加更多数据:使用更大的数据集训练模型
3、数据增强
使用数据增强可以生成多幅相似图像。这可以帮助我们增加数据集规模从而减少过拟合。因为随着数据量的增加,模型无法过拟合所有样本,因此不得不进行泛化。计算机视觉领域通常的做法有:翻转、平移、旋转、缩放、改变亮度、添加噪声等等,音频数据增强方法有:增加噪音、增加混响、时移、改变音调和时间拉伸
4、正则化
在损失函数后面加一个正则化项,常见的有L1正则化和L2正则化
L1惩罚项的目的是使权重绝对值最小化。公式如下:
L2惩罚项的目的是使权重的平方最小化。公式如下:
以下表格对两种正则化方法进行了对比:
L1正则化 | L2正则化 |
1. L1惩罚权重绝对值的总和 | 1. L2惩罚权重平方和的总和 |
2. L1生成简单、可解释的模型 | 2. L2正则化能够学习复杂数据模式 |
3. L1受极端值影响较小 | 3. L2受极端值影响较大 |
如果数据过于复杂以至于无法准确地建模,那么L2是更好的选择,因为它能够学习数据中呈现的内在模式。而当数据足够简单,可以精确建模的话,L1更合适。对于我遇到的大多数计算机视觉问题,L2正则化几乎总是可以给出更好的结果。然而L1不容易受到离群值的影响。所以正确的正则化选项取决于我们想要解决的问题。
5、dropout
dropout 是一种避免神经网络过拟合的正则化技术。像L1和L2这样的正则化技术通过修改代价函数来减少过拟合。而丢弃法修改神经网络本身。它在训练的每一次迭代过程中随机地丢弃神经网络中的神经元。当我们丢弃不同神经元集合的时候,就等同于训练不同的神经网络。不同的神经网络会以不同的方式发生过拟合,所以丢弃的净效应将会减少过拟合的发生。
如上图所示,丢弃法被用于在训练神经网络的过程中随机丢弃神经网络中的神经元。这种技术被证明可以减少很多问题的过拟合,这些问题包括图像分类、图像切割、词嵌入、语义匹配等问题。
6、早停
如上图所示,在几次迭代后,即使训练误差仍然在减少,但测验误差已经开始增加了。
7、重新清洗数据:把明显异常的数据剔除
8、使用集成学习方法:把多个模型集成在一起,降低单个模型的过拟合风险
9、批量正则化(BN)
就是将卷积神经网络的每层之间加上将神经元的权重调成标准正态分布的正则化层,这样可以让每一层的训练都从相似的起点出发,而对权重进行拉伸,等价于对特征进行拉伸,在输入层等价于数据增强。注意正则化层是不需要训练。
参考
【文章】深度学习—过拟合问题
作者:凌逆战
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。
本文章不做任何商业用途,仅作为自学所用,文章后面会有参考链接,我可能会复制原作者的话,如果介意,我会修改或者删除。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?