一、什么是卷积神经网络

卷积神经网络(Convolutional Neural Network,CNN)又叫卷积网络(Convolutional Network),是一种专门用来处理具有类似网格结构的数据的神经网络。卷积神经网络一词中的卷积是一种特殊的线性运算。卷积网络是指那些至少在网络的一层中使用卷积运算来代替一般的矩阵乘法的神经网络。
典型应用场景:图像识别、语音识别等。

二、卷积神经网络的描述

2.1.人类的大脑

作为人类,我们不断地通过眼睛来观察和分析周围的世界,我们不需要刻意的“努力”思考,就可以对所看到的一切做出预测,并对它们采取行动。当我们看到某些东西时,我们会根据我们过去学到的东西来标记每个对象。为了说明这些情况,请看下面这张图片:

卷积神经网络的原理与实现 卷积神经网络基本概念_python

  • 你可能会想到“这是一个快乐的小男孩站在椅子上”。或者也许你认为他看起来像是在尖叫,即将在他面前攻击这块蛋糕。
  • 这就是我们整天下意识地做的事情。我们看到事物,然后标记,进行预测和识别行为。
  • 所有这一切对我们来说都很自然。我们几乎没有想到我们能够识别我们生活中看到的所有物体和人物的特殊性。神经元和大脑连接的深层复杂层次结构在记忆和标记物体的过程中起着重要作用。

2.2.卷积神经网络的历史

  • 与孩子学会识别物体的方式类似,我们需要在能够概括输入并对之前从未见过的图像进行预测之前,展示数百万张图片的算法。
  • 计算机以与我们不同的方式“看到”东西的。他们的世界只包括数字。每个图像都可以表示为二维数字数组,称为像素。
  • 但是它们以不同的方式感知图像,这一事实并不意味着我们无法训练他们的识别模式,就像我们一样如何识别图像。我们只需要以不同的方式思考图像是什么。

    为了“教会”一种算法如何识别图像中的对象,我们使用特定类型的人工神经网络:卷积神经网络(CNN)。他们的名字源于网络中最重要的一个操作:卷积。

三、普通神经网络与卷积神经网络

卷积神经网络(Convolutional Neural Networks / CNNs / ConvNets)与普通神经网络非常相似,它们都由具有可学习的权重和偏置常量(biases)的神经元组成。每个神经元都接收一些输入,并做一些点积计算,输出是每个分类的分数,普通神经网络里的一些计算技巧到这里依旧适用。
卷积神经网络默认输入是图像,可以让我们把特定的性质编码入网络结构,使是我们的前馈函数更加有效率,并减少了大量参数。

3.1.具有三维体积的神经元(3D volumes of neurons)

卷积神经网络利用输入是图片的特点,把神经元设计成三个维度 : width, height, depth(注意这个depth不是神经网络的深度,而是用来描述神经元的) 。比如输入的图片大小是 32 × 32 × 3 (rgb),那么输入神经元就也具有 32×32×3 的维度。下面是图解:

卷积神经网络:一个卷积神经网络由很多层组成,它们的输入是三维的,输出也是三维的,有的层有参数,有的层不需要参数。

卷积神经网络的原理与实现 卷积神经网络基本概念_卷积神经网络的原理与实现_02

3.2.传统神经网络

卷积神经网络的原理与实现 卷积神经网络基本概念_卷积_03

四、卷积神经网络

卷积神经网络(Convolutional Neural Network)简称CNN,CNN是所有深度学习课程、书籍必教的模型,CNN在影像识别方面的为例特别强大,许多影像识别的模型也都是以CNN的架构为基础去做延伸。

CNN的概念图如下:

概念图1:

卷积神经网络的原理与实现 卷积神经网络基本概念_神经网络_04


概念图2:

卷积神经网络的原理与实现 卷积神经网络基本概念_卷积_05


概念图3:

卷积神经网络的原理与实现 卷积神经网络基本概念_计算机视觉_06


从上面三张图片我们可以看出,CNN架构简单来说就是:图片经过各两次的Convolution, Pooling, Fully Connected就是CNN的架构了,因此只要搞懂Convolution, Pooling, Fully Connected三个部分的内容就可以完全掌握了CNN!

4.1 Convolution Layer卷积层

4.1.1关于卷积操作

卷积运算就是将原始图片的与特定的Feature Detector(filter)做卷积运算(符号⊗),卷积运算就是将下图两个3x3的矩阵作相乘后再相加,以下图为例0 *0 + 0*0 + 0*1+ 0*1 + 1 *0 + 0*0 + 0*0 + 0*1 + 0*1 =0

卷积神经网络的原理与实现 卷积神经网络基本概念_卷积_07


每次移动一步,我们可以一次做完整张表的计算,如下:

卷积神经网络的原理与实现 卷积神经网络基本概念_神经网络_08


空间排列(Spatial arrangement)

一个输出单元的大小有以下三个量控制:depth, stride 和 zero-padding。

  • 深度(depth) : 顾名思义,它控制输出单元的深度,也就是filter的个数,连接同一块区域的神经元个数。又名:depth column
  • 步幅(stride):它控制在同一深度的相邻两个隐含单元,与他们相连接的输入区域的距离。如果步幅很小(比如 stride = 1)的话,相邻隐含单元的输入区域的重叠部分会很多; 步幅很大则重叠区域变少。
  • 补零(zero-padding) : 我们可以通过在输入单元周围补零来改变输入单元整体大小,从而控制输出单元的空间大小。

在卷积操作过程中,矩阵经卷积操作后的尺寸由以下几个因素决定:

  • W : 输入单元的大小(宽或高)
  • F : 感受野(receptive field)
  • S : 步幅(stride)
  • P : 补零(zero-padding)的数量

  • K : 深度,输出单元的深度
    则可以用以下公式计算一个维度(宽或高)内一个输出单元里可以有几个隐藏单元:
  • 卷积神经网络的原理与实现 卷积神经网络基本概念_神经网络_09


4.1.2关于Feature Detector

中间的Feature Detector(Filter)会随机产生好几种(ex:16种),Feature Detector的目的就是帮助我们萃取出图片当中的一些特征(ex:形状),就像人的大脑在判断这个图片是什么东西也是根据形状来推测

卷积神经网络的原理与实现 卷积神经网络基本概念_计算机视觉_10


  • 利用Feature Detector萃取出物体的边界
  • 卷积神经网络的原理与实现 卷积神经网络基本概念_神经网络_11



  • 使用Relu函数去掉负值,更能淬炼出物体的形状
  • 卷积神经网络的原理与实现 卷积神经网络基本概念_计算机视觉_12

  • 淬炼出物体的形状1:
  • 卷积神经网络的原理与实现 卷积神经网络基本概念_python_13

  • 淬炼出物体的形状2:
  • 卷积神经网络的原理与实现 卷积神经网络基本概念_神经网络_14


  • 我们在输入上进行了多次卷积,其中每个操作使用不同的过滤器。这导致不同的特征映射。最后,我们将所有这些特征图放在一起,作为卷积层的最终输出。

假如我们对一副图像进行特征提取的结果:
可以看出,同样的图片,使用不同的卷积核,不同的卷积核/滤波器,会导致提取的特征点不一样

卷积神经网络的原理与实现 卷积神经网络基本概念_卷积神经网络的原理与实现_15

4.1.3ReLU激活功能

就像任何其他神经网络一样,我们使用激活函数使输出非线性。在卷积神经网络的情况下,卷积的输出将通过激活函数。这可能是ReLU激活功能

卷积神经网络的原理与实现 卷积神经网络基本概念_神经网络_16

这里还有一个概念就是步长,Stride是每次卷积滤波器移动的步长。步幅大小通常为1,意味着滤镜逐个像素地滑动。通过增加步幅大小,您的滤波器在输入上滑动的间隔更大,因此单元之间的重叠更少。

下面的动画显示步幅大小为1。


由于feature map的大小始终小于输入,我们必须做一些事情来防止我们的要素图缩小。这是我们使用填充的地方。

添加一层零值像素以使用零环绕输入,这样我们的要素图就不会缩小。除了在执行卷积后保持空间大小不变,填充还可以提高性能并确保内核和步幅大小适合输入。

4.1.2激活函数

4.1.4.1概念

在这里我们说一下关于激活函数的概念

激活函数在神经网络的作用上讲就是将多个线性输入转换为非线性的关系。如果不使用激活函数的话,神经网路每层都只做线性变换,多层输入叠加后还是线性变化。因为线性模型的表达力不够,激活函数可以引入非线性因素

4.1.4.2常见的激活函数

1.Sigmoid激活函数
  • sigmoid函数将一个实数压缩至0-1之间,当x非常大时,该函数无限接近1;当x为非常大的负数时候,该函数无限接近0。sigmoid函数很好的解释了神经元收到刺激后是否会激活和向后传递的场景(0-没有被激活;1-被完全激活),在早起神经网络中用的比较多。

  • 缺点:sigmoid激活函数饱和时梯度值非常小,故网络层数较深时易出现梯度消失
  • 卷积神经网络的原理与实现 卷积神经网络基本概念_python_17


2.Relu激活函数
  • Relu(Rectified Linear Unit),线性整流函数,又叫修正线性单元。该函数被认为有一定的生物学原理,并且由于在实践中通常有着比其他常用函数更好的效果。对于进入神经元的输入x,使用先行整流激活函数的神经元会输出max(0,wTx+b)
  • 缺点:在于当反向传播过程中有一个非常大的梯度经过时,反向传播更新后可能导致权重分布中心小于0,反向传播无法更新权重,即进入失活状态

卷积神经网络的原理与实现 卷积神经网络基本概念_神经网络_18

4.2 Convolution Layer池化层

在卷积层之后,通常在CNN层之间添加池化层。池化的功能是不断降低维数,以减少网络中的参数和计算次数。这缩短了训练时间并控制过度拟合。
最常见的池类型是max pooling,它在每个窗口中占用最大值。需要事先指定这些窗口大小。这会降低特征图的大小,同时保留重要信息。

4.2.1MaxPooling下采样层

Max Pooling主要的好处是当图片整个平移几个Pixel的话对判断上完全不会造成影响,以及有很好的抗杂讯功能。
目的:对特征图进行稀疏处理,减少数据数据运算量

池化层示意图1:

卷积神经网络的原理与实现 卷积神经网络基本概念_python_19


池化层示意图2:

卷积神经网络的原理与实现 卷积神经网络基本概念_神经网络_20

4.2.2AveragPooling下采样层下采样层

  • 没有训练参数
  • 只改变特征矩阵的w和h(深度和高度),不改变channel(深度)
  • 一般poolsize和stride相同

卷积神经网络的原理与实现 卷积神经网络基本概念_神经网络_21

最常见的池化层是规模为2*2, 步幅为2,对输入的每个深度切片进行下采样。
每个MAX操作对四个数进行,如下图所示:

池化操作将保存深度大小不变。
如果池化层的输入单元大小不是二的整数倍,
一般采取边缘补零(zero-padding)的方式补成2的倍数,然后再池化。

卷积神经网络的原理与实现 卷积神经网络基本概念_神经网络_22

4.3 Fully Connected Layer 全连接层

基本上全连接层的部分就是将之前的结果平坦化之后接到最基本的神经网络了

卷积神经网络的原理与实现 卷积神经网络基本概念_神经网络_23


卷积神经网络的原理与实现 卷积神经网络基本概念_卷积神经网络的原理与实现_24


卷积神经网络的原理与实现 卷积神经网络基本概念_计算机视觉_25