卷积神经网络基础教程
卷积神经网络是指那些至少在网络的一层中使用卷积运算来替代一般的矩阵乘法运算的神经网络。
卷积神经网络是一种专门用来处理具有类似网格结构的数据的神经网络,例如时间序列(可以认为是在时间轴上有规律地采样形成的一维网格)和图像数据(可以看作是二维的像素网格)。
卷积运算
一维场合
卷积的一个重要物理意义是:一个函数(如:单位响应)在另一个函数(如:输入信号)上的加权叠加。
对于线性时不变系统,如果知道该系统的单位响应,那么将单位响应和输入信号求卷积,就相当于把输入信号的各个时间点的单位响应 加权叠加,就直接得到了输出信号。
形象的物理含义见怎样通俗易懂地解释卷积? - 知乎
给定一个输入信号序列x(t),t=1,⋅⋅⋅,n,和单位响应序列(有时也称滤波器)f(t),t=1,⋅⋅⋅,m,一般情况下单位响应的长度m远小于输入信号长度n。
则卷积输出:
y(t)=(f∗x)(t)=∑k=1nf(k)⋅x(t−k+1))(1)
在卷积神经网络中,对于不在
[1,n]范围之内的
x(t)用零补齐(zero-padding),输出长度一般为
n+m−1。此时也称为
宽卷积。另一类是
窄卷积,输出长度为
n−m+1二维场合
二维卷积经常用在图像处理中。给定一个图像xij,1≤i≤M,1≤j≤N,和滤波器fij,1≤i≤m,1≤j≤n,一般m<<M,n<<N。
卷积的输出为:
yij=∑u=1m∑v=1nfuv⋅xi−u+1,j−v+1(2)
在图像处理中,常用的均值滤波(mean filter)就是当前位置的像素值设为滤波器窗口中素有像素的平均值,也就是
fuv=1mn。
CNN中的卷积层
在全连接前馈神经网络中,如果第l层有nl个神经元,第l−1层有nl−1个神经元,连接边有n(l)×n(l−1)个,也就是权重矩阵有n(l)×n(l−1)个参数。当m和n都很大时,权重矩阵的参数非常多,训练的效率会非常低
如果用卷积来代替全连接,第l层的每一个神经元都只和第l−1的一个局部窗口内的神经元相连,构成一个局部连接网络,就可以大大减少权重参数个数。第l层的第i个神经元的输入定义为:
a(l)i=f(∑j=1mw(l)⋅a(l−1)i−j+m+b(l−1)i)=f(∑j=1mw(l)⋅a(l−1)(i−j+m):i+b(l−1)i)(3)
其中
w(l)∈Rm为
m维的滤波器,
a(l−1)(i−j+m):i=[a(l−1)(i−j+m):i,…,a(l)i]T 写成紧凑的向量形式:
a(l)=f(w(l)⊗a(l−1)+b(l−1))(4)
从公式
(4)中可以看到
w(l)和
b(l−1)对于第
l层中的所有神经元都是相同的:
权值共享;在卷积层里面,我们只需要
m+1个参数;第
l+1层的神经元个数不是任意选择的,而是满足
n(l+1)=n(l)−m+1。
上面是一维的卷积层,在图像处理中,图像是以二维矩阵的形式输入到神经网络中的。设假设X(l)∈R(wl×hl)和X(l−1)∈R(wl−1×hl−1)分别是第l层和第l−1层的神经元活性。X(l)的每一个元素为:
X(l)s,t=f(∑i=1u∑j=1vW(l)i,j⋅Xs−i+u,t−j+v+b(l−1))(5)
其中,
W(l)i,j∈Ru×v为两维的滤波器,
b(l−1)为偏置项。第
l层的神经元个数为
(wl×hl),并且
wl=wl−1−u+1,hl=hl−1−v+1。
写成紧凑的向量形式:
X(l)=f(W(l)⊗X(l−1)+b(l−1))(6)
为了增强卷积层的表示能力,我们可以使用
K各不同的滤波器来得到
K组输出,每一组输出都共享一个滤波器。如果把每个滤波器看成一个特征提取器,每一组输出都可以看成是输入图像经过一个特征提取后得到的新特征。因此,在卷积神经网络中每一组输出也叫做一组
特征映射(Feature Map)。
不失一般性,假设第l−1层的特征映射组数为nl−1,每组特征映射的大小为ml−1=wl−1×hl−1。则第l−1层的总神经元数为nl−1×ml−1。第l层的特征映射组数为nl。再假设第l层的每一组特征映射的输入为第l−1层的所有组特征映射,则第l层的第k组特征映射X(l,k)为:
X(l,k)=f(∑p=1nl−1(W(l,k,p)⊗X(l−1,p))+b(l−1,k))(7)
其中,
W(l,k,p)表示第
l−1层的第
p组特征向量到第
l层的第
k组特征映射所需的滤波器。
第
l层的每一组特征映射都需要
nl−1个滤波器以及一个偏置
b。假设每个滤波器的大小为
u×v,那么共需要训练
nl×nl−1×(u×v)+nl个参数。这样,第
l层就得到
nl组特征映射,每一组特征映射的大小为
ml=(wl−1−u+1)×(hl−1−v+1),总的神经元个数为
nl×ml。
有时,第l层的每一组特征映射并不依赖于第l−1层的所有特征映射,也即不同层的特征映射并不是全连接的关系,它们的连接关系可以用一个连接表T来描述。如果第l层的第k组特征映射依赖于前一层的第p组特征映射,则Tp,k=1,否则为0.
X(l,k)=f(∑p=1Tp,k=1nl−1(W(l,k,p)⊗X(l−1,p))+b(l−1,k))(8)
池化(Pooling)
卷积层虽然可以显著减少连接的个数,但是每一个特征映射的神经元个数并没有显著减少。为了解决这个问题,一般会在卷积层后面再加上一个池化(Pooling)操作,也被称为子采样(Subsampling),构成一个子采样层。子采样层可以大大降低特征为数,避免过拟合。
对于卷积层得到的一个特征映射X(l),我们可以将X(l)划分为多个区域Rk,k=1,…,K。这些区域可以重叠,也可以不重叠。则每个区域映射到下一层的神经元X(l+1)k:
X(l+1)k=f(Z(l+1)k)=f(wl+1⋅down(Rk)+b(l))(9)
其中
down是子采样函数,
wl+1和
b(l)分别是可训练的权重和偏置参数。写成紧凑的向量形式:
X(l+1)=f(Z(l+1))=f(wl+1⋅down(Xl)+b(l))(10)
注意到,对于每一组特征映射
Xl,其内部的采样区域
Rk,k=1用到的权重和偏置参数是一样的(参数共享)。
子采样函数
down一般是取区域内所有神经元的最大值(Maximum Pooling)或平均值(Average Pooling)