避免过拟合

欠拟合和过拟合

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

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:当模型在验证集上不再下降时,停止迭代。
  • 修改模型结构:训练样本过小,模型参数过多也是造成过拟合的原因,可尝试修改模型结构。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值