上一篇主要是对卷积神经网络的整个训练过程中公式以及误差的推导给出详细的分析。
博客地址:http://blog.csdn.net/u010402786/article/details/51226825
这一篇主要对卷积神经网络中出现的一些问题进行一个详细的阐述。
1.1 什么是过拟合 |
所谓过拟合(Overfit),是这样一种现象:一个假设在训练数据上能够获得比其他假设更好的拟合,但是在训练数据外的数据集 上却不能很好的拟合数据。此时我们就叫这个假设出现了overfit的现象。
如上图所示:过拟合,就是拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。
1.2 造成过拟合的原因 |
1.3 过拟合解决方法 |
不平衡训练集会对结果造成很大的负面影响,而训练集在平衡的情况下,能够达到最好的performance。
1. 训练数据分布情况对CNN结果产生很大影响;
2. 平衡的训练集是最优的,数据越不平衡,准确率越差;
3. 如何提升准确率(使用Oversampling)
相关论文是:
《The Impact of Imbalanced Training Data for Convolutional Neural Networks》
3.1Batch_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而做出的妥协
3.2改变Batch_Size的影响 |
3.3 Minibatch简谈 |
4.1 梯度弥散的解释 |
梯度弥散的问题很大程度上是来源于激活函数的“饱和”。因为在后向传播的过程中仍然需要计算激活函数的导数,所以一旦卷积核的输出落入函数的饱和区,它的梯度将变得非常小。
梯度弥散。使用反向传播算法传播梯度的时候,随着传播深度的增加,梯度的幅度会急剧减小,会导致浅层神经元的权重更新非常缓慢,不能有效学习。这样一来,深层模型也就变成了前几层相对固定,只能改变最后几层的浅层模型。
4.2 如何解决梯度弥散 |
BN可以应用于网络中任意的activation set。文中还特别指出在CNN中,BN应作用在非线性映射前,即对x=Wu+b做规范化。另外对CNN的“权值共享”策略,BN还有其对应的做法(详见文中3.2节)。
那BN到底是什么原理呢?说到底还是为了防止“梯度弥散”。关于梯度弥散,大家都知道一个简单的栗子:。在BN中,是通过将activation规范为均值和方差一致的手段使得原本会减小的activation的scale变大。可以说是一种更有效的local response normalization方法。
参考文献
1.谈谈深度学习中的 Batch_Size
http://blog.csdn.net/ycheng_sjtu/article/details/49804041
2.正则化方法:L1和L2 regularization、数据集扩增、dropout
http://blog.csdn.net/u010402786/article/details/49592239
3.深度学习中 Batch Normalization为什么效果好?
http://www.zhihu.com/question/38102762