深入浅出——搞懂卷积神经网络的过拟合、梯度弥散、batchsize的影响的问题
深入浅出-搞懂卷积神经网络过拟合
第一个问题模型过拟合
1. 什么是过拟合
所谓过拟合(Overfit),是这样一种现象:一个假设在训练数据上能够获得比其他假设更好的拟合,但是在训练数据外的数据集 上却不能很好的拟合数据。此时我们就叫这个假设出现了overfit的现象。
如上图所示:过拟合,就是拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。
过拟合造成的原因
过拟合其中一个可能的成因就是模型的vc维过高,使用了过强的模型复杂度(model complexity)的能力。(参数多并且过训练)
还有一个原因是数据中的噪声,造成了如果完全拟合的话,也许与真实情景的偏差更大。
最后还有一个原因是数据量有限,这使得模型无法真正了解整个数据的真实分布。
权值学习迭代次数足够多(Overtraining),拟合了训练数据中的噪声和训练样例中没有代表性的特征。过拟合解决方法:
1.权值衰减
在每次迭代过程中以某个小因子降低每个权值,这等效于修改E的定义,加入一个与网络权值的总量相应的惩罚项,此方法的动机是保持权值较小,避免weight decay,从而使学习过程向着复杂决策面的反方向偏。(L2正则化)
2.适当的stopping criterion(验证集)
3.Cross-validation with some patterns
交叉验证方法在可获得额外的数据提供验证集合时工作得很好,但是小训练集合的过度拟合问题更为严重
k-fold交叉方法:
把训练样例分成k份,然后进行k次交叉验证过程,每次使用不同的一份作为验证集合,其余k-1份合并作为训练集合.每个样例会在一次实验中被用作验证样例,在k-1次实验中被用作训练样例;每次实验中,使用上面讨论的交叉验证过程来决定在验证集合上取得最佳性能的迭代次数n*,然后计算这些迭代次数的均值,作为最终需要的迭代次数。
4.正则化
这里有点疑问,正则化是为了防止过拟合还是为了解决过拟合。对部分无用的feature,定义其parameter(p3,p4)非常大,这样会导致训练结果w3,w4非常小,几乎为0,降低模型复杂度。
关于正则化具体的解释请移步到参考的另一篇博文中:
( http://blog.csdn.net/u010402786/article/details/49592239)
第二个问题:数据集不平衡
不平衡训练集会对结果造成很大的负面影响,而训练集在平衡的情况下,能够达到最好的performance。
- 训练数据分布情况对CNN结果产生很大影响;
- 平衡的训练集是最优的,数据越不平衡,准确率越差;
- 如何提升准确率(使用Oversampling)
相关论文是:
《The Impact of Imbalanced Training Data for Convolutional Neural Networks》
第三个问题:Batchsize的影响
Batch_Size三种情况
Batch_Size(批尺寸)是机器学习中一个重要参数。
①如果数据集比较小,完全可以采用全数据集 ( Full Batch Learning )的形式,这样做至少有 2 个好处:其一,由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。其二,由于不同权重的梯度值差别巨大,因此选取一个全局的学习率很困难。
②Batch_Size = 1。这就是在线学习(Online Learning)。使用在线学习,每次修正方向以各自样本的梯度方向修正,横冲直撞各自为政,难以达到收敛。
③如果网络中采用minibatch SGD算法来优化,所以是一个batch一个batch地将数据输入CNN模型中,然后计算这个batch的所有样本的平均损失,即代价函数是所有样本的平均。而batch_size就是一个batch的所包含的样本数,显然batch_size将影响到模型的优化程度和速度。mini batch只是为了充分利用GPU memory而做出的妥协 。改变Batch_Size的影响
在合理范围内,增大 Batch_Size 的好处:内存利用率提高了,大矩阵乘法的并行化效率提高。跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。
下面是参考文献中博主给出的实验结果:
Batch_Size 太小,算法在 200 epoches 内不收敛。
随着 Batch_Size 增大,处理相同数据量的速度越快。
随着 Batch_Size 增大,达到相同精度所需要的 epoch 数量越来越多。
由于上述两种因素的矛盾, Batch_Size 增大到某个时候,达到时间上的最优。
由于最终收敛精度会陷入不同的局部极值,因此 Batch_Size 增大到某些时候,达到最终收敛精度上的最优。Minibatch简谈
首先说一下采用mini-batch时的权重更新规则。比如mini-batch size设为100,则权重更新的规则为:
也就是将100个样本的梯度求均值,替代online learning方法中单个样本的梯度值:
当采用mini-batch时,我们可以将一个batch里的所有样本放在一个矩阵里,利用线性代数库来加速梯度的计算,这是工程实现中的一个优化方法。
一个大的batch,可以充分利用矩阵、线性代数库来进行计算的加速,batch越小,则加速效果可能越不明显。当然batch也不是越大越好,太大了,权重的更新就会不那么频繁,导致优化过程太漫长。
第四个问题:梯度弥散
- 梯度弥散的解释
梯度弥散的问题很大程度上是来源于激活函数的“饱和”。因为在后向传播的过程中仍然需要计算激活函数的导数,所以一旦卷积核的输出落入函数的饱和区,它的梯度将变得非常小。
梯度弥散。使用反向传播算法传播梯度的时候,随着传播深度的增加,梯度的幅度会急剧减小,会导致浅层神经元的权重更新非常缓慢,不能有效学习。这样一来,深层模型也就变成了前几层相对固定,只能改变最后几层的浅层模型。 - 如何解决梯度弥散
一种新的方法batch normalization,相关论文:
《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》
顾名思义,batch normalization嘛,就是“批规范化”咯。Google在ICML文中描述的非常清晰,即在每次SGD时,通过mini-batch来对相应的activation做规范化操作,使得结果(输出信号各个维度)的均值为0,方差为1. 而最后的“scale and shift”操作则是为了让因训练所需而“刻意”加入的BN能够有可能还原最初的输入,从而保证整个network的capacity。
BN可以应用于网络中任意的activation set。文中还特别指出在CNN中,BN应作用在非线性映射前,即对x=Wu+b做规范化。另外对CNN的“权值共享”策略,BN还有其对应的做法(详见文中3.2节)。
那BN到底是什么原理呢?说到底还是为了防止“梯度弥散”。关于梯度弥散,大家都知道一个简单的栗子:。在BN中,是通过将activation规范为均值和方差一致的手段使得原本会减小的activation的scale变大。可以说是一种更有效的local response normalization方法。
深入浅出——搞懂卷积神经网络的过拟合、梯度弥散、batchsize的影响的问题相关推荐
- 一文看懂卷积神经网络-CNN(基本原理+独特价值+实际应用)
http://blog.itpub.net/29829936/viewspace-2648775/ 2019-06-25 21:31:18 卷积神经网络 – CNN 最擅长的就是图片的处理.它受到人类 ...
- 技术向:一文读懂卷积神经网络
技术向:一文读懂卷积神经网络 技术网络 36大数据(张雨石) · 2015-03-06 05:47 自今年七月份以来,一直在实验室负责卷积神经网络(Convolutional Neural Ne ...
- 【深度学习理论】一文看懂卷积神经网络
[深度学习理论]一文看懂卷积神经网络 https://mp.weixin.qq.com/s/wzpMtMFkVDDH6scVcAdhlA 选自Medium 作者: Pranjal Yadav 经机器之 ...
- 8分钟带你深入浅出搞懂Nginx
8分钟带你深入浅出搞懂Nginx Nginx是一款轻量级的Web服务器.反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用. 架构图 上图基本上说明了当下流行的技术架构 ...
- 深度学习之卷积神经网络(6)梯度传播
深度学习之卷积神经网络(6)梯度传播 在完成手写数字图片识别实战后,我们对卷积神经网络的使用有了初步的了解.现在我们来解决一个关键问题,卷积层通过移动感受野的方式实现离散卷积操作,那么它的梯度传播是 ...
- 深度学习之循环神经网络(6)梯度弥散和梯度爆炸
深度学习之循环神经网络(6)梯度弥散和梯度爆炸 循环神经网络的训练并不稳定,网络的善妒也不能任意加深.那么,为什么循环神经网络会出现训练困难的问题呢?简单回顾梯度推导中的关键表达式: ∂ht∂hi= ...
- 一篇让你看懂卷积神经网络
初识卷积神经网络(CNN) 从今天起,正式开始讲解卷积神经网络.这是一种曾经让我无论如何也无法弄明白的东西,主要是名字就太"高级"了,网上的各种各样的文章来介绍"什么是卷 ...
- 一文读懂卷积神经网络
自今年七月份以来,一直在实验室负责卷积神经网络(Convolutional Neural Network,CNN),期间配置和使用过theano和cuda-convnet.cuda-convnet2. ...
- 技术05期:五分钟教你读懂卷积神经网络【CNN】
上期回顾:以RBN(径向基函数)神经网络为例,简要介绍了前馈型神经网络中,"神经元"到底是如何进行"曲线拟合"的.详情可回顾: 神经网络如何从入门到精通?(请戳 ...
最新文章
- python如何控制mysql_python如何操作mysql
- 海生《我不是你的玩偶》关注颇高
- 技术解析系列 | PouchContainer 富容器技术
- lua的面向对象编程,封装,继承,多态的实现
- 6.Strings and Dictionaries
- linux系统如何拨号上网连接,教你在Linux下如何使用ADSL拨号上网
- C++ primer 第14章 操作重载与类型转换
- Android Studio 常用快捷键 for mac
- 李庄 220kV变电站电气部分初步设计
- 查看论文是否被ISTP、EI检索
- cmos电路多余输入端能否悬空_【技术分享】CMOS集成电路中多余输入端为何不能悬空?...
- 身体健康是第一生产力 --- 我看央视主持人李咏早逝
- 从EDN上看的文章 如何提高手机的待机时长
- 第三周助教工作总结——NWNU李泓毅
- voip linksys
- Rviz显示不出数据了之一文搞懂Qos
- 【go 科学计算】用于统计、机器学习和数据操作
- Java EE 概览
- unity3d 如何UI优化和减少DC(DrawCall)
- 智能手机Web开发笔记
热门文章
- ASp.net常用服务
- AtCoder Regular Contest 082 (ARC082) E - ConvexScore 计算几何 计数
- 深度学习要多深_才能读懂人话?
- iOS-----线程同步与线程通信
- javashop配置微信支付
- 暗黑破坏神java魔法护身,发个实用的贴!!暗黑+1+2技能护身符合成,望大家顶下,能加精...
- mysql5.5.49.tar.gz_CentOS6.5 解压安装 二进制分发版 mysql-5.5.49-linux2.6-x86_64.tar.gz
- 程序员锁死公司服务器,导致600万元资金打水漂。网友神回复
- JavaScript的浪漫,520一生一世!!
- 如何在一年内从零基础到前端就业?