随笔 - 383  文章 - 0  评论 - 0  阅读 - 35557 

欠拟合和过拟合

欠拟合是指在训练集和测试集(或验证集)上模型效果都不好,一般由于模型能力不足导致;过拟合是指模型在训练集上表现好,而在测试集上表现不好,一般由于模型过度拟合了训练集中的噪声导致。本文主要讨论解决过拟合问题的方法。

L2正则化

无论机器学习还是深度学习,L2正则化项都用于限制参数W过大,它被累加在代价函数之中。

代价函数J除了计算每个实例的误差L,还加入网络中每层参数W的2范数的平方,并用λ作为参数,当λ较大时,就需要W接近0,才能得到较小的代价函数,这样一些无关紧要的参数就变成了0,从而减少了模型的复杂度,以及压缩后模型的规模。另外,较小的W也使层之间传递的数据变小,这样在使用sigmoid和tanh激活函数时,数据刚好集中在中间类似线性变换的一段,使非线性变换的结果类似线性变换。由于多个线性组合叠加相当于单个线性层,因此也倾向于简化模型。

如果使用L1正则化,参数矩阵将变得稀疏,根据经验,一般L2效果更好。L2正则化方法可用于简化决策,但不适用于需要复杂决策的问题。使用该方法时,需要尝试多个λ值。

Dropout方法

Dropout方法是扔掉网络中的一些连接, 使结果不依赖于某个特定结点,从而构成更健壮的网络。

具体方法是将层中一定比例的参数置为0,反向传播时也不调节这些参数。需要注意的是,在调试和预测阶段一般不使用Dropout。如果在调试时也随机去掉连接,则不能保证每次实验结果一致,导致无法比较模型修改前后的效果,预测时则需要尽可能地使用网络功能,因此也不能去掉连接。

另外,如果手工实现Dropout功能还需要考虑补偿系数,例如在某层将20%的参数置0,导致训练时该层的输出与预测时的分布不一致,则需要在训练时将该层输出除以0.8。

归一化层

归一化层,也能在一定程度上缓解过拟合,它的原理与Dropout类似,都是引入噪声。比如Batch-Norm针对每个mini-batch计算均值和方差,而非对全体数据计算,相当于在训练集中加入了一些噪声,使得后面的层不过于依赖前层的某一单元。需要注意的是batch size越大,引入的噪声越小,正则效果也越差。

其它方法

还有一些方法也能缓解过拟合问题,如:

  • 增加训练数据,在数据不足时,加入变形后的数据(旋转、裁剪、水平翻转)。
  • Early stopping:当模型在验证集上不再下降时,停止迭代。
  • 修改模型结构:训练样本过小,模型参数过多也是造成过拟合的原因,可尝试修改模型结构。
posted on   xieyan0811  阅读(66)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示