卷积神经网络与普通神经网络的区别在于,卷积神经网络包含了一个由卷积层和子采样层(池化层)构成的特征抽取器。在卷积神经网络的卷积层中,一个神经元只与部分邻层神经元链接。在CNN的一个卷积层中,一般包含若干个特征图(featureMap),每一个特征图由一些矩形排列的的神经元组成,同一特征图的神经元共享权值,这里共享的权值就是卷积核。卷积核通常以随机小数矩阵的形式初始化,在网络的训练过程当中卷积核将学习获得合理的权值。共享权值(卷积核)带来的直接好处是减小网络各层之间的链接,同时又下降了过拟合的风险。子采样也叫作池化(pooling),一般有均值子采样(mean pooling)和最大值子采样(max pooling)两种形式。子采样能够看做一种特殊的卷积过程。卷积和子采样大大简化了模型复杂度,减小了模型的参数。html
2.1 神经网络算法
首先介绍神经网络,神经网络的每一个单元以下:网络
其对应的公式以下:机器学习
其中,该单元也能够被称做是Logistic回归模型。当将多个单元组合起来并具备分层结构时,就造成了神经网络模型。下图展现了一个具备一个隐含层的神经网络。函数
其对应的公式以下:学习
比较相似的,能够拓展到有2,3,4,5,…个隐含层。优化
神经网络的训练方法也同Logistic相似,不过因为其多层性,还须要利用链式求导法则对隐含层的节点进行求导,即梯度降低+链式求导法则,专业名称为反向传播。关于训练算法的相关原理及操做过程,可参见以前写的关于BP算法http://www.javashuo.com/article/p-ccurltqr-nh.html。ui
2.2 卷积神经网络spa
首先,咱们先获取一个感性认识,下图是一个卷积神经网络的实例:.net
卷积神经网络一般包含如下几种层:
2.2.1 卷积层(Convolutional layer)
卷积层是卷积神经网络的核心基石。在图像识别里咱们提到的卷积是二维卷积,即离散二维滤波器(也称做卷积核)与二维图像作卷积操做,简单的讲是二维滤波器滑动到二维图像上全部位置,并在每一个位置上与该像素点及其领域像素点作内积。卷积操做被普遍应用与图像处理领域,不一样卷积核能够提取不一样的特征,例如边沿、线性、角等特征。在深层卷积神经网络中,经过卷积操做能够提取出图像低级到复杂的特征。
上图给出一个卷积计算过程的示例图,输入图像大小为H=5,W=5,D=3,即5×5大小的3通道(RGB,也称做深度)彩色图像。这个示例图中包含两(用K表示)组卷积核,即图中滤波器W0和W1。在卷积计算中,一般对不一样的输入通道采用不一样的卷积核,如图示例中每组卷积核包含(D=3)个3×3(用F×F表示)大小的卷积核。另外,这个示例中卷积核在图像的水平方向(W方向)和垂直方向(H方向)的滑动步长为2(用S表示);对输入图像周围各填充1(用P表示)个0,即图中输入层原始数据为蓝色部分,灰色部分是进行了大小为1的扩展,用0来进行扩展。通过卷积操做获得输出为3×3×2(用Ho×Wo×K表示)大小的特征图,即3×3大小的2通道特征图,其中Ho计算公式为:Ho=(H−F+2×P)/S+1,Wo同理。 而输出特征图中的每一个像素,是每组滤波器与输入图像每一个特征图的内积再求和,再加上偏置bo,偏置一般对于每一个输出特征图是共享的。输出特征图o[:,:,0]中的最后一个−2计算如上图右下角公式所示。
记住这几个符号:
在卷积操做中卷积核是可学习的参数,通过上面示例介绍,每层卷积的参数大小为D×F×F×K。卷积层的参数较少,这也是由卷积层的主要特性即局部链接和共享权重所决定。
经过介绍卷积计算过程及其特性,能够看出卷积是线性操做,并具备平移不变性(shift-invariant),平移不变性即在图像每一个位置执行相同的操做。卷积层的局部链接和权重共享使得须要学习的参数大大减少,这样也有利于训练较大卷积神经网络。
总体计算过程以下(与上图中的数据不一样,可是计算过程相同):
2.2.2 线性整流层(Rectified Linear Units layer, ReLU layer)--激励层
把卷积层输出结果作非线性映射。
CNN采用的激励函数通常为ReLU(The Rectified Linear Unit/修正线性单元),它的特色是收敛快,求梯度简单,但较脆弱,图像以下。
激励层的实践经验:
①不要用sigmoid!不要用sigmoid!不要用sigmoid!
② 首先试RELU,由于快,但要当心点
③ 若是2失效,请用Leaky ReLU或者Maxout
④ 某些状况下tanh却是有不错的结果,可是不多
2.2.3 池化层(Pooling layer)
池化(pool)即下采样(downsamples),目的是为了减小特征图,主要做用是经过减小网络的参数来减少计算量,而且可以在必定程度上控制过拟合。一般在卷积层的后面会加上一个池化层。池化操做对每一个深度切片独立,规模通常为 2*2,相对于卷积层进行卷积运算,池化层进行的运算通常有如下几种:
* 最大池化(Max Pooling)。取4个点的最大值。这是最经常使用的池化方法。
* 均值池化(Mean Pooling)。取4个点的均值。
* 高斯池化。借鉴高斯模糊的方法。不经常使用。
* 可训练池化。训练函数 ff ,接受4个点为输入,出入1个点。不经常使用。
最多见的池化层是规模为2*2, 步幅为2,对输入的每一个深度切片进行下采样。每一个MAX操做对四个数进行,以下图所示:
池化操做将保存深度大小不变。若是池化层的输入单元大小不是二的整数倍,通常采起边缘补零(zero-padding)的方式补成2的倍数,而后再池化。
2.2.4 全链接层( Fully-Connected layer)
全链接层和卷积层能够相互转换:
* 对于任意一个卷积层,要把它变成全链接层只须要把权重变成一个巨大的矩阵,其中大部分都是0 除了一些特定区块(由于局部感知),并且好多区块的权值还相同(因为权重共享)。
* 相反地,对于任何一个全链接层也能够变为卷积层。
2.2.5 反向传播
下面讲解卷积层的反向传播过程:
(因为公式格式不太好整理,因此用截图代替)
其余关于反向传播的介绍:
http://www.cnblogs.com/pinard/p/6494810.html
通常CNN结构依次为
1. INPUT
2. [[CONV -> RELU]*N -> POOLING]*M
3. [FC -> RELU]*K
4. FC
卷积神经网络之训练算法
1. 同通常机器学习算法,先定义Loss function,衡量和实际结果之间差距。
2. 找到最小化损失函数的W和b, CNN中用的算法是SGD(随机梯度降低)。
卷积神经网络之优缺点
优势
• 共享卷积核,对高维数据处理无压力
• 无需手动选取特征,训练好权重,即得特征分类效果好
缺点
• 须要调参,须要大样本量,训练最好要GPU
• 物理含义不明确(也就说,咱们并不知道没个卷积层到底提取到的是什么特征,并且神经网络自己就是一种难以解释的“黑箱模型”)
卷积神经网络之典型CNN • LeNet,这是最先用于数字识别的CNN • AlexNet, 2012 ILSVRC比赛远超第2名的CNN,比 • LeNet更深,用多层小卷积层叠加替换单大卷积层。 • ZF Net, 2013 ILSVRC比赛冠军 • GoogLeNet, 2014 ILSVRC比赛冠军 • VGGNet, 2014 ILSVRC比赛中的模型,图像识别略差于GoogLeNet,可是在不少图像转化学习问题(好比object detection)上效果奇好