文章目录
1. 卷积神经网络是啥
1.1 卷积神经网络长啥样?
一个好的卷积神经网络,大概类似于下面这种结构
卷积神经网络由:卷积层(Convolution Layer),池化层层(Pooling Layer),全连接层(Fully Connected Layer) 三种结构自由搭配组成。
但是通常的套路均为:
一个Input Layer
+ N个卷积层Convolution Layer
叠加,然后(可选)叠加一个Pooling Layer
,重复这个结构M次,最后加上K个Fully Connected Layer
。
那么图1的结构为:
Input + 2 * [1 * Conv + Pool] + 2 * Fully Connected Network
。
也就是说 N=1, M=2, K=2
1.2 拿来干啥?
图像、语音识别领域的重要突破都是卷积神经网络取得的,除了上述之外,还有其他的功能。
不过,最主要的就是在图像、语音和文本方面的应用。
以图像为例:
- 要获得某些特征,不需要观察全部图片,只要知道图片的一小部分即可。(filter的作用)
- 同样的特征,可能出现在图片中的不同部分,但是代表的含义是一样的。检测同种特征,只要共享参数就行了,不必要针对不同位置的同一特征训练不同的神经元。
- 做subsampling不会影响对图像意义的理解。
2. 三种层都是些啥?
2.1 卷积层
-
排列方式:每层的神经元是按照三维排列的,也就是排成一个长方体的样子,有宽度、高度和深度。
那么,按照上述定义,输入层的长宽对应输入图像的宽度和高度,深度为1。 -
作用:
卷积层对其进行操作后,得到了三个Feature Map。就是这个卷积层包含三个Filter,也就是三套参数,每个Filter都可以把原始输入图像卷积得到一个Feature Map,三个Filter就可以得到三个Feature Map,也叫做:通道(channel)。至于一个卷积层可以有多少个Filter,那是可以自由设定的。也就是说,卷积层的Filter个数也是一个超参数。
2.2 池化层
- 排列方式同卷积层。
- 作用:Pooling层对三个Feature Map做了下采样,得到了三个更小的Feature Map。
2.3 全连接层
全连接神经网络每层的神经元是按照一维排列的,也就是排成一条线。
3. 卷积神经网络的计算
3.1 卷积的前向计算
3.1.1 互相关计算
对于一个
5
×
5
5 \times 5
5×5的图片,通过进行
3
×
3
3 \times 3
3×3的filter卷积,最后得到一个
3
×
3
3 \times 3
3×3的Feature Map。
用
X
i
,
j
X_{i,j}
Xi,j表示图像的第
i
i
i行
j
j
j列,
w
m
n
w_{mn}
wmn表示权重的第
m
m
m行
n
n
n列,
w
b
w_b
wb表示filter的偏置项,用
a
i
j
a_{ij}
aij表示Feature Map的第
i
i
i行
j
j
j列元素,用
f
f
f表示激活函数,这里的激活函数选用
R
e
l
u
Relu
Relu,该函数具体细节为:Relu函数,则计算公式为:
a
i
,
j
=
f
(
∑
m
=
0
2
∑
n
=
0
2
w
m
,
n
x
i
+
m
,
j
+
n
+
w
b
)
(3.1)
a_{i,j}=f(\sum_{m=0}^{2}\sum_{n=0}^{2}w_{m,n}x_{i+m,j+n}+w_b) \tag{3.1}
ai,j=f(m=0∑2n=0∑2wm,nxi+m,j+n+wb)(3.1)
公式(3.1),叫做互相关。
a
0
,
0
=
f
(
∑
m
=
0
2
∑
n
=
0
2
w
m
,
n
x
m
+
0
,
n
+
0
+
w
b
)
=
f
(
w
0
,
0
x
0
,
0
+
w
0
,
1
x
0
,
1
+
w
0
,
2
x
0
,
2
+
w
1
,
0
x
1
,
0
+
w
1
,
1
x
1
,
1
+
w
1
,
2
x
1
,
2
+
w
2
,
0
x
2
,
0
+
w
2
,
1
x
2
,
1
+
w
2
,
2
x
2
,
2
+
w
b
)
=
f
(
1
+
0
+
1
+
0
+
1
+
0
+
0
+
0
+
1
+
0
)
=
f
(
4
)
=
4
\begin{aligned} a_{0,0}&=f(\sum_{m=0}^{2}\sum_{n=0}^{2}w_{m,n}x_{m+0,n+0}+w_b)\\ &=f(w_{0,0}x_{0,0}+w_{0,1}x_{0,1}+w_{0,2}x_{0,2}+w_{1,0}x_{1,0}+w_{1,1}x_{1,1}+w_{1,2}x_{1,2}+w_{2,0}x_{2,0}+w_{2,1}x_{2,1}+w_{2,2}x_{2,2}+w_b)\\ &=f(1+0+1+0+1+0+0+0+1+0)\\ &=f(4) &=4 \end{aligned}
a0,0=f(m=0∑2n=0∑2wm,nxm+0,n+0+wb)=f(w0,0x0,0+w0,1x0,1+w0,2x0,2+w1,0x1,0+w1,1x1,1+w1,2x1,2+w2,0x2,0+w2,1x2,1+w2,2x2,2+wb)=f(1+0+1+0+1+0+0+0+1+0)=f(4)=4
a
0
,
1
=
f
(
∑
m
=
0
2
∑
n
=
0
2
w
m
,
n
x
m
+
0
,
n
+
1
+
w
b
)
=
r
e
l
u
(
w
0
,
0
x
0
,
1
+
w
0
,
1
x
0
,
2
+
w
0
,
2
x
0
,
3
+
w
1
,
0
x
1
,
1
+
w
1
,
1
x
1
,
2
+
w
1
,
2
x
1
,
3
+
w
2
,
0
x
2
,
1
+
w
2
,
1
x
2
,
3
+
w
2
,
2
x
2
,
3
+
w
b
)
=
r
e
l
u
(
1
+
0
+
0
+
0
+
1
+
0
+
0
+
0
+
1
+
0
)
=
r
e
l
u
(
3
)
=
3
\begin{aligned} a_{0,1}&=f(\sum_{m=0}^{2}\sum_{n=0}^{2}w_{m,n}x_{m+0,n+1}+w_b)\\ &=relu(w_{0,0}x_{0,1}+w_{0,1}x_{0,2}+w_{0,2}x_{0,3}+w_{1,0}x_{1,1}+w_{1,1}x_{1,2}+w_{1,2}x_{1,3}+w_{2,0}x_{2,1}+w_{2,1}x_{2,3}+w_{2,2}x_{2,3}+w_b)\\ &=relu(1+0+0+0+1+0+0+0+1+0)\\ &=relu(3)\\ &=3 \end{aligned}
a0,1=f(m=0∑2n=0∑2wm,nxm+0,n+1+wb)=relu(w0,0x0,1+w0,1x0,2+w0,2x0,3+w1,0x1,1+w1,1x1,2+w1,2x1,3+w2,0x2,1+w2,1x2,3+w2,2x2,3+wb)=relu(1+0+0+0+1+0+0+0+1+0)=relu(3)=3
动画过程为:
3.1.2 卷积计算
在本节中,定义了这样一个操作:
C
=
A
∗
B
(3.2)
C=A*B \tag{3.2}
C=A∗B(3.2)
公式(3.2)的运算规则为:
C
s
,
t
=
∑
0
m
a
−
1
∑
0
n
a
−
1
A
m
,
n
B
s
−
m
,
t
−
n
(3.3)
\begin{aligned} C_{s,t}&=\sum_0^{m_a-1}\sum_0^{n_a-1} A_{m,n}B_{s-m,t-n} \end{aligned} \tag{3.3}
Cs,t=0∑ma−10∑na−1Am,nBs−m,t−n(3.3)
其中,$s,t $满足:
0
≤
s
<
m
a
+
m
b
−
1
,
0
≤
t
<
n
a
+
n
b
−
1
0\le{s}\lt{m_a+m_b-1}, 0\le{t}\lt{n_a+n_b-1}
0≤s<ma+mb−1,0≤t<na+nb−1
也就是说
C
1
,
1
=
a
00
x
11
+
a
01
x
10
+
a
10
x
01
+
a
11
x
00
\begin{aligned} C_{1,1}&=a_{00}x_{11}+a_{01}x_{10}+a_{10}x_{01}+a_{11}x_{00} \end{aligned}
C1,1=a00x11+a01x10+a10x01+a11x00
在神经网络中,把公式(3.3)称作卷积。
3.1.3 互相关和卷积的转化
对于公式(3.1)
a
i
,
j
=
f
(
∑
m
=
0
2
∑
n
=
0
2
w
m
,
n
x
i
+
m
,
j
+
n
+
w
b
)
(3.1)
a_{i,j}=f(\sum_{m=0}^{2}\sum_{n=0}^{2}w_{m,n}x_{i+m,j+n}+w_b) \tag{3.1}
ai,j=f(m=0∑2n=0∑2wm,nxi+m,j+n+wb)(3.1)
把矩阵X翻转180度,然后再交换X和W的位置(即把X放在左边而把W放在右边。卷积满足交换率,这个操作不会导致结果变化),那么卷积就变成了互相关。就可以写成如下表达形式:
A
=
f
(
X
d
∗
W
d
+
w
b
)
(3.4)
A=f(X_d*W_d+w_b) \tag{3.4}
A=f(Xd∗Wd+wb)(3.4)
举个栗子:
互相关操作:
Area_11: a 11 a_{11} a11 | Area_12: a 12 a_{12} a12 |
---|---|
Area_21: a 21 a_{21} a21 | Area_22: a 22 a_{22} a22 |
C 11 = w 11 a 11 + w 12 a 12 + w 21 a 21 + w 22 a 22 C_{11}=w_{11}a_{11}+w_{12}a_{12}+w_{21}a_{21}+w_{22}a_{22} C11=w11a11+w12a12+w21a21+w22a22
卷积操作:
翻转之后
Area_11: a 22 a_{22} a22 | Area_12: a 21 a_{21} a21 |
---|---|
Area_21: a 12 a_{12} a12 | Area_22: a 11 a_{11} a11 |
C
11
=
w
11
A
r
e
a
22
+
w
12
A
r
e
a
21
+
w
21
A
r
e
a
12
+
w
22
A
r
e
a
11
C_{11}=w_{11}Area_{22}+w_{12}Area_{21}+w_{21}Area_{12}+w_{22}Area_{11}
C11=w11Area22+w12Area21+w21Area12+w22Area11
C
11
=
w
11
a
11
+
w
12
a
12
+
w
21
a
21
+
w
22
a
22
C_{11}=w_{11}a_{11}+w_{12}a_{12}+w_{21}a_{21}+w_{22}a_{22}
C11=w11a11+w12a12+w21a21+w22a22
3.2 stride
上面的计算过程中,步幅(stride)为1。步幅可以设为大于1的数。例如,当步幅为2时,Feature Map计算如下:
卷积前图像的的宽度记为
W
1
W_1
W1、高度记为
H
1
H_1
H1,卷积后Feature Map的宽度记为
W
2
W_2
W2、高度
H
2
H_2
H2,
F
F
F是filter的宽度,
P
P
P是Zero Padding的数量(Zero Padding是指在原始图像周围补几圈0,如果
P
P
P的值是1,那么就补1圈0;)
S
S
S是步幅,则
W
1
,
H
1
,
W
2
,
H
2
W_1, H_1, W_2, H_2
W1,H1,W2,H2之间的关系为:
W
2
=
(
W
1
−
F
+
2
P
)
/
S
+
1
(3.2)
\begin{aligned} W_2 &= (W_1 - F + 2P)/S + 1 \tag{3.2} \end{aligned}
W2=(W1−F+2P)/S+1(3.2)
H
2
=
(
H
1
−
F
+
2
P
)
/
S
+
1
(3.3)
\begin{aligned} H_2 &= (H_1 - F + 2P)/S + 1 \tag{3.3} \end{aligned}
H2=(H1−F+2P)/S+1(3.3)
以前面的例子来说,
W
1
=
5
W_1=5
W1=5图像宽度,
S
=
3
S=3
S=3filter宽度,Zero Padding=0,步幅
S
=
2
S=2
S=2,则
W
2
=
(
5
−
3
+
2
×
0
)
/
2
+
1
=
2
H
2
=
(
5
−
3
+
2
×
0
)
/
2
+
1
=
2
\begin{aligned} W_2 &= (5 - 3 + 2 \times 0)/2 + 1= 2\\ H_2 &= (5 - 3 + 2 \times 0)/2 + 1 = 2 \end{aligned}
W2H2=(5−3+2×0)/2+1=2=(5−3+2×0)/2+1=2
3.3 深度大于1的卷积计算
如果卷积前的图像深度为D,那么相应的filter的深度也必须为D
a
d
,
i
,
j
=
f
(
∑
d
=
0
D
−
1
∑
m
=
0
F
−
1
∑
n
=
0
F
−
1
w
d
,
m
,
n
x
d
,
i
+
m
,
j
+
n
+
w
b
)
(3.4)
a_{d,i,j}=f(\sum_{d=0}^{D-1}\sum_{m=0}^{F-1}\sum_{n=0}^{F-1}w_{d,m,n}x_{d,i+m,j+n}+w_b) \tag{3.4}
ad,i,j=f(d=0∑D−1m=0∑F−1n=0∑F−1wd,m,nxd,i+m,j+n+wb)(3.4)
D是深度;F是filter的大小(宽度或高度,两者相同);
w
d
,
m
,
n
w_{d,m,n}
wd,m,n表示filter的第
d
d
d层第
m
m
m行第
n
n
n列权重;
a
d
,
i
,
j
a_{d,i,j}
ad,i,j表示图像的第
d
d
d层第
i
i
i行第
j
j
j列像素。
这里面体现了局部连接和权值共享:每层神经元只和上一层部分神经元相连(卷积计算规则),且filter的权值对于上一层所有神经元都是一样的。对于包含两个333的fitler的卷积层来说,其参数数量仅有(333+1)*2=56个,且参数数量与上一层神经元个数无关。与全连接神经网络相比,其参数数量大大减少了。
3.4 pooling
Pooling层主要的作用是下采样,通过去掉Feature Map中不重要的样本,进一步减少参数数量。Pooling的方法很多,最常用的是Max Pooling。Max Pooling实际上就是在n*n的样本中取最大值,作为采样后的样本值。下图是 2 × 2 2 \times 2 2×2 的 max pooling:
除了Max Pooing之外,常用的还有Mean Pooling——取各样本的平均值。
对于深度为D的Feature Map,各层独立做Pooling,因此Pooling后的深度仍然为D。
4. 卷积神经网络的数学推导
训练的原理同全连接神经网络是一样的:利用链式求导计算损失函数对每个权重的偏导数(梯度),然后根据梯度下降公式更新权重。训练算法依然是反向传播算法。
在全连接神经网路中,训练步骤分为:
- 前向计算
计算第 j j j个神经元的输出值 a j = f ( W T ⋅ X ) a_j=f(\boldsymbol{W}^T \centerdot \boldsymbol{X}) aj=f(WT⋅X)。 - 计算误差
反向计算神经元 j j j的误差项 δ j = ∂ E d ∂ n e t j \delta_j=\frac{\partial{E_d}}{\partial{net_j}} δj=∂netj∂Ed - 更新权重及偏差
计算每个神经元连接权重 w j i w_{ji} wji的梯度( w j i w_{ji} wji表示从神经元 j j j连接到神经元 i i i的权重),公式为 ∂ E d ∂ w j i = a i δ j \frac{\partial{E_d}}{\partial{w_{ji}}}=a_i\delta_j ∂wji∂Ed=aiδj,其中, a i a_{i} ai表示神经元 i i i的输出
对于卷积神经网络,由于涉及到局部连接、下采样的等操作,影响到了第二步误差项 δ \delta δ的具体计算方法,而权值共享影响了第三步权重 w w w的梯度的计算方法。
4.1 卷积层
4.1.1 计算目标
我们的任务是计算 w i , j w_{i,j} wi,j的梯度,即 ∂ E d ∂ w i , j \frac{\partial{E_d}}{\partial{w_{i,j}}} ∂wi,j∂Ed以及对偏置项权重的导数: ∂ E d ∂ w b \frac{\partial{E_d}}{\partial{w_b}} ∂wb∂Ed。
4.1.2 卷积层filter权重梯度的计算
我们要在得到第
l
l
l层卷积区域误差的情况下,计算filter的权重的梯度,由于卷积层是权重共享的,因此梯度的计算稍有不同。
如上图所示:
n
e
t
l
=
c
o
n
v
(
W
l
,
a
l
−
1
)
+
W
b
(4.1)
\begin{aligned} \bold{net}^{l}&=conv(\bold{W}^{l}, \bold{a}^{l-1})+\bold{W_b} \tag{4.1} \end{aligned}
netl=conv(Wl,al−1)+Wb(4.1)
a
i
,
j
l
−
1
=
f
l
−
1
(
n
e
t
i
,
j
l
−
1
)
(4.2)
\begin{aligned} a^{l-1}_{i,j}&=f^{l-1}(net^{l-1}_{i,j}) \tag{4.2} \end{aligned}
ai,jl−1=fl−1(neti,jl−1)(4.2)
- 用 a l − 1 \bold{a}^{l-1} al−1表示第 l − 1 l-1 l−1层输出的向量形式
- 用 a i , j l − 1 a^{l-1}_{i,j} ai,jl−1表示第 l − 1 l-1 l−1层第 i i i行第 j j j列神经元的输出。
- w i j l w^l_{ij} wijl是第 l l l层filter的权重,
- W l \bold{W}^{l} Wl是第 l l l层filter的权重矩阵
- 用 w b w_b wb表示filter的偏置项
- 用 W b \bold{W_b} Wb表示filter的偏置项矩阵形式,( w b w_b wb的广播形式)
- c o n v conv conv表示卷积操作。
δ i , j l − 1 = ∂ E ∂ n e t i , j l − 1 (4.3) \begin{aligned} \delta^{l-1}_{i,j}&=\frac{\partial{E}}{\partial{net^{l-1}_{i,j}}}\\ \end{aligned} \tag{4.3} δi,jl−1=∂neti,jl−1∂E(4.3)
- 用 δ i , j l − 1 \delta^{l-1}_{i,j} δi,jl−1表示第 l − 1 l-1 l−1层第 i i i行第 j j j列的误差项;
- 用 n e t i , j l − 1 net^{l-1}_{i,j} neti,jl−1表示第 l − 1 l-1 l−1层第 i i i行第 j j j列神经元的加权输入;
- 用 f l − 1 f^{l-1} fl−1表示第 l − 1 l-1 l−1层的激活函数。
上式中,假设第 l l l中的每个 δ l \delta^l δl值都已经算好,我们要做的是计算第 l − 1 l-1 l−1层每个神经元的误差项 δ l − 1 \delta^{l-1} δl−1。
为了计算偏导数,我们需要考察权重 w i j w_{ij} wij对 E E E的影响。权重项 w i j w_{ij} wij通过影响 n e t i , j l net^l_{i,j} neti,jl的值,进而影响 E E E。我们仍然通过一个具体的例子来看权重项对 n e t i , j l net^l_{i,j} neti,jl的影响,然后再从中总结出规律。
∂
E
d
∂
w
1
,
1
\frac{\partial{E_d}}{\partial{w_{1,1}}}
∂w1,1∂Ed:
n
e
t
1
,
1
j
=
w
1
,
1
a
1
,
1
l
−
1
+
w
1
,
2
a
1
,
2
l
−
1
+
w
2
,
1
a
2
,
1
l
−
1
+
w
2
,
2
a
2
,
2
l
−
1
+
w
b
n
e
t
1
,
2
j
=
w
1
,
1
a
1
,
2
l
−
1
+
w
1
,
2
a
1
,
3
l
−
1
+
w
2
,
1
a
2
,
2
l
−
1
+
w
2
,
2
a
2
,
3
l
−
1
+
w
b
n
e
t
2
,
1
j
=
w
1
,
1
a
2
,
1
l
−
1
+
w
1
,
2
a
2
,
2
l
−
1
+
w
2
,
1
a
3
,
1
l
−
1
+
w
2
,
2
a
3
,
2
l
−
1
+
w
b
n
e
t
2
,
2
j
=
w
1
,
1
a
2
,
2
l
−
1
+
w
1
,
2
a
2
,
3
l
−
1
+
w
2
,
1
a
3
,
2
l
−
1
+
w
2
,
2
a
3
,
3
l
−
1
+
w
b
net^j_{1,1}=w_{1,1}a^{l-1}_{1,1}+w_{1,2}a^{l-1}_{1,2}+w_{2,1}a^{l-1}_{2,1}+w_{2,2}a^{l-1}_{2,2}+w_b\\ net^j_{1,2}=w_{1,1}a^{l-1}_{1,2}+w_{1,2}a^{l-1}_{1,3}+w_{2,1}a^{l-1}_{2,2}+w_{2,2}a^{l-1}_{2,3}+w_b\\ net^j_{2,1}=w_{1,1}a^{l-1}_{2,1}+w_{1,2}a^{l-1}_{2,2}+w_{2,1}a^{l-1}_{3,1}+w_{2,2}a^{l-1}_{3,2}+w_b\\ net^j_{2,2}=w_{1,1}a^{l-1}_{2,2}+w_{1,2}a^{l-1}_{2,3}+w_{2,1}a^{l-1}_{3,2}+w_{2,2}a^{l-1}_{3,3}+w_b
net1,1j=w1,1a1,1l−1+w1,2a1,2l−1+w2,1a2,1l−1+w2,2a2,2l−1+wbnet1,2j=w1,1a1,2l−1+w1,2a1,3l−1+w2,1a2,2l−1+w2,2a2,3l−1+wbnet2,1j=w1,1a2,1l−1+w1,2a2,2l−1+w2,1a3,1l−1+w2,2a3,2l−1+wbnet2,2j=w1,1a2,2l−1+w1,2a2,3l−1+w2,1a3,2l−1+w2,2a3,3l−1+wb
∂
E
d
∂
w
1
,
1
=
∂
E
d
∂
n
e
t
1
,
1
l
∂
n
e
t
1
,
1
l
∂
w
1
,
1
+
∂
E
d
∂
n
e
t
1
,
2
l
∂
n
e
t
1
,
2
l
∂
w
1
,
1
+
∂
E
d
∂
n
e
t
2
,
1
l
∂
n
e
t
2
,
1
l
∂
w
1
,
1
+
∂
E
d
∂
n
e
t
2
,
2
l
∂
n
e
t
2
,
2
l
∂
w
1
,
1
=
δ
1
,
1
l
a
1
,
1
l
−
1
+
δ
1
,
2
l
a
1
,
2
l
−
1
+
δ
2
,
1
l
a
2
,
1
l
−
1
+
δ
2
,
2
l
a
2
,
2
l
−
1
\begin{aligned} \frac{\partial{E_d}}{\partial{w_{1,1}}}&=\frac{\partial{E_d}}{\partial{net^{l}_{1,1}}}\frac{\partial{net^{l}_{1,1}}}{\partial{w_{1,1}}}+\frac{\partial{E_d}}{\partial{net^{l}_{1,2}}}\frac{\partial{net^{l}_{1,2}}}{\partial{w_{1,1}}}+\frac{\partial{E_d}}{\partial{net^{l}_{2,1}}}\frac{\partial{net^{l}_{2,1}}}{\partial{w_{1,1}}}+\frac{\partial{E_d}}{\partial{net^{l}_{2,2}}}\frac{\partial{net^{l}_{2,2}}}{\partial{w_{1,1}}}\\ &=\delta^l_{1,1}a^{l-1}_{1,1}+\delta^l_{1,2}a^{l-1}_{1,2}+\delta^l_{2,1}a^{l-1}_{2,1}+\delta^l_{2,2}a^{l-1}_{2,2} \end{aligned}
∂w1,1∂Ed=∂net1,1l∂Ed∂w1,1∂net1,1l+∂net1,2l∂Ed∂w1,1∂net1,2l+∂net2,1l∂Ed∂w1,1∂net2,1l+∂net2,2l∂Ed∂w1,1∂net2,2l=δ1,1la1,1l−1+δ1,2la1,2l−1+δ2,1la2,1l−1+δ2,2la2,2l−1
所以:
∂
E
d
∂
w
i
,
j
=
∑
m
∑
n
δ
m
,
n
a
i
+
m
,
j
+
n
l
−
1
\frac{\partial{E_d}}{\partial{w_{i,j}}}=\sum_m\sum_n\delta_{m,n}a^{l-1}_{i+m,j+n}
∂wi,j∂Ed=m∑n∑δm,nai+m,j+nl−1
好了,接下来就是求 δ i , j l − 1 \delta^{l-1}_{i,j} δi,jl−1的工作了
4.1.1 步长为1,深度为1,filter为1的卷积求导
假设输入的大小为 3 × 3 3 \times 3 3×3,filter大小为 2 × 2 2 \times 2 2×2,按步长为1卷积,我们将得到 2 × 2 2 \times 2 2×2的feature map。如下图所示:
δ
i
,
j
l
−
1
=
∂
E
∂
n
e
t
i
,
j
l
−
1
=
∂
E
∂
a
i
,
j
l
−
1
∂
a
i
,
j
l
−
1
∂
n
e
t
i
,
j
l
−
1
(4.3)
\begin{aligned} \delta^{l-1}_{i,j}&=\frac{\partial{E}}{\partial{net^{l-1}_{i,j}}}\\ &=\frac{\partial{E}}{\partial{a^{l-1}_{i,j}}}\frac{\partial{a^{l-1}_{i,j}}}{\partial{net^{l-1}_{i,j}}} \end{aligned} \tag{4.3}
δi,jl−1=∂neti,jl−1∂E=∂ai,jl−1∂E∂neti,jl−1∂ai,jl−1(4.3)
-
计算第一项: ∂ E ∂ a i , j l − 1 \frac{\partial{E}}{\partial{a^{l-1}_{i,j}}} ∂ai,jl−1∂E
因为有:
-
对于被filter遍历过1次的点来说 a 11 l − 1 a^{l-1}_{11} a11l−1:计算 ∂ E ∂ a 1 , 1 l − 1 \frac{\partial{E}}{\partial{a^{l-1}_{1,1}}} ∂a1,1l−1∂E,
n e t 1 , 1 l = w 1 , 1 a 1 , 1 l − 1 + w 1 , 2 a 1 , 2 l − 1 + w 2 , 1 a 2 , 1 l − 1 + w 2 , 2 a 2 , 2 l − 1 + w b net^l_{1,1}=w_{1,1}a^{l-1}_{1,1}+w_{1,2}a^{l-1}_{1,2}+w_{2,1}a^{l-1}_{2,1}+w_{2,2}a^{l-1}_{2,2}+w_b net1,1l=w1,1a1,1l−1+w1,2a1,2l−1+w2,1a2,1l−1+w2,2a2,2l−1+wb
所以:
∂ E ∂ a 1 , 1 l − 1 = ∂ E ∂ n e t 1 , 1 l ∂ n e t 1 , 1 l ∂ a 1 , 1 l − 1 = δ 1 , 1 l w 1 , 1 \begin{aligned} \frac{\partial{E}}{\partial{a^{l-1}_{1,1}}}&=\frac{\partial{E}}{\partial{net^{l}_{1,1}}}\frac{\partial{net^{l}_{1,1}}}{\partial{a^{l-1}_{1,1}}}\\ &=\delta^l_{1,1}w_{1,1} \end{aligned} ∂a1,1l−1∂E=∂net1,1l∂E∂a1,1l−1∂net1,1l=δ1,1lw1,1- 对于filter遍历过2次的点来说
a
21
l
−
1
a^{l-1}_{21}
a21l−1:计算
∂
E
∂
a
2
,
1
l
−
1
\frac{\partial{E}}{\partial{a^{l-1}_{2,1}}}
∂a2,1l−1∂E,
n e t 1 , 1 l = w 1 , 1 a 1 , 1 l − 1 + w 1 , 2 a 1 , 2 l − 1 + w 2 , 1 a 2 , 1 l − 1 + w 2 , 2 a 2 , 2 l − 1 + w b n e t 1 , 2 l = w 1 , 1 a 1 , 2 l − 1 + w 1 , 2 a 1 , 3 l − 1 + w 2 , 1 a 2 , 2 l − 1 + w 2 , 2 a 2 , 3 l − 1 + w b net^l_{1,1}=w_{1,1}a^{l-1}_{1,1}+w_{1,2}a^{l-1}_{1,2}+w_{2,1}a^{l-1}_{2,1}+w_{2,2}a^{l-1}_{2,2}+w_b\\ net^l_{1,2}=w_{1,1}a^{l-1}_{1,2}+w_{1,2}a^{l-1}_{1,3}+w_{2,1}a^{l-1}_{2,2}+w_{2,2}a^{l-1}_{2,3}+w_b\\ net1,1l=w1,1a1,1l−1+w1,2a1,2l−1+w2,1a2,1l−1+w2,2a2,2l−1+wbnet1,2l=w1,1a1,2l−1+w1,2a1,3l−1+w2,1a2,2l−1+w2,2a2,3l−1+wb
所以:
∂ E ∂ a 1 , 2 l − 1 = ∂ E ∂ n e t 1 , 1 l ∂ n e t 1 , 1 l ∂ a 1 , 2 l − 1 + ∂ E ∂ n e t 1 , 2 l ∂ n e t 1 , 2 l ∂ a 1 , 2 l − 1 = δ 1 , 1 l w 1 , 2 + δ 1 , 2 l w 1 , 1 \begin{aligned} \frac{\partial{E}}{\partial{a^{l-1}_{1,2}}}&=\frac{\partial{E}}{\partial{net^{l}_{1,1}}}\frac{\partial{net^{l}_{1,1}}}{\partial{a^{l-1}_{1,2}}}+\frac{\partial{E}}{\partial{net^{l}_{1,2}}}\frac{\partial{net^{l}_{1,2}}}{\partial{a^{l-1}_{1,2}}}\\ &=\delta^l_{1,1}w_{1,2}+\delta^l_{1,2}w_{1,1} \end{aligned} ∂a1,2l−1∂E=∂net1,1l∂E∂a1,2l−1∂net1,1l+∂net1,2l∂E∂a1,2l−1∂net1,2l=δ1,1lw1,2+δ1,2lw1,1 - 对于filter遍历过4次点来说
a
22
l
−
1
a^{l-1}_{22}
a22l−1:
n e t 1 , 1 l = w 1 , 1 a 1 , 1 l − 1 + w 1 , 2 a 1 , 2 l − 1 + w 2 , 1 a 2 , 1 l − 1 + w 2 , 2 a 2 , 2 l − 1 + w b n e t 1 , 2 l = w 1 , 1 a 1 , 2 l − 1 + w 1 , 2 a 1 , 3 l − 1 + w 2 , 1 a 2 , 2 l − 1 + w 2 , 2 a 2 , 3 l − 1 + w b n e t 2 , 1 l = w 1 , 1 a 2 , 1 l − 1 + w 1 , 2 a 2 , 2 l − 1 + w 2 , 1 a 3 , 1 l − 1 + w 2 , 2 a 3 , 2 l − 1 + w b n e t 2 , 2 l = w 1 , 1 a 2 , 2 l − 1 + w 1 , 2 a 2 , 3 l − 1 + w 2 , 1 a 3 , 2 l − 1 + w 2 , 2 a 3 , 3 l − 1 + w b net^l_{1,1}=w_{1,1}a^{l-1}_{1,1}+w_{1,2}a^{l-1}_{1,2}+w_{2,1}a^{l-1}_{2,1}+w_{2,2}a^{l-1}_{2,2}+w_b\\ net^l_{1,2}=w_{1,1}a^{l-1}_{1,2}+w_{1,2}a^{l-1}_{1,3}+w_{2,1}a^{l-1}_{2,2}+w_{2,2}a^{l-1}_{2,3}+w_b\\ net^l_{2,1}=w_{1,1}a^{l-1}_{2,1}+w_{1,2}a^{l-1}_{2,2}+w_{2,1}a^{l-1}_{3,1}+w_{2,2}a^{l-1}_{3,2}+w_b\\ net^l_{2,2}=w_{1,1}a^{l-1}_{2,2}+w_{1,2}a^{l-1}_{2,3}+w_{2,1}a^{l-1}_{3,2}+w_{2,2}a^{l-1}_{3,3}+w_b net1,1l=w1,1a1,1l−1+w1,2a1,2l−1+w2,1a2,1l−1+w2,2a2,2l−1+wbnet1,2l=w1,1a1,2l−1+w1,2a1,3l−1+w2,1a2,2l−1+w2,2a2,3l−1+wbnet2,1l=w1,1a2,1l−1+w1,2a2,2l−1+w2,1a3,1l−1+w2,2a3,2l−1+wbnet2,2l=w1,1a2,2l−1+w1,2a2,3l−1+w2,1a3,2l−1+w2,2a3,3l−1+wb
所以:
∂ E ∂ a 2 , 2 l − 1 = ∂ E ∂ n e t 1 , 1 l ∂ n e t 1 , 1 l ∂ a 2 , 2 l − 1 + ∂ E ∂ n e t 1 , 2 l ∂ n e t 1 , 2 l ∂ a 2 , 2 l − 1 + ∂ E ∂ n e t 2 , 1 l ∂ n e t 2 , 1 l ∂ a 2 , 2 l − 1 + ∂ E ∂ n e t 2 , 2 l ∂ n e t 2 , 2 l ∂ a 2 , 2 l − 1 = δ 1 , 1 l w 2 , 2 + δ 1 , 2 l w 2 , 1 + δ 2 , 1 l w 1 , 2 + δ 2 , 2 l w 1 , 1 \begin{aligned} \frac{\partial{E}}{\partial{a^{l-1}_{2,2}}}&=\frac{\partial{E}}{\partial{net^{l}_{1,1}}}\frac{\partial{net^{l}_{1,1}}}{\partial{a^{l-1}_{2,2}}}+\frac{\partial{E}}{\partial{net^{l}_{1,2}}}\frac{\partial{net^{l}_{1,2}}}{\partial{a^{l-1}_{2,2}}}+\frac{\partial{E}}{\partial{net^{l}_{2,1}}}\frac{\partial{net^{l}_{2,1}}}{\partial{a^{l-1}_{2,2}}}+\frac{\partial{E}}{\partial{net^{l}_{2,2}}}\frac{\partial{net^{l}_{2,2}}}{\partial{a^{l-1}_{2,2}}}\\ &=\delta^l_{1,1}w_{2,2}+\delta^l_{1,2}w_{2,1}+\delta^l_{2,1}w_{1,2}+\delta^l_{2,2}w_{1,1} \end{aligned} ∂a2,2l−1∂E=∂net1,1l∂E∂a2,2l−1∂net1,1l+∂net1,2l∂E∂a2,2l−1∂net1,2l+∂net2,1l∂E∂a2,2l−1∂net2,1l+∂net2,2l∂E∂a2,2l−1∂net2,2l=δ1,1lw2,2+δ1,2lw2,1+δ2,1lw1,2+δ2,2lw1,1
仔细观察三个点的求导结果,把第 l l l层的sensitive map周围补一圈0,在与180度翻转后的filter进行cross-correlation,之后就是 δ \delta δ和 w w w的关系就是卷积的关系啊。
因为卷积相当于将filter旋转180度的cross-correlation,因此上图的计算可以用卷积公式完美的表达:
∂ E d ∂ a l = δ l ∗ W l (4.3-1) \frac{\partial{E_d}}{\partial{a_l}}=\delta^l*W^l \tag{4.3-1} ∂al∂Ed=δl∗Wl(4.3-1)
- 对于filter遍历过2次的点来说
a
21
l
−
1
a^{l-1}_{21}
a21l−1:计算
∂
E
∂
a
2
,
1
l
−
1
\frac{\partial{E}}{\partial{a^{l-1}_{2,1}}}
∂a2,1l−1∂E,
-
计算第二项: ∂ a i , j l − 1 ∂ n e t i , j l − 1 \frac{\partial{a^{l-1}_{i,j}}}{\partial{net^{l-1}_{i,j}}} ∂neti,jl−1∂ai,jl−1
因为:
a i , j l − 1 = f ( n e t i , j l − 1 ) a^{l-1}_{i,j}=f(net^{l-1}_{i,j}) ai,jl−1=f(neti,jl−1)
所以有:
∂ a i , j l − 1 ∂ n e t i , j l − 1 = f ′ ( n e t i , j l − 1 ) (4.3-2) \frac{\partial{a^{l-1}_{i,j}}}{\partial{net^{l-1}_{i,j}}}=f'(net^{l-1}_{i,j}) \tag{4.3-2} ∂neti,jl−1∂ai,jl−1=f′(neti,jl−1)(4.3-2)
所以,最终的结果为:
δ i , j l − 1 = ∂ E d ∂ n e t i , j l − 1 = ∂ E d ∂ a i , j l − 1 ∂ a i , j l − 1 ∂ n e t i , j l − 1 = ∑ m ∑ n w m , n l δ i + m , j + n l f ′ ( n e t i , j l − 1 ) (4.4) \begin{aligned} \delta^{l-1}_{i,j}&=\frac{\partial{E_d}}{\partial{net^{l-1}_{i,j}}}\\ &=\frac{\partial{E_d}}{\partial{a^{l-1}_{i,j}}}\frac{\partial{a^{l-1}_{i,j}}}{\partial{net^{l-1}_{i,j}}}\\ &=\sum_m\sum_n{w^l_{m,n}\delta^l_{i+m,j+n}}f'(net^{l-1}_{i,j}) \end{aligned} \tag{4.4} δi,jl−1=∂neti,jl−1∂Ed=∂ai,jl−1∂Ed∂neti,jl−1∂ai,jl−1=m∑n∑wm,nlδi+m,j+nlf′(neti,jl−1)(4.4)
δ l − 1 = δ l ∗ W l ∘ f ′ ( n e t l − 1 ) (4.5) \delta^{l-1}=\delta^l*W^l\circ f'(net^{l-1}) \tag{4.5} δl−1=δl∗Wl∘f′(netl−1)(4.5)
其中,符 ∘ \circ ∘号表示element-wise product,即将矩阵中每个对应元素相乘。注意式4.5中的 δ l − 1 \delta^{l-1} δl−1、 δ l \delta^{l} δl、 n e t l − 1 net^{l-1} netl−1都是矩阵。
4.1.2 步长为S,深度为1,filter为1的卷积求导
步长分别为1和2时前向卷积的结果:
因为步长为2,得到的feature map跳过了相应的部分,也就是图中灰色的部分,这个时候,我们可以通过将灰色的部分填充为0,恢复为stride=1的情况,再应用公式(4.5)即可。
4.1.3 步长为S,深度为D,filter为1的卷积求导
当输入深度为D时,filter的深度也必须为D。
l
−
1
l-1
l−1层的通道
d
i
d_i
di只与filter的
d
i
d_i
di通道的权重进行计算。也就是说,各层用各层的filter,互不干扰。
4.1.4 filter数量为N时的误差传递
filter数量为N时,输出层的个数也为N,第
i
i
i个filter卷积产生输出层的第
i
i
i个feature map。由于第
l
−
1
l-1
l−1层每个加权输入
n
e
t
d
,
i
,
j
l
−
1
net^{l-1}_{d, i,j}
netd,i,jl−1都同时影响了第
l
l
l层所有feature map的输出值,因此,反向计算误差项时,需要使用全导数公式。也就是,我们先使用第
d
d
d个filter对第
l
l
l层相应的第
d
d
d个sensitivity map进行卷积,得到一组N个
l
−
1
l-1
l−1层的偏sensitivity map。依次用每个filter做这种卷积,就得到D组偏sensitivity map。最后在各组之间将N个偏sensitivity map 按元素相加,得到最终的N个
l
−
1
l-1
l−1层的sensitivity map:
δ
l
−
1
=
∑
d
=
0
D
δ
d
l
∗
W
d
l
∘
f
′
(
n
e
t
l
−
1
)
(4.6)
\delta^{l-1}=\sum_{d=0}^D\delta_d^l*W_d^l\circ f'(net^{l-1}) \tag{4.6}
δl−1=d=0∑Dδdl∗Wdl∘f′(netl−1)(4.6)
4.1.6 对偏置项权重的梯度计算
∂
E
d
∂
w
b
=
∂
E
d
∂
n
e
t
1
,
1
l
∂
n
e
t
1
,
1
l
∂
w
b
+
∂
E
d
∂
n
e
t
1
,
2
l
∂
n
e
t
1
,
2
l
∂
w
b
+
∂
E
d
∂
n
e
t
2
,
1
l
∂
n
e
t
2
,
1
l
∂
w
b
+
∂
E
d
∂
n
e
t
2
,
2
l
∂
n
e
t
2
,
2
l
∂
w
b
=
δ
1
,
1
l
+
δ
1
,
2
l
+
δ
2
,
1
l
+
δ
2
,
2
l
=
∑
i
∑
j
δ
i
,
j
l
\begin{aligned} \frac{\partial{E_d}}{\partial{w_b}}&=\frac{\partial{E_d}}{\partial{net^{l}_{1,1}}}\frac{\partial{net^{l}_{1,1}}}{\partial{w_b}}+\frac{\partial{E_d}}{\partial{net^{l}_{1,2}}}\frac{\partial{net^{l}_{1,2}}}{\partial{w_b}}+\frac{\partial{E_d}}{\partial{net^{l}_{2,1}}}\frac{\partial{net^{l}_{2,1}}}{\partial{w_b}}+\frac{\partial{E_d}}{\partial{net^{l}_{2,2}}}\frac{\partial{net^{l}_{2,2}}}{\partial{w_b}}\\ &=\delta^l_{1,1}+\delta^l_{1,2}+\delta^l_{2,1}+\delta^l_{2,2}\\ &=\sum_i\sum_j\delta^l_{i,j} \end{aligned}
∂wb∂Ed=∂net1,1l∂Ed∂wb∂net1,1l+∂net1,2l∂Ed∂wb∂net1,2l+∂net2,1l∂Ed∂wb∂net2,1l+∂net2,2l∂Ed∂wb∂net2,2l=δ1,1l+δ1,2l+δ2,1l+δ2,2l=i∑j∑δi,jl
也就是偏置项的梯度就是sensitivity map所有误差项之和。
4.2 Pooling层
无论max pooling还是mean pooling,都没有需要学习的参数。因此,在卷积神经网络的训练中,Pooling层需要做的仅仅是将误差项传递到上一层,而没有梯度的计算。
4.2.1 Max Pooling误差项的传递
如下图,假设第
l
−
1
l-1
l−1层大小为44,pooling filter大小为22,步长为2,这样,max pooling之后,第
l
l
l层大小为2*2。假设第
l
l
l层的
δ
\delta
δ值都已经计算完毕,我们现在的任务是计算第
l
−
1
l-1
l−1层的
δ
\delta
δ值。
我们用
n
e
t
i
,
j
l
−
1
net^{l-1}_{i,j}
neti,jl−1表示第
l
−
1
l-1
l−1层的加权输入;用
n
e
t
i
,
j
l
net^{l}_{i,j}
neti,jl表示第
l
l
l层的加权输入。对于max pooling来说,除了最大的值之外,其他的传递的值均为0:
n
e
t
1
,
1
l
=
m
a
x
(
n
e
t
1
,
1
l
−
1
,
n
e
t
1
,
2
l
−
1
,
n
e
t
2
,
1
l
−
1
,
n
e
t
2
,
2
l
−
1
)
net^l_{1,1}=max(net^{l-1}_{1,1},net^{l-1}_{1,2},net^{l-1}_{2,1},net^{l-1}_{2,2})
net1,1l=max(net1,1l−1,net1,2l−1,net2,1l−1,net2,2l−1)
所以,如果
n
e
w
11
new_{11}
new11最大的话,则:
∂
n
e
t
1
,
1
l
∂
n
e
t
1
,
1
l
−
1
=
1
∂
n
e
t
1
,
1
l
∂
n
e
t
1
,
2
l
−
1
=
0
∂
n
e
t
1
,
1
l
∂
n
e
t
2
,
1
l
−
1
=
0
∂
n
e
t
1
,
1
l
∂
n
e
t
2
,
2
l
−
1
=
0
\begin{aligned} \frac{\partial{net^l_{1,1}}}{\partial{net^{l-1}_{1,1}}}=1\\ \frac{\partial{net^l_{1,1}}}{\partial{net^{l-1}_{1,2}}}=0\\ \frac{\partial{net^l_{1,1}}}{\partial{net^{l-1}_{2,1}}}=0\\ \frac{\partial{net^l_{1,1}}}{\partial{net^{l-1}_{2,2}}}=0 \end{aligned}
∂net1,1l−1∂net1,1l=1∂net1,2l−1∂net1,1l=0∂net2,1l−1∂net1,1l=0∂net2,2l−1∂net1,1l=0
因此:
δ
1
,
1
l
−
1
=
∂
E
d
∂
n
e
t
1
,
1
l
−
1
=
∂
E
d
∂
n
e
t
1
,
1
l
∂
n
e
t
1
,
1
l
∂
n
e
t
1
,
1
l
−
1
=
δ
1
,
1
l
\begin{aligned} \delta^{l-1}_{1,1}&=\frac{\partial{E_d}}{\partial{net^{l-1}_{1,1}}}\\ &=\frac{\partial{E_d}}{\partial{net^{l}_{1,1}}}\frac{\partial{net^{l}_{1,1}}}{\partial{net^{l-1}_{1,1}}}\\ &=\delta^{l}_{1,1}\\ \end{aligned}
δ1,1l−1=∂net1,1l−1∂Ed=∂net1,1l∂Ed∂net1,1l−1∂net1,1l=δ1,1l
4.2.2 Mean Pooling误差项的传递
n
e
t
1
,
1
j
=
1
4
(
n
e
t
1
,
1
l
−
1
+
n
e
t
1
,
2
l
−
1
+
n
e
t
2
,
1
l
−
1
+
n
e
t
2
,
2
l
−
1
)
net^j_{1,1}=\frac{1}{4}(net^{l-1}_{1,1}+net^{l-1}_{1,2}+net^{l-1}_{2,1}+net^{l-1}_{2,2})
net1,1j=41(net1,1l−1+net1,2l−1+net2,1l−1+net2,2l−1)
所以:
∂
n
e
t
1
,
1
l
∂
n
e
t
1
,
1
l
−
1
=
1
4
∂
n
e
t
1
,
1
l
∂
n
e
t
1
,
2
l
−
1
=
1
4
∂
n
e
t
1
,
1
l
∂
n
e
t
2
,
1
l
−
1
=
1
4
∂
n
e
t
1
,
1
l
∂
n
e
t
2
,
2
l
−
1
=
1
4
\frac{\partial{net^l_{1,1}}}{\partial{net^{l-1}_{1,1}}}=\frac{1}{4}\\ \frac{\partial{net^l_{1,1}}}{\partial{net^{l-1}_{1,2}}}=\frac{1}{4}\\ \frac{\partial{net^l_{1,1}}}{\partial{net^{l-1}_{2,1}}}=\frac{1}{4}\\ \frac{\partial{net^l_{1,1}}}{\partial{net^{l-1}_{2,2}}}=\frac{1}{4}\\
∂net1,1l−1∂net1,1l=41∂net1,2l−1∂net1,1l=41∂net2,1l−1∂net1,1l=41∂net2,2l−1∂net1,1l=41
δ
1
,
2
l
−
1
=
∂
E
d
∂
n
e
t
1
,
2
l
−
1
=
∂
E
d
∂
n
e
t
1
,
1
l
∂
n
e
t
1
,
1
l
∂
n
e
t
1
,
2
l
−
1
=
1
4
δ
1
,
1
l
δ
2
,
1
l
−
1
=
∂
E
d
∂
n
e
t
2
,
1
l
−
1
=
∂
E
d
∂
n
e
t
1
,
1
l
∂
n
e
t
1
,
1
l
∂
n
e
t
2
,
1
l
−
1
=
1
4
δ
1
,
1
l
δ
2
,
2
l
−
1
=
∂
E
d
∂
n
e
t
2
,
2
l
−
1
=
∂
E
d
∂
n
e
t
1
,
1
l
∂
n
e
t
1
,
1
l
∂
n
e
t
2
,
2
l
−
1
=
1
4
δ
1
,
1
l
\begin{aligned} \delta^{l-1}_{1,2}&=\frac{\partial{E_d}}{\partial{net^{l-1}_{1,2}}}\\ &=\frac{\partial{E_d}}{\partial{net^{l}_{1,1}}}\frac{\partial{net^{l}_{1,1}}}{\partial{net^{l-1}_{1,2}}}\\ &=\frac{1}{4}\delta^{l}_{1,1}\\ \delta^{l-1}_{2,1}&=\frac{\partial{E_d}}{\partial{net^{l-1}_{2,1}}}\\ &=\frac{\partial{E_d}}{\partial{net^{l}_{1,1}}}\frac{\partial{net^{l}_{1,1}}}{\partial{net^{l-1}_{2,1}}}\\ &=\frac{1}{4}\delta^{l}_{1,1}\\ \delta^{l-1}_{2,2}&=\frac{\partial{E_d}}{\partial{net^{l-1}_{2,2}}}\\ &=\frac{\partial{E_d}}{\partial{net^{l}_{1,1}}}\frac{\partial{net^{l}_{1,1}}}{\partial{net^{l-1}_{2,2}}}\\ &=\frac{1}{4}\delta^{l}_{1,1}\\ \end{aligned}
δ1,2l−1δ2,1l−1δ2,2l−1=∂net1,2l−1∂Ed=∂net1,1l∂Ed∂net1,2l−1∂net1,1l=41δ1,1l=∂net2,1l−1∂Ed=∂net1,1l∂Ed∂net2,1l−1∂net1,1l=41δ1,1l=∂net2,2l−1∂Ed=∂net1,1l∂Ed∂net2,2l−1∂net1,1l=41δ1,1l
5. 与全连接神经网络有啥关系?
全连接神经网络之所以不太适合图像识别任务,主要有以下几个方面的问题:
5.1 参数数量太多
考虑一个输入10001000像素的图片(一百万像素,现在已经不能算大图了),输入层有10001000=100万节点。假设第一个隐藏层有100个节点(这个数量并不多),那么仅这一层就有(1000*1000+1)*100=1亿参数,这实在是太多了!我们看到图像只扩大一点,参数数量就会多很多,因此它的扩展性很差。
解决办法:局部连接
每个神经元不再和上一层的所有神经元相连,而只和一小部分神经元相连。这样就减少了很多参数。
通俗的说,卷积神经网络中层与层的神经元并不是全连接而是部分连接,就下图而言:
在
6
×
6
6 \times 6
6×6的图像中,如果以全连接神经网络的视角看filter卷积的过程,可以理解为:若使用全连接神经网络,实际上是36个像素共同作用到下一层的某一个神经元上,若使用卷积神经网络,其实是目标区域:
2
,
3
,
4
,
8
,
9
,
10
,
14
,
15
,
16
2,3,4,8,9,10,14,15,16
2,3,4,8,9,10,14,15,16,作用到下一层的某个神经元上,这就大大减少了参数的数量。
5.2 没有利用像素之间的位置信息
对于图像识别任务来说,每个像素和其周围像素的联系是比较紧密的,和离得很远的像素的联系可能就很小了。如果一个神经元和上一层所有神经元相连,那么就相当于对于一个像素来说,把图像的所有像素都等同看待,这不符合前面的假设。当我们完成每个连接权重的学习之后,最终可能会发现,有大量的权重,它们的值都是很小的(也就是这些连接其实无关紧要)。努力学习大量并不重要的权重,这样的学习必将是非常低效的。
解决办法: 权值共享
一组连接可以共享同一个权重,而不是每个连接有一个不同的权重,这样又减少了很多参数。在图中,神经元颜色相同的线代表着拥有同样的权重。
1号像素与下一层输出值为3的神经元之间的权重 = 2号像素与下一层输出值为-1的神经元之间的权重,这是因为这两个像素均由filter中的1号处理。
5.3 网络层数限制
我们知道网络层数越多其表达能力越强,但是通过梯度下降方法训练深度全连接神经网络很困难,因为全连接神经网络的梯度很难传递超过3层。因此,我们不可能得到一个很深的全连接神经网络,也就限制了它的能力。
下采样 可以使用Pooling来减少每层的样本数,进一步减少参数数量,同时还可以提升模型的鲁棒性。也就是filter的应用。
6. 应用
6.1 一维信号+single Channel
处理时序数据,不同的时间点加上不同的channel。
6.2 一维信号+Multiple Channel
在该数据中,我们并不是用一个信号去描述一个时间点,而是用多个数据(一个Vector)去描述时间点
6.3 二维信号+single Channel
处理黑白照片
6.4 二维signal信号+Multiple Channel
处理彩色图片
7. Pytorch中的卷积函数
7.1 conv1d
假设使用conv1d
函数对数据进行操作,那么
- 对数据的要求为:
(batch_size, channel_in=n_features, length=timesteps)
conv1d
初始化的要求为:
(channel_in=n_features, out_channels, kernel_size, stride)
其中:out_channels
代表每一次卷积输出的个数,kernel_size
代表每一次卷积需要考虑的时间长度,stride
代表每一次卷积完成后,下一次开始距离当前开始点的间隔。
假设数据为4个时间点,每个时间点有5个特征,每次进3批,则数据表示为:3 * 4 * 5
,需要卷积的过程考虑2个时间点的特征,每次时间点开始的间隔为1,每次卷积的结果为3个值。
卷积核的大小为2*5
。
那么,- conv1d
初始化:(channel_in=5, out_channels=3, kernel_size=2, stride=1)
数据的格式为(batch_size=3, channel_in=5, length=4)
8. 参考文献
- 《李宏毅深度学习课程》
- 《零基础入门深度学习》