卷积神经网络( Convolutional Neural Network,简称CNN)是深度学习的一种重要算法。卷积神经网络是在BP神经网络的改进,与BP类似,都采用了前向传播计算输出值,反向传播调整权重和偏置;CNN与标准的BP最大的不同是:CNN中相邻层之间的神经单元并不是全连接,而是部分连接,也就是某个神经单元的感知区域来自于上层的部分神经单元,而不是像BP那样与所有的神经单元相连接。
CNN的有三个重要的思想架构:
1.局部区域感知
每一个神经元都不需要对全局图像做感受,每个神经元只感受局部的图像区域,然后在更高层,将这些感受不同局部的神经元综合起来就可以得到全局的信息了。
隐含层每个神经元负责图像的一部分区域,综合起来就是整个图像。例如:图像是1000x1000像素,而滤波器大小是10x10,假设滤波器没有重叠,也就是步长为10,这样隐层的神经元个数就是(1000x1000 )/ (10x10)=100x100个神经元了。这只是一种滤波器,也就是一个Feature Map的神经元个数,如果100个Feature Map就是100倍了。需要注意的一点是,上面的讨论都没有考虑每个神经元的偏置部分。所以权值个数需要加1 。这个也是同一种滤波器共享的。
2.权重共享
每个神经元与局部区域的连接权值参数都是一样的,也就是说它们共享一个过滤器(即卷积核),但是这只能过滤一种特征。如果需要关注多个特征,就设计多个卷积核。
权值共享网络结构使之更类似于生物神经网络,降低了网络模型的复杂度,减少了权值的数量。该优点在网络的输入是多维图像时表现的更为明显,使图像可以直接作为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建过程。卷积网络是为识别二维形状而特殊设计的一个多层感知器,这种网络结构对平移、比例缩放、倾斜或者共他形式的变形具有高度不变性。
3.空间或时间上的降采样
为什么是下采样?利用图像局部相关性的原理,对图像进行子抽样,可以减少数据处理量同时保留有用信息。
对于一个 96X96 像素的图像,假设我们已经学习得到了400个定义在8X8输入上的特征,每一个特征和图像卷积都会得到一个 (96 − 8 + 1) × (96 − 8 + 1) = 7921 维的卷积特征,由于有 400 个特征,所以每个样例 (example) 都会得到一个 7921 × 400 = 3,168,400 维的卷积特征向量。学习一个拥有超过 3 百万特征输入的分类器十分不便,并且容易出现过拟合 (over-fitting)。
为了解决这个问题,首先回忆一下,我们之所以决定使用卷积后的特征是因为图像具有一种“静态性”的属性,这也就意味着在一个图像区域有用的特征极有可能在另一个区域同样适用。因此,为了描述大的图像,一个很自然的想法就是对不同位置的特征进行聚合统计,例如,人们可以计算图像一个区域上的某个特定特征的平均值 (或最大值)。这些概要统计特征不仅具有低得多的维度 (相比使用所有提取得到的特征),同时还会改善结果(不容易过拟合)。这种聚合的操作就叫做池化 (pooling),有时也称为平均池化或者最大池化 (取决于计算池化的方法)。
CNN整体网络结构
下面我来推导一下每层的神经元数目和参数的个数。
1、输入层:输入层输入一个28x28的图片。
2、卷积层1:该层使用20个5x5的卷积核分别对输入层图片进行卷积,所以包含20x5x5=500个参数权值参数。卷积后图片边长为(28-5+1)/1 = 24,故产生20个24x24个map,包含20x24x24 = 11520个神经元。
3、池化(pooling)层1:对上一层每个2x2区域进行降采样,选取每个区域最大值,这一层没有参数。降采样过后每个map的长和宽变为原来的一半。
4、卷积层2:该层使用50个20x5x5的卷积核分别对上一层的20个map进行卷积(每个卷积核一次同时对20个map进行卷积),所以包含50x20x5x5=25000个参数权值参数。卷积后图片边长为(12-5+1)/1 = 8,故产生50个8x8个map,包含50x8x8 = 3200个神经元。
5、池化层2:和上一个池化层功能类似,将8x8的map降采样为4x4的map。该层无参数。
6、全连接层1:将上一层的所有神经元进行连接,该层含有500个神经元,故一共有50x4x4x500 = 400000个权值参数。
7、relu层:激活函数层,实现x=max[0,x],该层神经元数目和上一层相同,无权值参数。
8、全连接层2:功能和上一个全连接层类似,该层共有10个神经元,包含500x10=5000个参数。
9、softmax层:实现分类和归一化。
卷积输出大小计算
输入图片大小:nxn
卷积核大小:fxf
步长:s
Padding大小:p,假设上下补齐一样大
则卷积输出大小为:[(n+2p-f)/s + 1],向下取整。
卷积层的前向计算
输入为28x28的图像,经过5x5的卷积之后,得到一个(28-5+1)x(28-5+1) = 24x24、的map。卷积层2的每个map是不同卷积核在前一层每个map上进行卷积,并将每个对应位置上的值相加然后再加上一个偏置项。
每次用卷积核与map中对应元素相乘,然后移动卷积核进行下一个神经元的计算。如图中矩阵C的第一行第一列的元素2,就是卷积核在输入map左上角时的计算结果。在图中也很容易看到,输入为一个4x4的map,经过2x2的卷积核卷积之后,结果为一个(4-2+1) x(4-2+1) = 3*3的map。
卷积层的后向计算
在反向传播过程中,若第x层的a节点通过权值W对x+1层的b节点有贡献,则在反向传播过程中,梯度通过权值W从b节点传播回a节点。
在上图中,我们的矩阵A11通过权重B11与C11关联。而A12与2个矩阵C中2个元素相关联,分别是通过权重B12和C11关联,和通过权重B11和C12相关联。矩阵A中其他元素也类似。
那么,我们有没有简单的方法来实现这样的关联呢。答案是有的。可以通过将卷积核旋转180度,再与扩充后的梯度矩阵进行卷积。扩充的过程如下:如果卷积核为kxk,待卷积矩阵为nxn,需要以nxn原矩阵为中心扩展到(n+2(k-1))x(n+2(k-1))。具体过程如下:
假设D为反向传播到卷积层的梯度矩阵,则D应该与矩阵C的大小相等,在这里为3x3。我们首先需要将它扩充到(3+2x(2-1))x(3+2x(2-1)) = 5x5大小的矩阵。
同时将卷积核B旋转180度:
将旋转后的卷积核与扩充后的梯度矩阵进行卷积:
实际上convn内部是否旋转对网络训练没有影响。计算出的梯度矩阵就可以用来更新权值与偏置了。
池化层的输入一般来源于上一个卷积层,主要作用是提供了很强的鲁棒性(例如max-pooling是取一小块区域中的最大值,此时若此区域中的其他值略有变化,或者图像稍有平移,pooling后的结果仍不变),并且减少了参数的数量,防止过拟合现象的发生。池化层一般没有参数,所以反向传播的时候,只需对输入参数求导,不需要进行权值更新。
池化输出大小计算
采用卷积一样的公式,则卷积输出大小为:[(n+2p-f)/s + 1],向下取整。
前向计算
前向计算过程中,我们对卷积层输出map的每个不重叠(有时也可以使用重叠的区域进行池化)的nxn区域(我这里为2x2,其他大小的pooling过程类似)进行降采样,选取每个区域中的最大值(max-pooling)或是平均值(mean-pooling),也有最小值的降采样,计算过程和最大值的计算类似。
后向计算
对于max-pooling,在前向计算时,是选取的每个2*2区域中的最大值,这里需要记录下最大值在每个小区域中的位置。在反向传播时,只有那个最大值对下一层有贡献,所以将残差传递到该最大值的位置,区域内其他2x2-1=3个位置置零。具体过程如下图,其中4x4矩阵中非零的位置即为前边计算出来的每个小区域的最大值的位置。
对于mean-pooling,我们需要把残差平均分成2x2=4份,传递到前边小区域的4个单元即可。
LRN层,对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力
深度学习的局部响应归一化LRN(Local Response Normalization)理解
全连接层的每一个结点都与上一层的所有结点相连,用来把前边提取到的特征综合起来。由于其全相连的特性,一般全连接层的参数也是最多的。
正则化及Dropout都能很好的防止过拟合。
正则化
P-范数公式
∥ x ∥ p = ( ∑ i = 0 ∞ ∣ x i p ∣ ) 1 p {\Vert x \Vert}_p= (\sum_{i=0}^{\infty} \vert x_i^p\vert)^{\frac{1}{p}} ∥x∥p=(i=0∑∞∣xip∣)p1
L1范数:
λ ∥ x ∥ 1 \lambda{\Vert x \Vert}_1 λ∥x∥1
L2范数:
λ 2 ∥ x ∥ 2 \frac{\lambda}{2}{\Vert x \Vert}_2 2λ∥x∥2
参考:Markdown公式编辑学习笔记
Dropout
Dropout: A Simple Way to Prevent Neural Networks from Overfitting
Softmax回归模型是logistic回归模型在多分类问题上的推广,在多分类问题中,待分类的类别数量大于2,且类别之间互斥。比如我们的网络要完成的功能是识别0-9这10个手写数字,若最后一层的输出为[0,1,0, 0, 0, 0, 0, 0, 0, 0],则表明我们网络的识别结果为数字1。
Softmax的公式为,可以直观看出如果某一个zj大过其他z,那这个映射的分量就逼近于1,其他就逼近于0,并且对所有输入数据进行归一化。
参考:简单易学的机器学习算法——Softmax Regression
Logistic Regression(逻辑回归)原理及公式推导
Softmax回归
1.权重初始化
参考:caffe中weight_filler:7种权值初始化的方法
caffe 中base_lr、weight_decay、lr_mult、decay_mult代表什么意思?
2.其它常用层及参数
参考:Caffe学习系列(5):其它常用层及参数
原文地址:ImageNet Classification with Deep Convolutional Neural Networks
参考文章
精读第2段,泛读第3段
1.对一张图片进行卷积,边缘特征如何保证检测到?例如在一张 32 x 32 的输入图像上,5 x 5 的过滤器能够覆盖到 784 个不同的位置。这 784 个位置可映射为一个 28 x 28 的数组
A:Zero Padding。就是在32x32周围增加两层0变成36x36,这样就达到了卷积后仍保持32x32
2.每层卷积核大小3x3/5x5是经验选择?每层卷积核数量如何确定?
A:
1.【重要】CNN(卷积神经网络)是什么?有入门简介或文章吗?
3.卷积神经网络算法的一个实现
4.系统学习深度学习(四) --CNN原理,推导及实现源码分析
5.编写C语言版本的卷积神经网络CNN之一:前言与Minst数据集
6.【重要】深度学习笔记系列
7.【原理深刻】Deep Learning(深度学习)学习笔记整理系列之(七)