深度学习9:过拟合问题

本文解释了过拟合现象,并介绍了正则化(包括L2正则化)和Dropout两种常用的方法来提升模型的泛化能力。通过权重衰减实现正则化,Dropout则通过随机丢弃神经元来训练更鲁棒的模型。
摘要由CSDN通过智能技术生成

一、什么是过拟合?

过拟合是指模型在训练数据上表现过于优秀,但对于新数据或测试数据的泛化能力较差的现象。简单来说,就是模型过度地拟合了训练数据中的细节和噪声,以至于无法很好地适应其他未知数据。
过拟合就像是一个学生为了应对考试,死记硬背了所有的题目和答案,但在考试中出现了一些新的、没背过的题目时,他就无法正确回答了。这是因为他的学习方式过于依赖训练数据(即题目和答案),而没有真正理解问题的本质和规律,因此无法很好地应对新的情况。

二、解决方式

为了避免过拟合,通常需要采用一些策略,如增加训练数据量、使用更复杂的模型结构、进行正则化等,以提高模型的泛化能力。

2.1 正则化

正则化是一个在机器学习中常用的技术,用于防止模型过拟合。简单来说,过拟合就是模型在训练数据上表现得过于优秀,但对于新数据或测试数据的预测能力却很差。正则化就是用来解决这个问题的。

假设小孩过于关注训练数据(你给他看过的猫的图片)中的特定细节,而忽略了更一般的特征(比如猫的形状、耳朵等)。正则化就相当于你告诉小孩,不要只关注那些特定的细节,而是要考虑更一般的特征。比如,你可以告诉他:“猫通常有四条腿,有尾巴,耳朵是三角形的。” 这样,即使他之前没有见过某种特定类型的猫,他也可以根据这些更一般的特征来识别新的动物。

在机器学习中,正则化通过在损失函数中添加一个额外的项来实现。这个额外的项会惩罚模型参数的过大值,从而鼓励模型找到更简单、更一般的解决方案,而不是过于复杂、只适用于训练数据的解决方案。通过这种方式,正则化可以帮助模型更好地泛化到新数据上。

所以,正则化就是一种方法,用来引导模型在训练过程中不仅关注训练数据,还要考虑更一般的规律,从而提高模型在新数据上的预测能力。

正则化的原理可以用一个简单的线性回归模型来说明。

假设我们有一个简单的线性回归模型:y = β0 + β1x1 + β2x2,其中y是因变量(预测目标),x1和x2是自变量(特征),β0、β1和β2是模型参数。我们的目标是找到最佳的β0、β1和β2,使得模型能够最好地拟合训练数据。然而,在拟合数据的过程中,我们可能会遇到过拟合的问题。过拟合意味着模型在训练数据上表现很好,但对于新数据(测试数据)的预测能力却很差。为了解决这个问题,我们可以使用正则化技术。

以L2正则化为例,我们在损失函数中添加一个正则化项,即:损失函数 = 原始损失函数 + λ * (β1^2 + β2^2)。这里的λ是一个正则化参数,用于控制正则化的强度。

添加这个正则化项后,我们在优化模型参数时不仅要考虑拟合训练数据的误差(原始损失函数),还要考虑权重系数β1和β2的大小。具体来说,如果β1或β2过大,正则化项的值就会很大,导致损失函数的值也很大。因此,在优化过程中,模型会倾向于选择较小的β1和β2,从而使得权重系数更加平滑,避免过拟合。

通过这种方式,正则化可以帮助我们找到一个既能够拟合训练数据,又具有良好泛化能力的模型。这就是正则化的基本原理。

2.2 Dropout

Dropout是一种常用的防止神经网络过拟合的方法。它的工作原理是在神经网络的训练过程中,按照一定的概率将一部分神经网络单元暂时从网络中丢弃,这样相当于从原始的网络中找到一个更“瘦”的网络。每次训练时,被丢弃的节点都是随机的,因此每次都在训练一个独特的模型。最终,这些不同的模型会集成在一起,但并不是通过平均它们的预测结果,而是将测试时的权重都乘上丢弃的概率。
Dropout原理可以同样用小孩分辨猫的简单例子来说明。每次你展示图片时,你都会随机地遮住图片中的一部分——可能是猫的眼睛、耳朵或者尾巴。这样,小孩在每次学习时都无法看到完整的猫的形象,他必须根据剩余的部分来推断这是一只猫。
****因为每次被遮住的部分都是随机的,小孩不能依赖于任何特定的特征来识别猫,他必须学会从多个不同的线索中综合判断。这实际上迫使小孩学习更一般的特征,比如猫的形状、毛色等,而不是只记住某个特定部分
通过这种方式,Dropout就像是在训练小孩的过程中增加了一些“噪音”或“干扰”。它帮助小孩学习更加鲁棒的特征,而不是仅仅依赖于某些细节。这样,即使在实际生活中,猫的形象有所变化或者某些部分被遮挡,小孩仍然能够准确地识别出猫来。
同样地,在神经网络中,Dropout也是通过随机地丢弃一部分神经元来工作的。这使得网络在训练过程中不会过于依赖某些特定的神经元,而是学习更加鲁棒和泛化的特征。通过这种方式,Dropout可以帮助神经网络避免过拟合,提高其在新数据上的预测能力。

三、代码实现

通过权重衰减(weight decay)来实现2-范数正则化。

optim = torch.optim.SGD(model.parameters(),lr=0.001,momentum = 0.9, weight_decay = 1e-2)
  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值