卷积神经网络概论(Convolutional Neural Network,CNN)

卷积神经网络基础

​ 与普通神经网络相比,卷积神经网络有一些特殊的层,也有一些卷积神经网络中特有的专有名词,本文将会逐一介绍。

全连接层(Fully Connected Layer)

​ 全连接层可以理解为神经网络基础中的“隐藏层”。(同样的,包含权重向量 W W W和**(激励)函数)

​ 对于全连接层的作用,举个例子:

  1. 有一张32 x 32 x 3的图片(宽和高为32px,有RGB三个通道,因此可以理解为32 x 32 x 3的矩阵)

  2. 先将其拉伸为3072 x 1的向量作为神经网络的输入,然后和权重向量 W W W做点乘,再通过**函数(Sigmoid 或 Tanh)

  3. 输出结果,这个就是全连接层的最终结果

特征层(Feature map) & 特征向量

  • 特征向量:
  • 特征层:
    • 当**后的结果为二维向量时,我们称之为特征层(有时也叫**层,activation map)

卷积层(Convolution Layer)

​ 和全连接层不同,卷积层保留了图像的空间特征。(即图片不需要Like全连接层,不做图片的“拉伸”)

​ 为了了解卷积层的过程,先来了解相关名词:

卷积核(Kernel)

​ 卷积核,常常简称为**“卷积”,有时也称为滤波器**(filter)

​ 卷积的大小通常是自定义的长和宽(常常设置为1 x 1,3 x 3,5 x 5等),但是高应该与输入图片的通道数目一致

步长(Stride)

​ 步长是指卷积在输入图片上移动时,需要移动的像素(px)数。

  • s t r i d e = 1 stride=1 stride=1,每次移动1px,则计算过程不会跳过任何像素
  • s t r i d e = 2 stride=2 stride=2,每次移动2px……

感受野

​ 卷积每次滑动所覆盖的范围,在图像处理中叫“感受野”。

​ 下面来了解具体的卷积过程:

  1. 一维卷积:

    例子1
    • 条件: S t r i d e = 1 , K e r n e l = 1 ∗ 3 , I n p u t = 1 ∗ 7 Stride=1,Kernel=1*3,Input=1*7 Stride=1,Kernel=13Input=17

    • 过程:

2.卷积神经网络基础
卷积计算: A = ∑ i = 1 3 I n p u t i ∗ K e r n e l i = 5 ∗ 10 + 2 ∗ 5 + 6 ∗ 11 = 126 A=\sum_{i=1}^{3}{Input_i*Kernel_i}=5*10+2*5+6*11=126 A=i=13InputiKerneli=510+25+611=126

B = . . . B=... B=...

​ 以此类推

最终获得一个 1 ∗ 5 的 O u t p u t 1*5的Output 15Output

例子2
  • 条件: S t r i d e = 2 , K e r n e l = 1 ∗ 3 , I n p u t = 1 ∗ 7 Stride=2,Kernel=1*3,Input=1*7 Stride=2,Kernel=13Input=17

  • 过程:

2.卷积神经网络基础
卷积计算同例子1

最终获得一个 1 ∗ 3 的 O u t p u t 1*3的Output 13Output

  1. 二维卷积

    例子3(一个正常的例子)
    • 条件: S t r i d e = 1 , K e r n e l = 3 ∗ 3 , I n p u t = 7 ∗ 7 Stride=1,Kernel=3*3,Input=7*7 Stride=1,Kernel=33Input=77

    • 过程:

2.卷积神经网络基础
卷积计算同例子1(自行举一反三)

最终会获得一个 5 ∗ 5 的 O u t p u t 5*5的Output 55Output

例子4(一个错误的例子)
  • 条件: S t r i d e = 3 , K e r n e l = 3 ∗ 3 , I n p u t = 7 ∗ 7 Stride=3,Kernel=3*3,Input=7*7 Stride=3,Kernel=33Input=77

  • 过程:

    由于行列性质一样,这里只观察列:

    计算过程中,卷积覆盖到的列: ( 1 , 2 , 3 ) − ( 4 , 5 , 6 ) − ( 7 , ? , ? ) (1,2,3)-(4,5,6)-(7,?,?) (1,2,3)(4,5,6)(7,?,?)

    此时很明显,第三次卷积计算的时候,有两列不存在(不存在8,9列)。

    因此这个卷积是有错误的,在最后缺少输入——没法计算。

  1. 三维卷积(多了一个卷积堆叠)

    例子5

    • 条件: S t r i d e = 1 , K e r n e l = 5 ∗ 5 ∗ 3 , I n p u t = 32 ∗ 32 ∗ 3 Stride=1,Kernel=5*5*3,Input=32*32*3 Stride=1,Kernel=553Input=32323

    • 过程:

2.卷积神经网络基础
还是做点乘,且每一次滑动都将带来 5 ∗ 5 ∗ 3 = 75 5*5*3=75 553=75的计算量。

最终生成了一个 28 ∗ 28 ∗ 1 28*28*1 28281 O u t p u t Output Output,即前面所讲的特征层(feature map)。

但是!!!一个卷积是远远不够的

我们再定义多个不同的卷积(分别完成不同的任务),进行卷积计算。

这里我们直接定义6个不同的卷积( K e r n e l / F i l t e r Kernel/Filter Kernel/Filter),进行卷积计算。

最终的特征层将是一个 28 ∗ 28 ∗ 6 28*28*6 28286的新Output
2.卷积神经网络基础

卷积神经网络

所有应该学的基础知识你都学到了,那么现在,可以正式介绍卷积神经网络了。

卷积神经网络是由一系列卷积层经过**来得到的。

接下来要介绍一种更加通用的卷积形式:

  • 先介绍一个常用方法——填充(Pad),如:在 7 ∗ 7 7*7 77 I n p u t Input Input周围做一个像素的填充,变成 8 ∗ 8 8*8 88

  • 这里给出通用卷积层的计算公式:

    • 条件:

      • 输入图像 I n p u t = W 1 ∗ H 1 ∗ D 1 Input=W_1*H_1*D_1 Input=W1H1D1(代表宽+高+通道[channel])
      • $Kernel=F*F , 个 数 为 ,个数为 K$
      • P a d Pad Pad大小为 P P P
    • 那么经过卷积后的第二层, O u t p u t Output Output的宽+高+通道[channel]为:

      W 2 = W 1 − F + 2 P S + 1 W_2=\frac{W_1-F+2P}{S}+1 W2=SW1F+2P+1

      H 2 = H 1 − F + 2 P S + 1 H_2=\frac{H_1-F+2P}{S}+1 H2=SH1F+2P+1

      D 2 = K D_2=K D2=K

  • 例子6

    • 条件: S t r i d e = 1 , K e r n e l = 5 ∗ 5 ∗ 3 , K = 10 , P a d = 2 , I n p u t = 32 ∗ 32 ∗ 3 Stride=1,Kernel=5*5*3,K=10,Pad=2,Input=32*32*3 Stride=1,Kernel=553K=10Pad=2Input=32323

    • 通过以上条件可以计算出,特征层(feature map)的大小为 32 ∗ 32 ∗ 10 32*32*10 323210,同时每个Kernel的参数个数是 5 ∗ 5 ∗ 3 + 1 = 76 5*5*3+1=76 553+1=76( + 1 +1 +1表示 b i a s bias bias)。

    • 因此这一层需要学习的参数个数为 76 ∗ 10 = 760 76*10=760 7610=760

2.卷积神经网络基础

通过一层层的卷积运算(包括点乘+**(激励)函数),就得到了一个卷积的神经网络。

与传统的神经网络不同的是,卷积层的计算是包含了空间信息的。

池化层

池化( p o o l i n g pooling pooling)——是对图片进行压缩(也叫“降采样”)的一种方法。

​ 池化的方法有很多,如:

  • M a x   p o o l i n g Max\space pooling Max pooling:选”感受野“中权值最大的作为池化层的参数。
  • A v e r a g e   p o o l i n g Average\space pooling Average pooling:计算”感受野“中的平均权值作为池化层的参数。

同样的,这里给出通用池化层的计算公式:

  • 条件: S t r i d e = S Stride=S Stride=S,池化 K e r n e l = F ∗ F , I n p u t = W 1 ∗ H 1 ∗ D 1 Kernel=F*F,Input=W_1*H_1*D_1 Kernel=FFInput=W1H1D1(代表宽+高+通道[channel])​

  • 那么经过池化操作之后, O u t p u t Output Output的宽+高+通道[channel]为:

    W 2 = W 1 − F S + 1 W_2=\frac{W_1-F}{S}+1 W2=SW1F+1

    H 2 = H 1 − F S + 1 H_2=\frac{H_1-F}{S}+1 H2=SH1F+1

    D 2 = D 1 D_2=D_1 D2=D1

  • 例子7

    一个 4 ∗ 4 4*4 44的特征层,经过池化 K e r n e l = 2 ∗ 2 , S t r i d e = 2 Kernel=2*2,Stride=2 Kernel=22,Stride=2 M a x   p o o l i n g Max \space pooling Max pooling池化操作后,可以得到一个2*2的特征层。如图:

2.卷积神经网络基础

在绝大多数情况下,卷积层+池化层+**层,几乎是一个整体般共同出现

批规范化层(BatchNorm Layer)

​ 批规范化层——是为了加速神经网络的收敛过程以及提高训练中的稳定性。

​ Batch——几张图片同时传入网络前向计算,误差为 batch 中所有图片的误差累计。

​ BatchNorm方法——对一个batch 中的数据根据公式作归一化:

x p r e d i c t ( k ) = x k − E [ k ] V a r ( x k ) x_{predict(k)}=\frac{x_k-E[k]}{\sqrt{Var(x_k)}} xpredict(k)=Var(xk) xkE[k] (说实话,我tm也不是很懂)

相关文章: