前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于防止过拟合,整理了 8 条迭代方向!

关于防止过拟合,整理了 8 条迭代方向!

作者头像
昱良
发布2019-07-04 21:15:16
8910
发布2019-07-04 21:15:16
举报
文章被收录于专栏:机器学习算法与Python学习

在给出如何防止/减弱过拟合之前,让我们先从一个实际的例子看看到底怎么才是过拟合

以MNIST数据集为例,shuffle出1000个sample作为train set,采用交叉熵损失和mini-batch随机梯度下降,迭代400epoch,将训练集合验证集的损失和准确率进行可视化,分别如下:

如如所示,随着训练的迭代,损失在训练集上越来越小,准去率趋于100%;反观验证集的效果,在15epoch左右,损失突然增大。这就是出现了过拟合的问题啦!

过拟合?怎么解决/弱化呢?本文将给出多种trick,同时也欢迎大家留言区补充。

1. 获取更多数据,这是最直观也是最有效的方式之一,有了足够的数据网络也不太容易过拟合了;

2. 数据增强,复制现有数据并加随机噪声(数据占比不能太高)、重采样等,在图像领域我们可以进行不同角度旋转、平移变换、随机裁剪、中心裁剪、模糊等;

3. 参数正则化(权值衰减)在损失和模型复杂度间进行折中,可以使用L1或L2,其中L1正则采用的是拉普拉斯先验,倾向于聚集网络的权值在相对少量的高重要连接上,而其他权重就会被趋向于0;而L2正则采用的是高斯先验;

4. Dropout,一种相当激进的技术,和正则化不同的是它不改变网络本身,而是会随机地删除网络中的一般隐藏的神经元,并且让输入层和输出层的神经元保持不变。每次使用梯度下降时,只使用随机的一般神经元进行更新权值和偏置,因此我们的神经网络时再一半隐藏神经元被丢弃的情况下学习的。这种技术的直观理解为:当Dropout不同的神经元集合时,有点像在训练不同的神经网络。而不同的神经网络会以不同的方式过拟合,所以Dropout就类似于不同的神经网络以投票的方式降低过拟合;

5. 选择合适的网络结构,这个比较好理解,就是通过减少网络层数、神经元个数、全连接层数等降低网络容量;

6. Early stopping,因为在初始化网络的时候一般都是初始为较小的权值,训练时间越长,部分网络权值可能越大。如果我们在合适时间停止训练,就可以将网络的能力限制在一定范围内;

7. 模型组合,Baggging &Boosting,将弱分类器融合之后形成一个强分类器,而且融合之后的效果会比最好的弱分类器更好;

8. BatchNormalization,一种非常有用的正则化方法,可以让大型的卷积网络训练速度加快很多倍,同时收敛后分类的准确率也可以大幅度的提高。BN在训练某层时,会对每一个mini-batch数据进行标准化(normalization)处理,使输出规范到N(0,1)的正太分布,减少了Internalconvariate shift(内部神经元分布的改变),传统的深度神经网络在训练是,每一层的输入的分布都在改变,因此训练困难,只能选择用一个很小的学习速率,但是每一层用了BN后,可以有效的解决这个问题,学习速率可以增大很多倍。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习算法与Python学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
批量计算
批量计算(BatchCompute,Batch)是为有大数据计算业务的企业、科研单位等提供高性价比且易用的计算服务。批量计算 Batch 可以根据用户提供的批处理规模,智能地管理作业和调动其所需的最佳资源。有了 Batch 的帮助,您可以将精力集中在如何分析和处理数据结果上。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档