深度学习之:CNN卷积神经网基本概念理解

1.整理下网上介绍CNN比较好的博客html

    如下是本人以为介绍CNN比较好的几篇博客,本文也是在这些大牛们的博客基础下,写一下本身对CNN的一些理解,本身水平有限,不免有理解错误的地方,欢迎有兴趣的朋友多多指正,共同进步微笑算法

[1]Deep Learning简介 数据库

[2]深度学习笔记整理系列网络

[3]Deep Learning模型之:CNN卷积神经网(1)深度解析CNN框架

[3]卷积神经网介绍:网络框架、源码解析机器学习

[4]一文读懂CNN卷积神经网函数


2. 简单介绍下卷积操做学习

       要理解卷积神经网,首先要对二维图像的卷积操做有个大体概念,这里简单介绍下卷积:spa

     1)一维空间的卷积,这个学过信号与系统的同窗应该都了解,以离散系统为例:.net

     

     其中星号*表示卷积,x(n)是一个线性时不变系统,h(n)是一个滤波器,由以上公式能够看出,离散系统一维卷积操做就是将两个离散序列  之间按照必定的规则将它们的有关序列值分别两两相乘再相加。

   2)二维图像卷积,理解二维图像卷积是理解卷积神经网的基础

     

         对二维图像卷积操做,其数学意义能够解释以下:

     源图像是做为输入源数据,处理之后要获得的图像是卷积输出结果,卷积操做函数做为Filter,在X、Y两个方向上对源图像的每一个像素点实施卷积操做。如图所示:粉红色的方格表示一个滤波器,黑色方格表示输入图像,每一个方格表示一个像素,粉红色方格覆盖输入图像的某个区域就表示对该区域作卷积。该粉红色方格每次在X、Y前进一个像素方格(即对该像素区域作卷积),就会产生一个新的输出像素,图中正中间深蓝色的表明要输出的像素方格,走彻底部的像素方格,就获得了全部输出像素。

     利用卷积能够实现对图像模糊处理,边缘检测,产生轧花效果的图像。

     想对二维图像卷积操做有更详细了解的话,能够参考这篇博客

3.CNN概述

     CNN全名叫卷积神经网(Convolutional Neural Networks),是一种特殊的深层的神经网络模型,在图像处理领域应用的比较普遍,而且取得了不错的效果。CNN相对于传统的图像处理方法的优点在于:传统的图像处理须要先经过一些算法提取图像的颜色特征、纹理特征、形状特征、空间关系特征,而后根据这些特征作图像分类或者图像检索等应用,而CNN直接将整个图像做为输入,CNN算法自动提取图像特征;而相对于全链接神经网,CNN的的神经元之间的链接是非全链接的,并且CNN的同一层中某些神经元之间的链接的权是共享的,这种权值共享网络结构使之更相似于生物神经网络,下降了网络模型的复杂度,减小了权值的数量。

  如上所述,CNN相对于全链接网络的一个优点是局部链接和权值共享,CNN经过局部链接和权值共享能够有效减小模型参数,下面用一个网上常见的图说明该问题:

  

                            图一:全链接和局部链接

    上图左:全链接网络。若是咱们有1000x1000像素的图像,有1百万个隐层神经元,每一个隐层神经元都链接图像的每个像素点,就有1000x1000x1000000=10^12个链接,也就是10^12个权值参数。

   上图右:局部链接网络,每个节点与上层节点同位置附近10x10的窗口相链接,则1百万个隐层神经元就只有100w乘以100,即10^8个参数。其权值链接个数比原来减小了四个数量级。

    那么问题来了:CNN每一个神经元只与上一层一个10x10窗口内的像素点链接,会不会损失数据呢?生物学家经过研究小猫大脑皮层对外界图像刺激的反应作了大量研究,发现大脑皮层每一个神经元只感觉局部的图像区域,而不须要对全局图像作感觉,而后在更高层,将这些感觉不一样局部的神经元综合起来就能够获得全局的信息了。深度学习原本就是模拟人脑,因此这样作是合理的。

     还有一个问题就是:什么是权值共享,为何能够权值共享?仍以上图为例,咱们用一个10X10的矩阵对输入图像从左上角到右下角依次取10X10的窗口作卷积,这个矩阵就滤波器,它有10X10个参数,若是每次卷积操做的参数不一样(滤波器不一样),就须要(1000 - 10 + 1)X (1000 - 10 + 1)个滤波器,须要训练的参数个数就是(1000 - 10 + 1)X (1000 - 10 + 1)X100。权值共享就是指咱们能够假定这(1000 - 10 + 1)X (1000 - 10 + 1)个滤波器相同,那么咱们只需训练100个参数。那么这么作可行吗?研究代表图像特征分布具备均匀性,因此在图像左上角用于抽取某个特征的滤波器,在图像的其余位置,一样能够抽取该特征(好比抽取图像颜色特征)。

4.CNN网络结构

   卷积神经网络是一个多层的神经网络,每层由多个二维平面组成,而每一个平面由多个独立神经元组成。

   

                                                                      图二:卷积神经网络的概念示范

      Input表示原始输入图像,C是特征抽取层(卷积层),S是下采样层(pooling层)。输入的一幅图像,在C1层,经过和3个卷积模板作卷积运算,而后加上偏置值,再通过sigmoid激活函数,获得3个特征映射图,在S2层,对C1层输出的3幅特征映射图作下采样,假设采样因子是2 ,也就是C1层特征图中每2X2的patch中的4个像素抽样出一个像素获得3张尺寸减少了的特征图S2。一样的,再通过C3,S4。将S4的输出拉成一个向量(flatten),输入到传统的神经网络中,并获得输出

    下面解释下CNN网络结构涉及到的几个概念:

    1)卷积操做:用一个滤波器(就是一个小特征矩阵,也称卷积核)在图像矩阵上游走,在对应位置元素相乘,再把相乘的结果相加,最后相加的结果造成新的图像矩阵,游走完成后即完成了对原始图像的卷积变换(映射变换),造成此滤波器下的特征提取。

     以下图所示,展现了一个3X3的卷积核在5X5的图像上作卷积的过程。每一个卷积都是一种特征提取方式(每一个卷积核有本身的权重参数,能够提取一种特征),就像一个筛子,将图像中符合条件(激活值越大越符合条件)的部分筛选出来,经过卷积操做,获得一幅3X3的特征图。   

                                 图3、卷积示意图

       2)多卷积核

      这里还有一个问题就是:每一个C层,有多少个卷积核?这个问题能够简单的理解为每一个特征核就是一个滤波器,能够抽取一种特种,那么每一个C层须要抽取多少种特征,就须要多少个滤波器,即须要多少个特征核,很显然,有多少个卷积核,C层就对应多少幅特征图。实际应用中,每一个C层卷积核的个数通常设为32的倍数。这些滤波器的权重参数就是咱们训练模型时要求解的参数。

    

                                                                     图4、多卷积核示意图

上图中,不一样颜色代表不一样的卷积核。每一个卷积核都会将图像生成为另外一幅图像。好比两个卷积核就能够将生成两幅图像,这两幅图像能够看作是一张图像的不一样的通道。以下图所示,下图有个小错误,即将w1改成w0,w2改成w1便可。下文中仍以w1和w2称呼它们。下图展现了在四个通道上的卷积操做,有两个卷积核,生成两个通道。其中须要注意的是,四个通道上每一个通道对应一个卷积核,先将w2忽略,只看w1,那么在w1的某位置(i,j)处的值,是由四个通道上(i,j)处的卷积结果相加而后再取激活函数值获得的,下图假设激活函数为tanh函数。



                    图5、多通道卷积示意图


      

3)S层的做用

        在经过卷积得到了特征 (features) 以后,下一步咱们但愿利用这些特征去作分类。理论上讲,人们能够用全部提取获得的特征去训练分类器,例如 softmax 分类器,但这样作面临计算量的挑战。例如:对于一个 96X96 像素的图像,假设咱们已经学习获得了400个定义在8X8输入上的特征,每个特征和图像卷积都会获得一个 (96 ? 8 + 1) × (96 ? 8 + 1) = 7921 维的卷积特征,因为有 400 个特征,因此每一个样例 (example) 都会获得一个 892 × 400 = 3,168,400 维的卷积特征向量。学习一个拥有超过 3 百万特征输入的分类器十分不便,而且容易出现过拟合 (over-fitting)。

      为了解决这个问题,首先回忆一下,咱们之因此决定使用卷积后的特征是由于图像具备一种“静态性”的属性,这也就意味着在一个图像区域有用的特征极有可能在另外一个区域一样适用。所以,为了描述大的图像,一个很天然的想法就是对不一样位置的特征进行聚合统计,例如,人们能够计算图像一个区域上的某个特定特征的平均值 (或最大值)。这些概要统计特征不只具备低得多的维度 (相比使用全部提取获得的特征),同时还会改善结果(不容易过拟合)。这种聚合的操做就叫作池化 (pooling),有时也称为平均池化或者最大池化 (取决于计算池化的方法)。


                                                                                     图6、池化示意图


     4)感觉野和权值共享

      这个问题在第二节CNN网络概述中已经介绍过,这里就再也不重复了。


 4.CNN模型训练

     同传统机器学习算法同样,CNN模型训练也 是为了经过训练数据学习模型中的参数,训练算法与传统的BP算法差很少。主要包括4步,这4步被分为两个阶段:

第一阶段,向前传播阶段:

a)从样本集中取一个样本(X,Yp),将X输入网络;

b)计算相应的实际输出Op

      在此阶段,信息从输入层通过逐级的变换,传送到输出层。这个过程也是网络在完成训练后正常运行时执行的过程。在此过程当中,网络执行的是计算(实际上就是输入与每层的权值矩阵相点乘,获得最后的输出结果):

          Op=Fn(…(F2(F1(XpW(1))W(2))…)W(n)

第二阶段,向后传播阶段

a)算实际输出Op与相应的理想输出Yp的差;

b)按极小化偏差的方法反向传播调整权矩阵。

5.用一个简单的例子解释CNN结构

    以网上常见的文字识别系统LeNet-5 网络为例解释CNN网络结构。LeNet-5网络曾被美国不少银行用来识别支票手写数字,这从层面说明该网络的手写数字识别正确率 很高。


                              图7、LeNet-5网络用于手写体数字识别

下图是LeNet-5的卷积网络结构示意图


                                                                                            图8、LeNet-5的卷积网络结构示意图

    LeNet-5共有7层,不包含输入,每层都包含可训练参数(链接权重)。输入图像为32×32大小。这要比Mnist数据库(一个公认的手写数据库,大小应该是28×28)中最大的字母还大。这样作的缘由是但愿潜在的明显特征如笔画断电或角点可以出如今最高层特征监测子感觉野的中心。

    首先,简要解释下上面这个用于文字识别的LeNet-5深层卷积网络:

      1)输入图像的大小是32×32,过滤器的大小是5×5,因为不考虑对图像的边界进行拓展(narrow CNN),则过滤器将有28×28(32 - 5 + 1 = 28,其中1是步长)个不一样的位置,也就是C1卷积后获得的特征面的大小是28x28。这里设定C1层中使用6个不一样的滤波器,因此C1卷积得有6个不一样的特征图,每一个特征图使用的滤波器参数相同(权值共享)。
     2)S2层是一个下采样层(subsampling layer)。简单的说,由4个点下采样为1个点,也就是4个数的加权平均。但在LeNet-5系统,下采样层比较复杂,由于这4个加权系数也须要学习获得,这显然增长了模型的复杂度。在斯坦福关于深度学习的教程中,这个过程叫作Pool。S2面的大小是14×14,其中14=28/2。pooling的结果是使得特征减小,参数减小,但pooling的目的并不只在于此。pooling目的是为了保持某种不变性(旋转、平移、伸缩等),经常使用的有mean-pooling,max-pooling和Stochastic-pooling三种。
    3)根据前面对C1层的理解,很容易获得C3卷积后特征图的大小为10×10((14 - 5 + 1)* (14 - 5 + 1))。不一样的是c3卷积后获得16个特征图。这里须要注意的是C3每一个特征图是有S2层6个特征图任意组合获得的,组合方法在上面的第四部分CNN网络结构中已经介绍过,就再也不赘述了,具体到LeNet-5的实现,期组合方式以下表所示:


                                图9、LeNet-5 C3层特征图组合

以c3层的特征图0为例,该特征图组合了s2中0、一、2三张特征图,即该特征图的每个节点与S2层的第0张特征图,第1张特征图,第2张特征图,总共3个5×5个节点相链接。后面依次类推,C3层每一张特征映射图的权值是相同的。

4.S4 层是在C3层基础上下采样,前面已述。在后面的层因为每一层节点个数比较少,都是全链接层,这个比较简单,再也不赘述。