深度学习4 CNN
1. 卷积
卷积:(f*g)(n)成为
f
f
f 和
g
g
g 的卷积,连续卷积和离散卷积可以表达为如下形式:
(
f
∗
g
)
(
n
)
=
∫
−
∞
∞
f
(
τ
)
g
(
n
−
τ
)
d
τ
n
=
τ
+
(
n
−
τ
)
(
f
∗
g
)
(
n
)
=
∑
τ
=
−
∞
∞
f
(
τ
)
g
(
n
−
τ
)
(f * g)(n)=\int_{-\infty}^{\infty} f(\tau) g(n-\tau) d \tau \ n = \tau + (n - \tau) \ (f * g)(n) = \sum_{\tau = -\infty}^{\infty} f(\tau) g(n-\tau)
(f∗g)(n)=∫−∞∞f(τ)g(n−τ)dτ n=τ+(n−τ) (f∗g)(n)=τ=−∞∑∞f(τ)g(n−τ) 卷积有很多应用,经常用于处理一个输入,通过系统产生一个适应需求的输出。
卷积经常用在信号处理中,用于计算信号的延迟累积。例如,假设一个信号发生器每个时刻
t
t
t 产生一个信号
x
t
x_t
xt ,其信息的衰减率为
w
k
w_k
wk ,即在
k
−
1
k−1
k−1 个时间步长后,信息为原来的
w
k
w_k
wk 倍,假设
w
1
=
1
,
w
2
=
1
/
2
,
w
3
=
1
/
4
w_1 = 1,w_2 = 1/2,w_3 = 1/4
w1=1,w2=1/2,w3=1/4,则时刻
t
t
t 收到的信号
y
t
y_t
yt 为当前时刻产生的信息和以前时刻延迟信息的叠加,即:
y
t
=
1
×
x
t
+
1
/
2
×
x
t
−
1
+
1
/
4
×
x
t
−
2
=
w
1
×
x
t
+
w
2
×
x
t
−
1
+
w
3
×
x
t
−
2
=
∑
k
=
1
3
w
k
⋅
x
t
−
k
+
1
\begin{aligned} y_{t} &=1 \times x_{t}+1 / 2 \times x_{t-1}+1 / 4 \times x_{t-2} \ &=w_{1} \times x_{t}+w_{2} \times x_{t-1}+w_{3} \times x_{t-2} \ &=\sum_{k=1}^{3} w_{k} \cdot x_{t-k+1} \end{aligned}
yt=1×xt+1/2×xt−1+1/4×xt−2 =w1×xt+w2×xt−1+w3×xt−2 =k=1∑3wk⋅xt−k+1 其中
w
k
w_k
wk 就是滤波器,也就是常说的卷积核 convolution kernel。
给定一个输入信号序列
x
x
x 和滤波器
w
w
w,卷积的输出为:
y
t
=
∑
k
=
1
K
w
k
x
t
−
k
+
1
y_t = \sum_{k = 1}^{K} w_k x_{t-k+1}
yt=k=1∑Kwkxt−k+1 不同的滤波器来提取信号序列中的不同特征。
卷积的结果按输出长度不同可以分为三类:
窄卷积:步长 𝑇 = 1 ,两端不补零 𝑃 = 0 ,卷积后输出长度为 𝑀 − 𝐾 + 1
宽卷积:步长 𝑇 = 1 ,两端补零 𝑃 = 𝐾 − 1 ,卷积后输出长度 𝑀 + 𝐾 − 1
等宽卷积:步长 𝑇 = 1 ,两端补零 𝑃 =(𝐾 − 1)/2 ,卷积后输出长度 𝑀
在早期的文献中,卷积一般默认为窄卷积。而目前的文献中,卷积一般默认为等宽卷积。
2. CNN
卷积神经网络的基本结构大致包括:卷积层、激活函数、池化层、全连接层、输出层等。
卷积层:二维卷积运算:给定二维的图像I作为输入,二维卷积核K,卷积运算可表示为 S ( i , j ) = ( I ∗ K ) ( i , j ) = ∑ m ∑ n I ( i − m , j − n ) K ( m , n ) S(i, j)=(I * K)(i, j)=\sum_{m} \sum_{n} I(i-m, j-n) K(m, n) S(i,j)=(I∗K)(i,j)=∑m∑nI(i−m,j−n)K(m,n),卷积核需要进行上下翻转和左右反转 S ( i , j ) = sum ( I ( i − 2 , j − 2 ) I ( i − 2 , j − 1 ) I ( i − 2 , j ) I ( i − 1 , j − 2 ) I ( i − 1 , j − 1 ) I ( i − 1 , j ) I ( i , j − 2 ) I ( i , j − 1 ) I ( i , j ) ] . ∗ [ K ( 2 , 2 ) K ( 2 , 1 ) K ( 2 , 0 ) K ( 1 , 2 ) K ( 1 , 1 ) K ( 1 , 0 ) K ( 0 , 2 ) K ( 0 , 1 ) K ( 0 , 0 ) ] ) \left.S(i, j)=\operatorname{sum}\left(\begin{array}{ccc}I(i-2, j-2) & I(i-2, j-1) & I(i-2, j) \ I(i-1, j-2) & I(i-1, j-1) & I(i-1, j) \ I(i, j-2) & I(i, j-1) & I(i, j)\end{array}\right] . *\left[\begin{array}{rll}K(2,2) & K(2,1) & K(2,0) \ K(1,2) & K(1,1) & K(1,0) \ K(0,2) & K(0,1) & K(0,0)\end{array}\right]\right) S(i,j)=sum(I(i−2,j−2)I(i−2,j−1)I(i−2,j) I(i−1,j−2)I(i−1,j−1)I(i−1,j) I(i,j−2)I(i,j−1)I(i,j)].∗[K(2,2)K(2,1)K(2,0) K(1,2)K(1,1)K(1,0) K(0,2)K(0,1)K(0,0)]) 卷积实际上就是互相关
激活函数:是用来加入非线性因素,提高网络表达能力,卷积神经网络中最常用的是ReLU,Sigmoid使用较少。
池化操作使用某位置相邻输出的总体统计特征作为该位置 的输出,常用最大池化**(max-pooling)和均值池化(average- pooling)**。池化层不包含需要训练学习的参数,仅需指定池化操作的核大小、操作步幅以及池化类型。
全连接层:对卷积层和池化层输出的特征图(二维)进行降维
将学到的特征表示映射到样本标记空间的作用
输出层:对于分类问题:使用Softmax函数
y
i
=
e
z
i
∑
i
=
1
n
e
z
i
y_i = \frac{e^{z_i}}{\sum_{i = 1}^{n}e^{z_i}}
yi=∑i=1neziezi 对于回归问题:使用线性函数
y
i
=
∑
m
=
1
M
w
i
m
x
m
y_i = \sum_{m = 1}^{M}w_{im}x_m
yi=m=1∑Mwimxm
卷积神经网络的训练
Step 1:用随机数初始化所有的卷积核和参数/权重
Step 2:将训练图片作为输入,执行前向步骤(卷积, ReLU,池化以及全连接层的前向传播)并计算每个类别的对应输出概率。
Step 3:计算输出层的总误差
Step 4:反向传播算法计算误差相对于所有权重的梯度,并用梯度下降法更新所有的卷积核和参数/权重的值,以使输出误差最小化