深度卷积网络概述
卷积神经网络(CNN)是一种典型的前馈神经网络(feed-forward neural network,各神经元从输入层开始,接收前一级输入,并输出到下一级,直至输出层,整个网络中无反馈)每一个神经元如下图所示平铺卷积神经网络主要由Building Blocks反复堆叠而成,Building Blocks包括:
- 卷积层Convolutional layer
- 激活层Activation layer
- 池化层Pooling layer
- 正规化Batch normalization
- 全连接层Fully connected layer
卷积层(Convolutional layer)
-
2D卷积
-
带偏置的2D卷积
-
步长为2的2D卷积(相当于2倍的下采样)
-
宽卷积(边缘填充)
假设输入图像尺寸为W,卷积核大小为F,步长为S,填充边长为P,那么
输出尺寸为:
至此,可以构成仅由卷积层构成的卷积网络
激活层(Activation layer)
激活层主要由激活函数构成,激活函数都是非线性函数,他们可以使网络更加强大,学习更多更复杂的东西。因为线性函数的局限性,仅凭线性函数无法学习和模拟例如音频、视频等复杂数据类型,在网络中加入激活函数之后,输入与输出之间可以用非线性函数映射来表示,几乎可以表示任何数据类型。
常用激活函数
- 线性整流单元 Rectified Linear Unit (ReLU)
- Sigmoid
- Hyperbolic tangent
在所有激活函数中,ReLU使用最多,它的优缺点如下:
-
快速收敛(Faster convergence )
- 计算简便(计算速度快,耗时少)
- 梯度消失(gradient vanishing)可能性更小
- 但,脆弱的
快速收敛
饱和:当一个激活函数满足时,则称为右饱和;当一个激活函数满足时,则称为左饱和;
sigmoid和tanh是“饱和激活函数”,而ReLU及其变体则是“非饱和激活函数”,对于sigmoid和tanh来说,只有在输入位于y轴附近时,在反向传播的时候,权重才能被较快的更新;而对于ReLU来说,只要输入大于0,,权重可以较大幅度更新,达到快速学习的目的,从而快速收敛
计算简便
梯度消失可能性更小
对于饱和激活函数来说,当输入位于激活函数两端,那么在反向传播时,导数~0,并且随着卷积层数的增加,导数相乘,最终导致梯度消失;而对于非饱和激活函数来说,只要输入大于0,即使模型深度增加,梯度仍旧不会消失
缺点:脆弱性
极度依赖学习率和数据:当学习率设置过大 or 当一个非常大的梯度经过ReLU时,反向传播更新完参数后,所有经过这个神经元的输出都为负数,这个神经元就业再不会被激活,这个神经元就die了
解决方式:Leaky ReLUs、PReLU、RReLU
池化层 (Pooling layer)
卷积的作用是提取特征,而池化是1)保留主要特征,忽略一些细节,从而达到降维,减少计算量,一定程度上防止过拟合,提高模型泛化能力;2)具有平移不变性。池化又分为平均池化和最大池化
- 平均池化:倾向于保留突出背景特征
-
最大池化:倾向于保留突出纹理特征
平移不变性:即使pooling窗口(红框)移动了,只要最大值(9)依然在pooling窗口中,那么依旧能够被检测出来
正规化(Batch normalization)
背景:在训练模型的过程中,训练速度越来越慢,即模型收敛越来越慢。主要有两个原因:
- 随着网络的加深,浅层网络梯度越来越小,直至消失
- 在隐藏层中,因为参数一直在变动,这就导致了数据在不同层中,分布也在不停的变化,激活函数的输入分布逐渐向饱和区偏移,导致反向传播时梯度消失
因此,需要对输入数据进行正规化(均值为0,方差为1),把每层神经网络任意神经元这个输入值的分布重新变换到均值为0,方差为1的正规分布,使得反向传播时,梯度较大,以此来避免梯度消失的问题
加入Batch normalization后的模型
全连接层(Fully connected layer)
- 先把最后一层的feature maps展平,即从多维展平至一维
- 相当于感知机,