目录
卷积神经网络(Convolutional Neural Network,CNN)是一种前馈型的神经网络,其在图像处理方面有出色的表现,其目的就是抽取特征,目前已经被大范围使用到图像处理、自然语言处理等领域中。相比于其他神经网络结构,卷积神经网络需要的参数相对较少,训练较为容易,使的其能够广泛应用。
1、卷积神经网络的结构
我们来看下深度学习的模型结构
卷积神经网络的就是在隐藏层中的体现:
实际应用中,卷积层也叫过滤器、卷积核,我习惯叫过滤器。3个层次中可以增加或减少各个层次的数量以形成复杂的模型。
2、相关参数的表示法
2.1、输入层参数
n(H)Xn(W)Xn(c),表示输入参数。通常也表示为nXnXn,指输入高为n,宽为n,通道数为n的数据;如下面的RGB图像(208X208X208),高、宽和通道均为208。
2.2、padding
padding就是在n(H)Xn(W)Xn(c)的输入数据中填充一些数据,增大n(H)和n(W),使卷积后的n(H)和n(W)与卷积前的n(H)和n(W)保持不变,我习惯用p表示,后续会详细介绍。
2.3、过滤器参数
f(H)Xf(W)f(c), 和输入数据类似。表示用于和输入数据做卷积的过滤器大小,f(c)表示采用了多少个过滤器。
2.4、步长
步长表示卷积的时候过滤器以多长的距离进行移动,我习惯用s表示。
2.5、全连接神经数
FC(n),表示全连接层的神经元数量。
3、卷积层
卷积就是指在原始的输入上进行特征的提取。假如有一个5X5X3的RGB图片,用2X2的过滤器对R进行卷积。
3.1 卷积实例1
相关参数:
- 输入:5X5X3
- 1个过滤器:2X2
- 步长:s=1
- padding:p=0
经过卷积计算后结果为:4X4
那么输出的结果是怎么计算出来的呢?
比如输出中左上角的21,等于过滤器和输入中的左上角2X2的切片根据下面的计算结果得到:21=1*1+8*2+2*2+0*1
在输入数据中过滤器向右按步长s=1移动:17=8*1+4*2+0*2+1*1
在输入数据中过滤器向下按步长s=1移动:13=2*1+0*2+1*2+9*1
输出的结果就是过滤器在输入数据中按步长移动计算得到的结果。
3.2 卷积实例2
如果我把步长参数改为2,即相关参数:
- 输入:5X5X3
- 1个过滤器:2X2
- 步长:s=2
- padding:p=0
经过卷积计算后结果为:2X2
那么输出的结果是又怎么计算出来的呢?
比如输出中左上角的21,等于过滤器和输入中的左上角2X2的切片根据下面的计算结果得到:21=1*1+8*2+2*2+0*1
在输入数据中过滤器向右按步长s=2移动:13=4*1+2*2+1*2+3*1
在输入数据中过滤器向下按步长s=2移动:28=1*1+9*2+2*2+5*1
输出的结果就是过滤器在输入数据中按步长移动计算得到的结果。
3.3 卷积实例3
那么,padding是什么呢,假如我修改p=1,填充0,则:
可以看出,padding是在输入数据的长和宽填充p个长度的自定义值,填充值通常为一些对原来特性影响不大的值(比如0或1),填充后得到新的输出值,然后再卷积计算得到输出。
Padding的作用之一是在过滤器固定的情况下,为了得到一个和输入形状相同或相似的输出。
另外一个作用就是增加输入形状中边缘特征的被卷积次数,使边缘特征在卷积过程中不被弱化和丢失。
3.4卷积实例4
以上对R通道用2X2过滤器进行了卷积,即f=2X2X1;
对R通道进行卷积:
接下来怎么增加通道数呢?
我们假设对G、B通道(假设数据和R通道一样)分别用R通道的方式进行卷积
对G通道进行卷积:
对B通道进行卷积:
把对3个通道的卷积值进行合并,结果输出:4X4X3,这时我们称用的过滤器为f=4X4X3。事实上,对于多通道的输入数据,可以通过应用多个过滤器等到多个通道的输出。
下面,我们总结下输入参数(n(H)Xn(W)Xn(c))、padding(p)参数、过滤器参数(f(H)Xf(W)f(c))、步长参数(s)、输出参数(o(H)Xo(W)Xo(c))之间的关系,通过下面的公式可以计算等到输出参数:
4、池化层
池化(pooling)的作用是强化重要的特性,同时弱化不重要的特性,常用的最大值池化(max-pooling)和平均值池化(avg-pooling),这里以最常用的最大值池(max-pooling)讲解:
相关参数:
- 输入:5X5X3
- (2X2)max-pooling
- 步长:s=1
- padding:p=0
经过卷积计算后结果为:4X4
池化的过程和卷积的过程相似,先定义一个池化的参数(比如2X2)和池化的方式(比如max-pooling),然后按照卷积的的方式按步长大小进行移动即可,如输出中左上角的8=max(1,8,20)
向下移动1,9=max(2,0,1,9)
5、全连接层
如卷积实例3结果输出4X4X3=48个参数,我们的目的是最后输出3个类型(比如猫、狗、人),因此我们添加一个FC(3)的(即3个神经元)全连接层。全连接可以看做上一层输出的所有特征都要和全连接层的所有神经元进行连接,计算的参数为(n(H)Xn(W)Xn(C)XFC(n)),因此全连接层的计算非常复杂。