卷积神经网络

什么是卷积

卷积神经网络怎么共享权重 卷积神经网络参数共享_cnn


计算机处理数据时,时间是离散的,使用离散卷积。

卷积神经网络怎么共享权重 卷积神经网络参数共享_cnn_02


卷积也可以是多维的。如果将一个二维图像I作为输入,也许同样希望使用一个二维卷积核K:

卷积神经网络怎么共享权重 卷积神经网络参数共享_卷积神经网络怎么共享权重_03


卷积有交换性,上式可等价写作:

卷积神经网络怎么共享权重 卷积神经网络参数共享_python_04


互相关的相关函数(除不翻转核函数外,其余跟卷积一样):

卷积神经网络怎么共享权重 卷积神经网络参数共享_python_05


卷积神经网络怎么共享权重 卷积神经网络参数共享_神经网络_06

为什么要卷积

卷积提供了三个重要方法:稀疏交互、稀疏连接、参数共享、等价表达。

和只用全连接层相比,卷积层的两个主要优势在于参数共享稀疏连接,CNN使用这两种方式减少参数。

  1. 参数共享:对模型中的多个函数使用相同的参数。参数共享的特殊形式使卷积层具有变换等价性。一个在图像中某一部分很有用的共享特征检测器(比如一个垂直边缘检测器),可能会对图像的另一部分也很有用。在减少模型所需要的内存空间的同时,提高了模型的统计效率。
  2. 稀疏连接:每一层中,每个输出值只依赖于一小部分输入,不会对输出产生任何影响。

卷积神经网络层次

  1. 输入层INPUT:图像的像素值作为输入。
  2. 卷积层CONV:卷积计算层(核心),卷积层连接输入的一个小区域,并计算卷积核与对应的输入小区域之间的点乘作为输出。
  3. 池化层POOL:取区域平均或最大。在空间维度(W,H)上执行一个降采样的操作。
  4. 全连接层FC:在分类任务中将计算每个类别对应的分数,和普通神经网络一样,FC层的每个神经元都将与其一层的输出相连。

卷积层的操作

卷积层的参数由一组可学习的卷积核Kernel(filter)构成。每个卷积核在空间中都是小尺寸的,但会穿过输入集的整个深度。

  1. 垂直边缘检测的例子:
  2. 边缘检测的类型:

卷积神经网络怎么共享权重 卷积神经网络参数共享_卷积神经网络怎么共享权重_07

卷积神经网络怎么共享权重 卷积神经网络参数共享_cnn_08


卷积神经网络怎么共享权重 卷积神经网络参数共享_python_09

卷积神经网络怎么共享权重 卷积神经网络参数共享_python_10


通过卷积层后如何计算输出特征图的空间尺寸

输出特征图的尺寸由三个超参数控制:深度(卷积核数量)步长零填充值(不希望特征图在卷积过程中尺寸下降太快)。

设输入图像尺寸W、卷积神经元可视野尺寸F、采用的步长S、边缘填充值的数量P,输出特征图的尺寸计算公式:

卷积神经网络怎么共享权重 卷积神经网络参数共享_深度学习_11

  1. 如果想得到与输入尺寸相同的输出结果,设S=1,则
    而F一般为奇数,原因有两点:
  1. P若为偶数,会导致只能使用一些不对称的填充。
  2. P为奇数时只有一个中心像素点,计算机处理更方便
  1. 卷积操作具体过程

卷积神经网络怎么共享权重 卷积神经网络参数共享_cnn_12


卷积层操作的公式:

卷积神经网络怎么共享权重 卷积神经网络参数共享_深度学习_13


卷积神经网络怎么共享权重 卷积神经网络参数共享_python_14


5. 常见的神经元模型(激励函数)线性神经元:

卷积神经网络怎么共享权重 卷积神经网络参数共享_卷积神经网络怎么共享权重_15


线性阈值神经元:

卷积神经网络怎么共享权重 卷积神经网络参数共享_cnn_16


卷积神经网络怎么共享权重 卷积神经网络参数共享_cnn_17


Sigmoid神经元:

卷积神经网络怎么共享权重 卷积神经网络参数共享_python_18


Tanh(双曲正切)神经元:

卷积神经网络怎么共享权重 卷积神经网络参数共享_深度学习_19


ReLU神经元:整流线性单元

卷积神经网络怎么共享权重 卷积神经网络参数共享_python_20


Leaky ReLU激活函数:

卷积神经网络怎么共享权重 卷积神经网络参数共享_cnn_21

Maxout:

卷积神经网络怎么共享权重 卷积神经网络参数共享_深度学习_22


Softmax:

卷积神经网络怎么共享权重 卷积神经网络参数共享_神经网络_23

池化层的操作

  1. Max Pooling最大池化:
    取视野范围内的最大值(现在常见)。最大池化很少用padding。
  2. 卷积神经网络怎么共享权重 卷积神经网络参数共享_深度学习_24

  3. Average Pooling平均池化:取视野范围内的平均值(过去常见)。
  4. 卷积神经网络怎么共享权重 卷积神经网络参数共享_python_25

  5. 统计神经网络的层数时,通常只是统计具有权重和参数的层,而池化层只有一些超级参数,因此很多时候
    把CONV和POOL1共同作为一个卷积。
  6. 卷积神经网络怎么共享权重 卷积神经网络参数共享_cnn_26

  7. 神经网络另一种结构:一个或多个卷积层后面跟随一个池化层,然后一个或多个卷积层后面再跟随一个池化层,然后是几个全连接层。许多参数都存在于神经网络的全连接层。池化层和最大池化层无参数,卷积层参数较少。

全连接层的操作

全连接层(fully connected

layers,FC)在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。在实际使用中,全连接层可由卷积操作实现:对前层是全连接的全连接层可以转化为卷积核为1x1的卷积;而前层是卷积层的全连接层可以转化为卷积核为h*w的全局卷积,h和w分别为前层卷积结果的高和宽。

全连接的核心操作就是矩阵向量乘积。

卷积神经网络怎么共享权重 卷积神经网络参数共享_卷积神经网络怎么共享权重_27


本质就是由一个特征空间线性变换到另一个特征空间。目标空间的任一维——也就是隐层的一个

cell——都认为会受到源空间的每一维的影响。不考虑严谨,可以说,目标向量是源向量的加权和。

在 CNN 中,全连接常出现在最后几层,用于对前面设计的特征做加权和。比如

mnist,前面的卷积和池化相当于做特征工程,后面的全连接相当于做特征加权。

卷积神经网络怎么共享权重 卷积神经网络参数共享_卷积神经网络怎么共享权重_28

经典CNN网络与残差网络

  1. 经典CNN模型
  1. LeNet-5
  2. 卷积神经网络怎么共享权重 卷积神经网络参数共享_cnn_29

  3. 经典LeNet-5网络在池化后进行了非线性函数处理,比如池化后使用了Sigmoid函数。大约有6万个参数。
  4. AlexNet
  5. 卷积神经网络怎么共享权重 卷积神经网络参数共享_神经网络_30

  6. 大约6000万个参数,远多于LeNET-5。 且使用了ReLU激活函数。
  7. VGG:简化了神经网络结构。
  8. 卷积神经网络怎么共享权重 卷积神经网络参数共享_神经网络_31

  9. 共包含1.38亿个参数,但是结构并不复杂,需训练的特征数量巨大。
  1. ResNet:残差网络(152层)

远跳连接:可以从某一网络层获取激活,然后迅速反馈给另外一层,甚至是更深的一层,优势深度超过1000层。残差块有了残差网络,网络越深,训练效果越好、出错越少。当输入输出维度相同时,可以使用恒等快捷连接

卷积神经网络怎么共享权重 卷积神经网络参数共享_python_32


深度残差网络的基本模块:

卷积神经网络怎么共享权重 卷积神经网络参数共享_python_33