卷积
卷积(Convolution)是分析数学中一种重要的运算。在信号处理或图像处理中,经常使用一维或二维卷积。
一维卷积
一维卷积经常用在信号处理中,用于计算信号的延迟累积。假设一个信号发生器每个时刻
t
t
t 产生一个信号
x
t
x_t
xt,其信息的衰减率为
w
k
w_k
wk,即在
k
−
1
k-1
k−1 个时间步长后,信息为原来的
w
k
w_k
wk 倍,则在时刻
t
t
t 收到的信号
y
t
y_t
yt 为当前时刻产生的信息和以前时刻延迟信息的叠加,
y
t
=
∑
k
w
k
x
t
−
k
+
1
y_t=\sum_kw_kx_{t-k+1}
yt=k∑wkxt−k+1
称
w
1
,
w
2
,
.
.
.
,
w
K
w_1,w_2,...,w_K
w1,w2,...,wK为滤波器(Filter)或卷积核(Convolution Kernel)。假设滤波器长度为
K
K
K,它和一个信号序列
x
1
,
x
2
,
.
.
.
.
x_1,x_2,....
x1,x2,....的卷积定义为,
y
t
=
∑
k
=
1
K
w
k
x
t
−
k
+
1
y_t=\sum_{k=1}^Kw_kx_{t-k+1}
yt=k=1∑Kwkxt−k+1
信号序列 x \boldsymbol{x} x和滤波器 w \boldsymbol{w} w的卷积记为 y = w ∗ x \boldsymbol{y}=\boldsymbol{w}\ast \boldsymbol{x} y=w∗x。一般情况下滤波器的长度远小于序列的长度。
可以设计不同的滤波器来提取信号序列的不同特征:
- 滤波器 w = [ 1 / K , . . . , 1 / K ] \boldsymbol{w}=[1/K,...,1/K] w=[1/K,...,1/K] ,卷积相当于信号序列的简单移动平均(窗口大小为 K K K);
- 滤波器 w = [ 1 , − 2 , 1 ] \boldsymbol{w}=[1,-2,1] w=[1,−2,1] ,可以近似实现对信号序列的二阶微分,即 x " ( t ) ≈ x ( t − 1 ) + x ( t − 1 ) − 2 x ( t ) x^"(t)\approx x(t-1)+x(t-1)-2x(t) x"(t)≈x(t−1)+x(t−1)−2x(t)
下图给出了两个滤波器的一维卷积示例。可以看出,两个滤波器分别提取了输入序列的不同特征。
- 滤波器 w = [ 1 / 3 , 1 / 3 , 1 / 3 ] \boldsymbol{w}= [1/3, 1/3, 1/3] w=[1/3,1/3,1/3] 可以检测信号序列中的低频信息;
- 滤波器 w = [ 1 , − 2 , 1 ] \boldsymbol{w} = [1, −2, 1] w=[1,−2,1] 可以检测信号序列中的高频信息;
- 高频和低频指信号变化的强烈程度。
二维卷积
在图像处理中,二维卷积经常作为特征提取的有效方法.一幅图像在经过卷积操作后得到结果称为特征映射(Feature Map)。
给定一个图像
X
∈
R
M
×
N
\boldsymbol{X}\in\mathbb{R}^{M\times N}
X∈RM×N 和一个滤波器
W
∈
R
U
×
V
\boldsymbol{W}\in\mathbb{R}^{U\times V}
W∈RU×V ,一般
U
≪
M
,
V
≪
N
U\ll M,V\ll N
U≪M,V≪N,其卷积为
y
i
j
=
∑
u
=
1
U
∑
v
=
1
V
w
u
v
x
i
−
u
+
1
,
j
−
v
+
1
y_{ij}=\sum_{u=1}^U\sum_{v=1}^Vw_{uv}x_{i-u+1,j-v+1}
yij=u=1∑Uv=1∑Vwuvxi−u+1,j−v+1
输入信息 X \boldsymbol{X} X和滤波器 W \boldsymbol{W} W的二维卷积记为 Y = W ∗ X \boldsymbol{Y}=\boldsymbol{W}\ast \boldsymbol{X} Y=W∗X。
下图是一个二维卷积计算实例,为了方便,假设卷积的输出
y
i
j
y_{ij}
yij的下标
(
i
,
j
)
(i,j)
(i,j)是从
(
U
,
V
)
(U,V)
(U,V)开始。
y
33
=
w
11
x
33
+
w
12
x
32
+
w
13
x
31
+
w
21
x
23
+
w
22
x
22
+
w
23
x
21
+
w
31
x
13
+
w
32
x
12
+
w
33
x
11
\begin{aligned} y_{33}&=w_{11}x_{33}+w_{12}x_{32}+w_{13}x_{31}\\ &+w_{21}x_{23}+w_{22}x_{22}+w_{23}x_{21}\\ &+w_{31}x_{13}+w_{32}x_{12}+w_{33}x_{11} \end{aligned}
y33=w11x33+w12x32+w13x31+w21x23+w22x22+w23x21+w31x13+w32x12+w33x11
在机器学习和图像处理领域,卷积的主要功能是在一个图像(或某种特征)上滑动一个卷积核(即滤波器),通过卷积操作得到一组新的特征。在计算卷积的过程中,需要进行卷积核翻转,翻转指从两个维度(从上到下、从左到右)颠倒次序,即旋转180度。
互相关
互相关(Cross-Correlation)是一个衡量两个序列相关性的函数,通常是用滑动窗口的点积计算来实现。给定一个图像
X
∈
R
M
×
N
\boldsymbol{X}\in\mathbb{R}^{M\times N}
X∈RM×N 和卷积核
W
∈
R
U
×
V
\boldsymbol{W}\in\mathbb{R}^{U\times V}
W∈RU×V ,它们的互相关为
y
i
j
=
∑
u
=
1
U
∑
v
=
1
V
w
u
v
x
i
+
u
−
1
,
j
+
v
−
1
y_{ij}=\sum_{u=1}^U\sum_{v=1}^Vw_{uv}x_{i+u-1,j+v-1}
yij=u=1∑Uv=1∑Vwuvxi+u−1,j+v−1
对比可知,互相关和卷积的区别仅仅在于卷积核是否进行翻转,因此互相关也可以称为不翻转卷积。
互相关运算记为
⊗
\otimes
⊗,
Y
=
W
⊗
X
=
r
o
t
180
(
W
)
∗
X
\boldsymbol{Y}=\boldsymbol{W}\otimes \boldsymbol{X}=rot180(\boldsymbol{W})\ast \boldsymbol{X}
Y=W⊗X=rot180(W)∗X
其中, Y ∈ R M − U + 1 , N − V + 1 \boldsymbol{Y}\in\mathbb{R}^{M-U+1,N-V+1} Y∈RM−U+1,N−V+1为输出矩阵, r o t 180 ( ⋅ ) rot180(\cdot) rot180(⋅)表示旋转180度。
在神经网络中使用卷积是为了进行特征抽取,卷积核是否进行翻转和其特征抽取的能力无关.特别是当卷积核是可学习的参数时,卷积和互相关在能力上是等价的。因此,很多深度学习工具中卷积操作其实都是互相关操作。
卷积的变种
卷积核的滑动步长和零填充
- 步长(Stride):指卷积核在滑动时的时间间隔;
- 零填充(Zero Padding):在输入向量两端进行补零。
三类卷积
假设卷积层的输入神经元个数为
M
M
M,卷积大小为
K
K
K,步长为
S
S
S,在输入两端各填补
P
P
P 个0,那么该卷积层的神经元数量为
(
M
−
K
+
2
P
)
/
S
+
1
(M-K+2P)/S + 1
(M−K+2P)/S+1。
- 窄卷积(Narrow Convolution):步长 S = 1 S=1 S=1,两端不补零 P = 0 P=0 P=0,卷积后输出长度为 M − K + 1 M-K+1 M−K+1;
- 宽卷积(Wide Convolution):步长 S = 1 S=1 S=1,两端补零 P = K − 1 P=K-1 P=K−1,卷积后输出长度为 M + K − 1 M+K-1 M+K−1;
- 等宽卷积(Equal-Width Convolution):步长 S = 1 S=1 S=1,两端补零 P = ( K − 1 ) / 2 P=(K-1)/2 P=(K−1)/2,卷积后输出长度为 M M M。
卷积的数学性质
1. 交换性
(二维)宽卷积
给定一个二维图像
X
∈
R
M
×
N
\boldsymbol{X}\in\mathbb{R}^{M\times N}
X∈RM×N 和一个二维卷积核
W
∈
R
U
×
V
\boldsymbol{W}\in\mathbb{R}^{U\times V}
W∈RU×V ,对图像
X
\boldsymbol{X}
X进行零填充,两端各补
U
−
1
U-1
U−1和
V
−
1
V-1
V−1个零,得到全填充(Full Padding)的图像
X
~
∈
R
(
M
+
2
U
−
2
)
×
(
N
+
2
V
−
2
)
\boldsymbol{\tilde{X}}\in\mathbb{R}^{(M+2U-2)\times (N+2V-2)}
X~∈R(M+2U−2)×(N+2V−2),图像
X
\boldsymbol{X}
X和卷积核
W
\boldsymbol{W}
W的宽卷积定义为
W
⊗
~
X
=
W
⊗
X
~
\boldsymbol{W}\tilde{\otimes}\boldsymbol{X}=\boldsymbol{W}\otimes \boldsymbol{\tilde{X}}
W⊗~X=W⊗X~
其中, ⊗ ~ \tilde{\otimes} ⊗~表示宽卷积运算。
交换性
- 若两个卷积信号的长度不受限制,则它们的卷积具有交换性 x ∗ y = y ∗ x \boldsymbol{x}\ast\boldsymbol{y}=\boldsymbol{y}\ast\boldsymbol{x} x∗y=y∗x;
- 若输入信息和卷积核有固定长度,则它们的宽卷积具有交换性 r o t 180 ( W ) ⊗ ~ X = r o t 180 ( X ) ⊗ ~ W rot180(\boldsymbol{W})\tilde{\otimes}\boldsymbol{X}=rot180(\boldsymbol{X})\tilde{\otimes}\boldsymbol{W} rot180(W)⊗~X=rot180(X)⊗~W
2. 导数
假设 Y = W ⊗ X \boldsymbol{Y}=\boldsymbol{W}\otimes \boldsymbol{X} Y=W⊗X,其中 X ∈ R M × N \boldsymbol{X}\in\mathbb{R}^{M\times N} X∈RM×N, W ∈ R U × V \boldsymbol{W}\in\mathbb{R}^{U\times V} W∈RU×V, Y ∈ R ( M + U + 1 ) × ( N − V + 1 ) \boldsymbol{Y}\in\mathbb{R}^{(M+U+1)\times (N-V+1)} Y∈R(M+U+1)×(N−V+1),函数 f ( Y ) ∈ R f(\boldsymbol{Y})\in\mathbb{R} f(Y)∈R为一个标量函数,则
∂ f ( Y ) ∂ w u v = ∑ i = 1 M − U + 1 ∑ j = 1 N − V + 1 ∂ y i j ∂ w u v ∂ f ( Y ) ∂ y i j = ∑ i = 1 M − U + 1 ∑ j = 1 N − V + 1 x i + u − 1 , j + v − 1 ∂ f ( Y ) ∂ y i j = ∑ i = 1 M − U + 1 ∑ j = 1 N − V + 1 ∂ f ( Y ) ∂ y i j x i + u − 1 , j + v − 1 \begin{aligned} \frac{\partial f(\boldsymbol{Y})}{\partial w_{uv}}&=\sum_{i=1}^{M-U+1}\sum_{j=1}^{N-V+1}\frac{\partial y_{ij}}{\partial w_{uv}}\frac{\partial f(\boldsymbol{Y})}{\partial y_{ij}}\\ &=\sum_{i=1}^{M-U+1}\sum_{j=1}^{N-V+1}x_{i+u-1,j+v-1}\frac{\partial f(\boldsymbol{Y})}{\partial y_{ij}}\\ &=\sum_{i=1}^{M-U+1}\sum_{j=1}^{N-V+1}\frac{\partial f(\boldsymbol{Y})}{\partial y_{ij}}x_{i+u-1,j+v-1} \end{aligned} ∂wuv∂f(Y)=i=1∑M−U+1j=1∑N−V+1∂wuv∂yij∂yij∂f(Y)=i=1∑M−U+1j=1∑N−V+1xi+u−1,j+v−1∂yij∂f(Y)=i=1∑M−U+1j=1∑N−V+1∂yij∂f(Y)xi+u−1,j+v−1
可以看出,
∂
f
(
Y
)
∂
W
=
∂
f
(
Y
)
∂
Y
⊗
X
\frac{\partial f(\boldsymbol{Y})}{\partial \boldsymbol{W}}=\frac{\partial f(\boldsymbol{Y})}{\partial \boldsymbol{Y}}\otimes\boldsymbol{X}
∂W∂f(Y)=∂Y∂f(Y)⊗X
同理,
∂
f
(
Y
)
∂
x
s
t
=
∑
i
=
1
M
−
U
+
1
∑
j
=
1
N
−
V
+
1
∂
y
i
j
∂
x
s
t
∂
f
(
Y
)
∂
y
i
j
=
∑
i
=
1
M
−
U
+
1
∑
j
=
1
N
−
V
+
1
w
s
−
i
+
1
,
t
−
j
+
1
∂
f
(
Y
)
∂
y
i
j
\begin{aligned} \frac{\partial f(\boldsymbol{Y})}{\partial x_{st}}&=\sum_{i=1}^{M-U+1}\sum_{j=1}^{N-V+1}\frac{\partial y_{ij}}{\partial x_{st}}\frac{\partial f(\boldsymbol{Y})}{\partial y_{ij}}\\ &=\sum_{i=1}^{M-U+1}\sum_{j=1}^{N-V+1}w_{s-i+1,t-j+1}\frac{\partial f(\boldsymbol{Y})}{\partial y_{ij}} \end{aligned}
∂xst∂f(Y)=i=1∑M−U+1j=1∑N−V+1∂xst∂yij∂yij∂f(Y)=i=1∑M−U+1j=1∑N−V+1ws−i+1,t−j+1∂yij∂f(Y)
其中,当 ( s − i + 1 ) < 1 (s-i+1)<1 (s−i+1)<1或 ( s − i + 1 ) > U (s-i+1)>U (s−i+1)>U或 ( t − j + 1 ) < 1 (t-j+1)<1 (t−j+1)<1或 ( t − j + 1 ) > V (t-j+1)>V (t−j+1)>V时, w s − i + 1 , t − j + 1 = 0 w_{s-i+1,t-j+1}=0 ws−i+1,t−j+1=0,即相当于对 W \boldsymbol{W} W进行了 P = ( M − U , N − V ) P=(M-U,N-V) P=(M−U,N−V)的零填充。
可以看出,
∂
f
(
Y
)
∂
X
=
r
o
t
180
(
∂
f
(
Y
)
∂
Y
)
⊗
~
W
=
r
o
t
180
(
W
)
)
⊗
~
∂
f
(
Y
)
∂
Y
\frac{\partial f(\boldsymbol{Y})}{\partial \boldsymbol{X}}=rot180(\frac{\partial f(\boldsymbol{Y})}{\partial \boldsymbol{Y}})\tilde{\otimes}\boldsymbol{W}=rot180(\boldsymbol{W}))\tilde{\otimes}\frac{\partial f(\boldsymbol{Y})}{\partial \boldsymbol{Y}}
∂X∂f(Y)=rot180(∂Y∂f(Y))⊗~W=rot180(W))⊗~∂Y∂f(Y)
卷积神经网络
卷积神经网络(Convolutional Neural Network,CNN 或ConvNet)一般是由卷积层、汇聚层和全连接层交叉堆叠而成的前馈神经网络。卷积神经网络有三个结构上的特性:局部连接、权重共享以及汇聚。这些特性使得卷积神经网络具有一定程度上的平移、缩放和旋转不变性,和前馈神经网络相比,卷积神经网络的参数更少。
目前常用的卷积网络整体结构:一个卷积块为连续 M M M个卷积层和 b b b个汇聚层( M M M通常设置为2~ 5, b b b为0或1);一个卷积网络中堆叠 N N N个连续的卷积块,然后在后面接着 K K K个全连接层( N N N的取值区间比较大,比如1~ 100或者更大; K K K一般为0~ 2)。
Convolution/卷积层
卷积层的作用是提取一个局部区域的特征,不同的卷积核相当于不同的特征提取器。
图像为二维结构,为了更充分地利用图像的局部信息,通常将神经元组织为三维结构的神经层,其大小为高度
M
×
M\times
M× 宽度
N
×
N\times
N× 深度
D
D
D,由
D
D
D 个
M
×
N
M\times N
M×N 大小的特征映射构成。为了提高卷积网络的表示能力,可以在每一层使用多个不同卷积核得到不同的特征映射,以更好地表示图像的特征。
特征映射(Feature Map)为一幅图像(或其他特征映射)在经过卷积提取到的特征,每个特征映射可以作为一类抽取的图像特征。在输入层,特征映射就是图像本身:如果是灰度图像,就是有一个特征映射,输入层的深度
D
=
1
D=1
D=1;如果是彩色图像,分别有RGB 三个颜色通道的特征映射,输入层的深度
D
=
3
D=3
D=3。
不失一般性,假设一个卷积层的结构如下:
- 输入特征映射组: X ∈ R M × N × D \mathcal{X}\in\mathbb{R}^{M\times N\times D} X∈RM×N×D为三维张量(Tensor),其中每个切片(Slice)矩阵 X d ∈ R M × N \mathcal{X}_d\in\mathbb{R}^{M\times N} Xd∈RM×N为一个输入特征映射, 1 ≤ d ≤ D 1\leq d\leq D 1≤d≤D;
- 输出特征映射组: Y ∈ R M ′ × N ′ × P \mathcal{Y}\in\mathbb{R}^{M'\times N'\times P} Y∈RM′×N′×P为三维张量,其中每个切片矩阵 Y p ∈ R M ′ × N ′ \mathcal{Y}_p\in\mathbb{R}^{M'\times N'} Yp∈RM′×N′ 为一个输出特征映射, 1 ≤ p ≤ P 1\leq p\leq P 1≤p≤P;
- 卷积核: W ∈ R U × V × P × D \mathcal{W}\in\mathbb{R}^{U\times V\times P\times D} W∈RU×V×P×D为四维张量,其中每个切片矩阵 W p , d ∈ R U × V \mathcal{W}_{p,d}\in\mathbb{R}^{U\times V} Wp,d∈RU×V为一个二维卷积核, 1 ≤ p ≤ P 1\leq p\leq P 1≤p≤P, 1 ≤ d ≤ D 1\leq d\leq D 1≤d≤D。
注:
P
P
P理解为卷积核的个数,
D
D
D理解为卷积核的维度。如下左图
P
=
2
,
D
=
1
P=2,D=1
P=2,D=1,右图
P
=
2
,
D
=
3
P=2,D=3
P=2,D=3。
为了计算输出特征映射
Y
p
Y_p
Yp,用卷积核
W
p
,
1
,
W
p
,
2
,
.
.
.
,
W
p
,
D
W_{p,1},W_{p,2},...,W_{p,D}
Wp,1,Wp,2,...,Wp,D 分别对输入特征映射
X
1
,
X
2
,
.
.
.
,
X
D
X_1,X_2,...,X_D
X1,X2,...,XD 进行卷积,然后将卷积结果相加,并加上一个标量偏置
b
p
b_p
bp 得到卷积层的净输入
Z
p
Z_p
Zp, 这里净输入是指没有经过非线性激活函数的净活性值(Net Activation),再经过非线性激活函数后得到输出特征映射
Y
p
Y_p
Yp。
{
Z
p
=
W
p
⊗
X
+
b
p
=
∑
d
=
1
D
W
p
,
d
⊗
X
d
+
b
p
Y
p
=
f
(
Z
p
)
\begin{cases} Z_p=W_p\otimes X+b_p=\sum_{d=1}^DW_{p,d}\otimes X_d+b_p\\ Y_p=f(Z_p) \end{cases}
{Zp=Wp⊗X+bp=∑d=1DWp,d⊗Xd+bpYp=f(Zp)
其中
W
p
∈
R
U
×
V
×
D
W_p\in\mathbb{R}^{U\times V\times D}
Wp∈RU×V×D为三维卷积核,
f
(
⋅
)
f(\cdot)
f(⋅)为非线性激活函数,一般用ReLU函数。
将上述计算过程重复
P
P
P次,得到
P
P
P个输出特征映射
Y
1
,
Y
2
,
.
.
.
,
Y
p
Y_1,Y_2,...,Y_p
Y1,Y2,...,Yp。
卷积层参数
在输入为
X
∈
R
M
×
N
×
D
\mathcal{X}\in\mathbb{R}^{M\times N\times D}
X∈RM×N×D,输出为
Y
∈
R
M
′
×
N
′
×
P
\mathcal{Y}\in\mathbb{R}^{M'\times N'\times P}
Y∈RM′×N′×P的卷积层中,每一个输出特征映射都需要
D
D
D 个卷积核以及一个偏置,假设每个卷积核的大小为
U
×
V
U\times V
U×V,那么共需要
P
×
D
×
(
U
×
V
)
+
P
P\times D\times(U\times V)+P
P×D×(U×V)+P 个参数.
卷积层性质:
- 局部关联:卷积层的每一个神经元都只和下一层中的某个局部窗口内的神经元相连。
- 参数共享:一组固定的权重和不同窗口内的数据做内积;可以理解为一个卷积核只捕捉输入数据中的一种特定的局部特征。
- 相对全连接网络,具有更少的参数。
Pooling/池化/汇聚层/子采样层
汇聚层(Pooling Layer)作用是进行特征选择,降低特征数量,从而减少参数数量。
卷积层虽然可以显著减少网络中连接的数量,但特征映射组中的神经元个数并没有显著减少.如果后面接一个分类器,分类器的输入维数依然很高,很容易出现过拟合。为了解决这个问题,可以增加卷积步长,也可以在卷积层之后加上一个汇聚层,从而降低特征维数,避免过拟合。
假设汇聚层的输入特征映射组为 X ∈ R M × N × D \mathcal{X}\in\mathbb{R}^{M\times N\times D} X∈RM×N×D,对于其中每一个特征映射 X d ∈ R M × N \mathcal{X}_d\in\mathbb{R}^{M\times N} Xd∈RM×N , 1 ≤ d ≤ D 1\leq d\leq D 1≤d≤D,将其划分为很多区域 R d , m n , 1 ≤ m ≤ M ′ , 1 ≤ n ≤ N ′ R_{d,mn},1\leq m \leq M',1\leq n\leq N' Rd,mn,1≤m≤M′,1≤n≤N′,这些区域可以重叠,也可以不重叠。汇聚(Pooling)是指对每个区域进行下采样(Down Sampling)得到一个值,作为这个区域的概括。
对每一个输入特征映射 X d X_d Xd 的 M ′ × N ′ M'\times N' M′×N′ 个区域进行子采样,得到汇聚层的输出特征映射 Y d = { y d , m n } , 1 ≤ m ≤ M ′ , 1 ≤ n ≤ N ′ Y_d=\{y_{d,mn}\},1\leq m\leq M',1\leq n\leq N' Yd={yd,mn},1≤m≤M′,1≤n≤N′。常用的汇聚函数有两种:
- 最大汇聚(Maximum Pooling 或Max Pooling):对于一个区域
R
d
,
m
n
R_{d,mn}
Rd,mn选择这个区域内所有神经元的最大活性值作为这个区域的表示,即
y d , m n = max i ∈ R d , m n x i y_{d,mn}=\max_{i\in R_{d,mn}}x_i yd,mn=i∈Rd,mnmaxxi
其中 x i x_i xi为相应区域内每个神经元的活性值。 - 平均汇聚(Mean Pooling):一般是取区域内所有神经元活性值的平均值,即
y d , m n = 1 ∣ R d , m n ∣ ∑ i ∈ R d , m n x i y_{d,mn}=\frac{1}{|R_{d,mn}|}\sum_{i\in R_{d,mn}}x_i yd,mn=∣Rd,mn∣1i∈Rd,mn∑xi
典型的汇聚层是将每个特征映射划分为 2 × 2 2\times2 2×2 大小的不重叠区域,然后使用最大汇聚的方式进行下采样。过大的采样区域会急剧减少神经元的数量,也会造成过多的信息损失。
汇聚层性质:
- 特征不变性:在图像处理中,池化操作就是图像的resize;
- 特征降维:压缩数据和参数的量,去掉冗余信息;
- 在一定程度上防止过拟合。
Flatten/全连接层
- 将经过多次卷积-池化的输出矩阵作为输入,放入一个全连接前馈神经网络
目前,卷积网络的整体结构趋向于使用更小的卷积核(比如1 × 1 和3 × 3)以及更深的结构(比如层数大于50)。此外,由于卷积的操作性越来越灵活(比如不同的步长),汇聚层的作用也变得越来越小,因此目前比较流行的卷积网络中,汇聚层的比例正在逐渐降低,趋向于全卷积网络。
CNN参数学习
在卷积神经网络中,主要有两种不同功能的神经层:卷积层和汇聚层.而参数为卷积核以及偏置,因此只需要计算卷积层中参数的梯度。
设第
l
l
l 层为卷积层,第
l
−
1
l-1
l−1层的特征映射为
X
l
−
1
∈
R
M
×
N
×
D
X^{l-1}\in\mathbb{R}^{M\times N\times D}
Xl−1∈RM×N×D,通过卷积运算得到第
l
l
l 层的特征映射净输入
Z
l
∈
R
M
′
×
N
′
×
P
Z^l\in\mathbb{R}^{M'\times N'\times P}
Zl∈RM′×N′×P。第
l
l
l 层的第
p
(
1
≤
p
≤
P
)
p(1\leq p\leq P)
p(1≤p≤P)个特征映射净输入
Z
p
l
=
∑
d
=
1
D
W
p
,
d
l
⊗
X
d
l
−
1
+
b
p
l
Z_p^l=\sum_{d=1}^DW^l_{p,d}\otimes X_d^{l-1}+b_p^l
Zpl=d=1∑DWp,dl⊗Xdl−1+bpl
其中 W p , d l W^l_{p,d} Wp,dl和 b p l b_p^l bpl为卷积核及偏置。第 l l l 层共有 P × D P\times D P×D个卷积核和 P P P个偏置。
损失函数
L
L
L关于第
l
l
l 层的卷积核
W
p
,
d
l
W^l_{p,d}
Wp,dl的偏导数为
∂
L
∂
W
p
,
d
l
=
∂
L
∂
Z
p
l
⊗
X
d
l
−
1
=
δ
p
l
⊗
X
d
l
−
1
\frac{\partial L}{\partial W^l_{p,d}}=\frac{\partial L}{\partial Z_p^l}\otimes X_d^{l-1}=\delta_p^l \otimes X_d^{l-1}
∂Wp,dl∂L=∂Zpl∂L⊗Xdl−1=δpl⊗Xdl−1
其中 δ p l = ∂ L ∂ Z p l \delta_p^l=\frac{\partial L}{\partial Z_p^l} δpl=∂Zpl∂L为损失函数关于第 l l l 层的第 p p p 个特征映射净输入 Z p l Z_p^l Zpl的偏导数。
同理可得,损失函数
L
L
L关于第
l
l
l 层的第
p
p
p 个偏置
b
p
l
b^l_p
bpl的偏导数
∂
L
∂
b
p
l
=
∑
i
,
j
[
δ
p
l
]
i
,
j
\frac{\partial L}{\partial b^l_{p}}=\sum_{i,j}[\delta^l_p]_{i,j}
∂bpl∂L=i,j∑[δpl]i,j
在卷积网络中,每层参数的梯度依赖其所在层的误差项 δ p l \delta^l_p δpl:
l + 1 l+1 l+1层为汇聚层
- 汇聚层是下采样操作, l + 1 l+1 l+1 层的每个神经元的误差项 δ \delta δ 对应于第 l l l 层的相应特征映射的一个区域;
- l l l 层的第𝑝 个特征映射中的每个神经元都有一条边和 l + 1 l + 1 l+1 层的第 p p p 个特征映射中的一个神经元相连;
- 根据链式法则,第 l l l 层的一个特征映射的误差项 δ p l \delta_p^l δpl,只需要将 l + 1 l + 1 l+1 层对应特征映射的误差项 δ p l + 1 \delta_p^{l+1} δpl+1 进行上采样操作(和第 l l l 层的大小一样),再和 l l l 层特征映射的激活值偏导数逐元素相乘,就得到了 δ p l \delta^l_p δpl。
δ p l = ∂ L ∂ Z p l = ∂ X p l ∂ Z p l ∂ Z p l + 1 ∂ X p l ∂ L ∂ Z p l + 1 = f l ′ ( Z p l ) ⊙ u p ( δ p l + 1 ) \delta_p^l=\frac{\partial L}{\partial Z_p^l}=\frac{\partial X^l_p}{\partial Z^l_p}\frac{\partial Z^{l+1}_p}{\partial X^l_p}\frac{\partial L}{\partial Z_p^{l+1}}=f'_l(Z_p^l)\odot up(\delta_p^{l+1}) δpl=∂Zpl∂L=∂Zpl∂Xpl∂Xpl∂Zpl+1∂Zpl+1∂L=fl′(Zpl)⊙up(δpl+1)
其中, f l ′ ( ⋅ ) f'_l(\cdot) fl′(⋅)为第 l l l层使用的激活函数,, u p up up 为上采样函数(up sampling),与汇聚层中使用的下采样操作刚好相反:如果下采样是最大汇聚,误差项 δ p l + 1 \delta_p^{l+1} δpl+1 中每个值会直接传递到上一层对应区域中的最大值所对应的神经元,该区域中其他神经元的误差项都设为0;如果下采样是平均汇聚,误差项 δ p l + 1 \delta_p^{l+1} δpl+1 中每个值会被平均分配到上一层对应区域中的所有神经元上。
l
+
1
l+1
l+1层为卷积层
Z
p
l
+
1
=
∑
d
=
1
D
W
p
,
d
l
+
1
⊗
X
d
l
+
b
p
l
+
1
Z_p^{l+1}=\sum_{d=1}^DW^{l+1}_{p,d}\otimes X_d^{l}+b_p^{l+1}
Zpl+1=d=1∑DWp,dl+1⊗Xdl+bpl+1
δ d l = ∂ L ∂ Z d l = ∂ X d l ∂ Z d l ∂ L ∂ X d l = f l ′ ( Z d l ) ⊙ ∑ p = 1 P ( r o t 180 ( W p d l + 1 ) ⊗ ~ ∂ L ∂ Z d l + 1 ) = f l ′ ( Z d l ) ⊙ ∑ p = 1 P ( r o t 180 ( W p d l + 1 ) ⊗ ~ δ p l + 1 ) \begin{aligned} \delta_d^l&=\frac{\partial L}{\partial Z_d^l}\\ &=\frac{\partial X^l_d}{\partial Z^l_d}\frac{\partial L}{\partial X_d^l}\\ &=f'_l(Z_d^l)\odot\sum_{p=1}^P(rot180(W_{pd}^{l+1})\tilde{\otimes}\frac{\partial L}{\partial Z_d^{l+1}})\\ &=f'_l(Z_d^l)\odot\sum_{p=1}^P(rot180(W_{pd}^{l+1})\tilde{\otimes}\delta_p^{l+1}) \end{aligned} δdl=∂Zdl∂L=∂Zdl∂Xdl∂Xdl∂L=fl′(Zdl)⊙p=1∑P(rot180(Wpdl+1)⊗~∂Zdl+1∂L)=fl′(Zdl)⊙p=1∑P(rot180(Wpdl+1)⊗~δpl+1)
为什么CNN适合做图像处理
1. 要识别的patterns相对整张图片来说是很小的一部分
- 卷积层的局部关联特征
2. 同一patterns在不同图片中的位置不同
- 卷积层的参数共享特征
3. subsampling不改变图像特征
自然图像中的物体都具有局部不变性特征,比如尺度缩放、平移、旋转等操作不影响其语义信息.而全连接前馈网络很难提取这些局部不变性特征,一般需要进行数据增强来提高性能。
- 池化层
4. 参数少
一般的深层神经网络做图像处理,会有很多的参数:例如一个像素为
100
×
100
100\times100
100×100的图像,倘若第一层有1000个神经元,第一层神经网络就会有
3
×
100
×
100
×
1000
3\times100\times100\times1000
3×100×100×1000个参数(向量);
存在的问题:
Filter的大小是相同的(共享的参数),如果要识别的pattern对于不同图片其大小不一样,可以对数据作预处理,例如,增加一个网络,这个网络可以判断哪些位置需要做图像的旋转、缩放。
卷积神经网络在学习什么
卷积层-池化层在学习什么
- 定义第 k k k个Filter被activate的程度为第 k k k个Filter中所有元素的和;
- 对于训练好的模型,即Filter中参数固定,现在寻找一张图像x,使得第 k k k个Filter被activate的程度最大;
- 结果见右图,可见每个Filter都在学习某个局部特征。
全连接网络的隐层在学习什么
- 全连接前馈神经网络的隐层的每个神经元都在学习图像的某个整体特征
全连接网络的输出层在学习什么
- 理想地,全连接前馈神经网络的输出层神经元输出应该就是识别出的图像;
- 实际上,输出层神经元的输出基本一样;
- 为输出识别的图像“应有的样子”,增加一些约束:笔迹应该是稀疏的(识别手写字体场景)
CNN应用
Deep Dream
- Deep Dream:给机器一张图片,机器会加上一些它看到的东西
- CNN夸大它看到的
Deep Style
playing go
- 为什么CNN可用于playing go
Speech&Text
CNN in Keras
李宏毅2020深度学习
《神经网络与深度学习》