卷积神经网络概论(Convolutional Neural Network,CNN)
卷积神经网络基础
与普通神经网络相比,卷积神经网络有一些特殊的层,也有一些卷积神经网络中特有的专有名词,本文将会逐一介绍。
全连接层(Fully Connected Layer)
全连接层可以理解为神经网络基础中的“隐藏层”。(同样的,包含权重向量
W
W
W和激活(激励)函数)
对于全连接层的作用,举个例子:
-
有一张32 x 32 x 3的图片(宽和高为32px,有RGB三个通道,因此可以理解为32 x 32 x 3的矩阵)
-
先将其拉伸为3072 x 1的向量作为神经网络的输入,然后和权重向量
W
W
W做点乘,再通过激活函数(Sigmoid 或 Tanh)
-
输出结果,这个就是全连接层的最终结果
特征层(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
-
条件:
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=1∗3,Input=1∗7
-
过程:
-

卷积计算:
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=13Inputi∗Kerneli=5∗10+2∗5+6∗11=126
B
=
.
.
.
B=…
B=...
以此类推
最终获得一个
1
∗
5
的
O
u
t
p
u
t
1*5的Output
1∗5的Output
例子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=1∗3,Input=1∗7
-
过程:

卷积计算同例子1
最终获得一个
1
∗
3
的
O
u
t
p
u
t
1*3的Output
1∗3的Output
-
二维卷积
例子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=3∗3,Input=7∗7
-
过程:
-

卷积计算同例子1(自行举一反三)
最终会获得一个
5
∗
5
的
O
u
t
p
u
t
5*5的Output
5∗5的Output
例子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=3∗3,Input=7∗7
-
过程:
由于行列性质一样,这里只观察列:
计算过程中,卷积覆盖到的列:
(
1
,
2
,
3
)
−
(
4
,
5
,
6
)
−
(
7
,
?
,
?
)
(1,2,3)-(4,5,6)-(7,?,?)
(1,2,3)−(4,5,6)−(7,?,?)
此时很明显,第三次卷积计算的时候,有两列不存在(不存在8,9列)。
因此这个卷积是有错误的,在最后缺少输入——没法计算。
-
三维卷积(多了一个卷积堆叠)
例子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=5∗5∗3,Input=32∗32∗3
-
过程:
-

还是做点乘,且每一次滑动都将带来
5
∗
5
∗
3
=
75
5*5*3=75
5∗5∗3=75的计算量。
最终生成了一个
28
∗
28
∗
1
28*28*1
28∗28∗1的
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
28∗28∗6的新Output

卷积神经网络
所有应该学的基础知识你都学到了,那么现在,可以正式介绍卷积神经网络了。
卷积神经网络是由一系列卷积层经过激活来得到的。
接下来要介绍一种更加通用的卷积形式:
-
先介绍一个常用方法——填充(Pad),如:在
7
∗
7
7*7
7∗7的
I
n
p
u
t
Input
Input周围做一个像素的填充,变成
8
∗
8
8*8
8∗8
-
这里给出通用卷积层的计算公式:
-
条件:
- 输入图像
I
n
p
u
t
=
W
1
∗
H
1
∗
D
1
Input=W_1*H_1*D_1
Input=W1∗H1∗D1(代表宽+高+通道[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=SW1−F+2P+1
H
2
=
H
1
−
F
+
2
P
S
+
1
H_2=\frac{H_1-F+2P}{S}+1
H2=SH1−F+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=5∗5∗3,K=10,Pad=2,Input=32∗32∗3
-
通过以上条件可以计算出,特征层(feature map)的大小为
32
∗
32
∗
10
32*32*10
32∗32∗10,同时每个Kernel的参数个数是
5
∗
5
∗
3
+
1
=
76
5*5*3+1=76
5∗5∗3+1=76(
+
1
+1
+1表示
b
i
a
s
bias
bias)。
-
因此这一层需要学习的参数个数为
76
∗
10
=
760
76*10=760
76∗10=760
-

通过一层层的卷积运算(包括点乘+激活(激励)函数),就得到了一个卷积的神经网络。
与传统的神经网络不同的是,卷积层的计算是包含了空间信息的。
池化层
池化(
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=F∗F,Input=W1∗H1∗D1(代表宽+高+通道[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=SW1−F+1
H
2
=
H
1
−
F
S
+
1
H_2=\frac{H_1-F}{S}+1
H2=SH1−F+1
D
2
=
D
1
D_2=D_1
D2=D1
-
例子7
一个
4
∗
4
4*4
4∗4的特征层,经过池化
K
e
r
n
e
l
=
2
∗
2
,
S
t
r
i
d
e
=
2
Kernel=2*2,Stride=2
Kernel=2∗2,Stride=2的
M
a
x
p
o
o
l
i
n
g
Max \space pooling
Max pooling池化操作后,可以得到一个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)xk−E[k] (说实话,我tm也不是很懂)