卷积神经网络

2019-07-28  本文已影响0人  单调不减

关于花书中卷积网络的笔记记录于https://www.jianshu.com/p/5a3c90ea0807

卷积神经网络(Convolutional Neural Network,CNN或ConvNet)是一种具有局部连接、权重共享等特性的深层前馈神经网络。卷积神经网络是受生物学上感受野的机制而提出。感受野(Receptive Field)主要是指听觉、视觉等神经系统中一些神经元的特性,即神经元只接受其所支配的刺激区域内的信号

卷积神经网络最早是主要用来处理图像信息。如果用全连接前馈网络来处理图像时,会存在以下两个问题:

目前的卷积神经网络一般是由卷积层、汇聚层和全连接层交叉堆叠而成的前馈神经网络,使用反向传播算法进行训练。卷积神经网络有三个结构上的特性:局部连接,权重共享以及汇聚。这些特性使卷积神经网络具有一定程度上的平移、缩放和旋转不变性。

1、卷积

卷积(Convolution)是分析数学中一种重要的运算。在信号处理或图像处理中,经常使用一维或二维卷积。

一维卷积经常用在信号处理中,用于计算信号的延迟累积。假设一个信号发生器每个时刻t 产生一个信号x_t,其信息的衰减率为w_k,即在k − 1个时间步长后,信息为原来的w_k倍。假设w_1 = 1,w_2 = 1/2,w_3 = 1/4,那么在时刻t收到的信号y_t为当前时刻产生的信息和以前时刻延迟信息的叠加:

\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}

我们把w_{1}, w_{2}, \cdots称为滤波器(Filter)或卷积核(Convolution Kernel)。假设滤波器长度为m,它和一个信号序列x_1, x_2, \cdots的卷积为:

y_{t}=\sum_{k=1}^{m} w_{k} \cdot x_{t-k+1}

信号序列x和滤波器w的卷积定义为:

\mathbf{y}=\mathbf{w} \otimes \mathbf{x}

一般情况下滤波器的长度m远小于信号序列长度n,下图给出一个一维卷积示例,滤波器为[−1, 0, 1]

二维卷积经常用在图像处理中。因为图像为一个两维结构,所以需要将一维卷积进行扩展。给定一个图像X \in \mathbb{R}^{M \times N}和滤波器W \in \mathbb{R}^{m \times n},其卷积为:

y_{i j}=\sum_{u=1}^{m} \sum_{v=1}^{n} w_{u v} \cdot x_{i-u+1, j-v+1}

下图给出一个二维卷积示例:

注意这里的卷积运算并不是在图像中框定卷积核大小的方框并将各像素值与卷积核各个元素相乘并加和,而是先把卷积核旋转180度,再做上述运算。

在图像处理中,卷积经常作为特征提取的有效方法。一幅图像在经过卷积操作后得到结果称为特征映射(Feature Map)

最上面的滤波器是常用的高斯滤波器,可以用来对图像进行平滑去噪;中间和最下面的过滤器可以用来提取边缘特征

1.1、互相关

在机器学习和图像处理领域,卷积的主要功能是在一个图像(或某种特征)上滑动一个卷积核(即滤波器),通过卷积操作得到一组新的特征。在计算卷积的过程中,需要进行卷积核翻转(即上文提到的旋转180度)。在具体实现上,一般会以互相关操作来代替卷积,从而会减少一些不必要的操作或开销。

互相关(Cross-Correlation)是一个衡量两个序列相关性的函数,通常是用滑动窗口的点积计算来实现。给定一个图像X \in \mathbb{R}^{M \times N}和卷积核W \in \mathbb{R}^{m \times n},它们的互相关为:

y_{i j}=\sum_{u=1}^{m} \sum_{v=1}^{n} w_{u v} \cdot x_{i+u-1, j+v-1}

互相关和卷积的区别仅在于卷积核是否进行翻转。因此互相关也可以称为不翻转卷积。当卷积核是可学习的参数时,卷积和互相关是等价的。因此,为了实现上(或描述上)的方便起见,我们用互相关来代替卷积。事实上,很多深度学习工具中卷积操作其实都是互相关操作。

1.2、卷积的变种

在卷积的标准定义基础上,还可以引入滤波器的滑动步长零填充来增加卷积多样性,更灵活地进行特征抽取。

滤波器的步长(Stride)是指滤波器在滑动时的时间间隔。

零填充(Zero Padding)是在输入向量两端进行补零。

假设卷积层的输入神经元个数为n,卷积大小为m,步长为s,神经元两端各填补p个零,那么该卷积层的神经元数量为(n −m + 2p)/s + 1

一般常用的卷积有以下三类:

1.3、卷积的数学性质

因为卷积网络的训练也是基于反向传播算法,因此我们重点关注卷积的导数性质:

假设Y=W\otimes X

X \in \mathbb{R}^{M \times N}W \in \mathbb{R}^{m \times n}Y \in \mathbb{R}^{(M-m+1) \times(N-n+1)}。函数f(Y) \in \mathbb{R}为一个标量函数。

则由y_{i j}= {\sum_{u, v} w_{u v} x_{i+u-1, j+v-1}}有:

\begin{aligned} \frac{\partial f(Y)}{\partial w_{u v}} &=\sum_{i=1}^{M-m+1} \sum_{j=1}^{N-n+1} \frac{\partial y_{i j}}{\partial w_{u v}} \frac{\partial f(Y)}{\partial y_{i j}} \\ &=\sum_{i=1}^{M-m+1} \sum_{j=1}^{N-n+1} x_{i+u-1, j+v-1} \frac{\partial f(Y)}{\partial y_{i j}} \\ &=\sum_{i=1}^{M-m+1} \sum_{j=1}^{N-n+1} \frac{\partial f(Y)}{\partial y_{i j}} x_{u+i-1, v+j-1}\\ \end{aligned}

可以看出,f(Y)关于W的偏导数为X\frac{\partial f(Y)}{\partial Y}的卷积

\frac{\partial f(Y)}{\partial W}=\frac{\partial f(Y)}{\partial Y} \otimes X

同理得到:

\begin{aligned} \frac{\partial f(Y)}{\partial x_{s t}} &=\sum_{i=1}^{M-m+1} \sum_{j=1}^{N-n+1} \frac{\partial y_{i j}}{\partial x_{s t}} \frac{\partial f(Y)}{\partial y_{i j}} \\ &=\sum_{i=1}^{M-m+1} \sum_{j=1}^{N-n+1} w_{s-i+1, t-j+1} \frac{\partial f(Y)}{\partial y_{i j}} \end{aligned}

(s-i+1)<1\ or\ >m(t-j+1)<1\ or\ >n时,w_{s-i+1, t-j+1}=0,即相当于对W进行p=(M-m, N-n)的零填充。从而f(Y)关于X的偏导数为W\frac{\partial f(Y)}{\partial Y}的宽卷积

用互相关的“卷积”表示,即为(注意宽卷积运算具有交换性性质):

\begin{aligned} \frac{\partial f(Y)}{\partial X} &=\operatorname{rot} 180\left(\frac{\partial f(Y)}{\partial Y}\right) \tilde{\otimes} W \\ &=\operatorname{rot} 180(W) \tilde{\otimes} \frac{\partial f(Y)}{\partial Y}\\ \end{aligned}

2、卷积神经网络

2.1、用卷积来代替全连接

在全连接前馈神经网络中,如果第l层有n^{(l)}个神经元,第l − 1层有n^{(l−1)}个神经元,连接边有n^{(l)} × n^{(l−1)}个,也就是权重矩阵有n^{(l)} × n^{(l−1)}个参数。当n^{(l)}n^{(l−1)}都很大时,权重矩阵的参数非常多,训练的效率会非常低。

如果采用卷积来代替全连接,第l层的净输入z^{(l)}为第l − 1层活性值a^{(l−1)}和滤波器\mathbf{w}^{(l)} \in \mathbb{R}^{m}的卷积,即:

\mathbf{z}^{(l)}=\mathbf{w}^{(l)} \otimes \mathbf{a}^{(l-1)}+b^{(l)}

根据卷积的定义,卷积层有两个很重要的性质:

由于局部连接和权重共享,卷积层的参数只有一个m维的权重w^{(l)}和1维的偏置b^{(l)},共m + 1个参数。参数个数和神经元的数量无关。此外,第l层的神经元个数不是任意选择的,而是满足n^{(l)}=n^{(l-1)}-m+1

2.2、卷积层

卷积层的作用是提取一个局部区域的特征,不同的卷积核相当于不同的特征提取器。

特征映射(Feature Map)为一幅图像(或其它特征映射)在经过卷积提取到的特征,每个特征映射可以作为一类抽取的图像特征。为了提高卷积网络的表示能力,可以在每一层使用多个不同的特征映射,以更好地表示图像的特征。

在输入层,特征映射就是图像本身。如果是灰度图像,就是有一个特征映射,深度D = 1;如果是彩色图像,分别有RGB三个颜色通道的特征映射,深度D = 3

不失一般性,假设一个卷积层的结构如下:

为了计算输出特征映射Y^p,用卷积核W^{p, 1}, W^{p, 2}, \cdots, W^{p, D}分别对输入特征映射X^{1}, X^{2}, \cdots, X^{D}进行卷积,然后将卷积结果相加,并加上一个标量偏置b得到卷积层的净输入Z^p再经过非线性激活函数后得到输出特征映射Y^p

\begin{aligned} Z^{p} &=\mathbf{W}^{p} \otimes \mathbf{X}+b^{p}=\sum_{d=1}^{D} W^{p, d} \otimes X^{d}+b^{p} \\ Y^{p} &=f\left(Z^{p}\right)\\ \end{aligned}

在输入为\mathbf{X} \in \mathbb{R}^{M \times N \times D},输出为\mathbf{Y} \in \mathbb{R}^{M^{\prime} \times N^{\prime} \times P}的卷积层中,每个输出特征映射都需要D个滤波器以及一个偏置。假设每个滤波器的大小为m × n,那么共需要P \times D \times(m \times n)+P个参数。

2.3、汇聚层

汇聚层(Pooling Layer)也叫子采样层(Subsampling Layer),其作用是进行特征选择,降低特征数量,并从而减少参数数量。

常用的汇聚函数有两种:

Y_{m, n}^{d}=\max _{i \in R_{m, n}^{d}} x_{i}

其中x_i为区域R_k^d内每个神经元的激活值。

Y_{m, n}^{d}=\frac{1}{\left|R_{m, n}^{d}\right|} \sum_{i \in R_{m, n}^{d}} x_{i}

可以看出,汇聚层不但可以有效地减少神经元的数量,还可以使得网络对一些小的局部形态改变保持不变性,并拥有更大的感受野。

典型的汇聚层是将每个特征映射划分为2 × 2大小的不重叠区域,然后使用最大汇聚的方式进行下采样。汇聚层也可以看做是一个特殊的卷积层,卷积核大小为m × m,步长为s × s,卷积核为max函数或mean函数。过大的采样区域会急剧减少神经元的数量,会造成过多的信息损失。

2.4、典型卷积网络结构

一个典型的卷积网络是由卷积层、汇聚层、全连接层交叉堆叠而成。

目前常用卷积网络结构如图所示,一个卷积块为连续M个卷积层和b个汇聚层(M通常设置为2 ∼ 5b01)。一个卷积网络中可以堆叠N个连续的卷积块,然后在后面接着K个全连接层(N的取值区间比较大,比如1 ∼ 100或者更大;K一般为0 ∼ 2)。

目前,整个网络结构趋向于使用更小的卷积核(比如1 × 13 × 3)以及更深的结构(比如层数大于50)。此外,由于卷积的操作性越来越灵活(比如不同的步长),汇聚层的作用变得也越来越小,因此目前比较流行的卷积网络中,汇聚层的比例也逐渐降低,趋向于全卷积网络

3、参数学习

在全连接前馈神经网络中,梯度主要通过每一层的误差项δ进行反向传播,并进一步计算每层参数的梯度。在卷积神经网络中,主要有两种不同功能的神经层:卷积层和汇聚层。而参数为卷积核以及偏置,因此只需要计算卷积层中参数的梯度。

不失一般性,第l层为卷积层,第l − 1层的输入特征映射为\mathbf{X}^{(l-1)} \in \mathbb{R}^{M \times N \times D},通过卷积计算得到第l层的特征映射净输入\mathbf{Z}^{(l)} \in \mathbb{R}^{M^{\prime} \times N^{\prime} \times P},第l层的第p个特征映射净输入

Z^{(l, p)}=\sum_{d=1}^{D} W^{(l, p, d)} \otimes X^{(l-1, d)}+b^{(l, p)}

\frac{\partial f(Y)}{\partial W}=\frac{\partial f(Y)}{\partial Y} \otimes X得:

\begin{aligned} \frac{\partial \mathcal{L}(Y, \hat{Y})}{\partial W^{(l, p, d)}} &=\frac{\partial \mathcal{L}(Y, \hat{Y})}{\partial Z^{(l, p)}} \otimes X^{(l-1, d)} \\ &=\delta^{(l, p)} \otimes X^{(l-1, d)} \end{aligned}

同理可得,损失函数关于第l层的第p个偏置b^{(l, p)}的偏导数为:

\frac{\partial \mathcal{L}(Y, \hat{Y})}{\partial b^{(l, p)}}=\sum_{i, j}\left[\delta^{(l, p)}\right]_{i, j}

在卷积网络中,每层参数的梯度依赖其所在层的误差项\delta^{(l, p)}

3.1、误差项计算

卷积层和汇聚层中,误差项的计算有所不同,因此我们分别计算其误差项。

3.1.1、汇聚层的误差项

l层的第p个特征映射的误差项δ^{(l,p)}的具体推导过程如下:

\begin{aligned} \delta^{(l, p)} & \triangleq \frac{\partial \mathcal{L}(Y, \hat{Y})}{\partial Z^{(l, p)}} \\ &=\frac{\partial X^{(l, p)}}{\partial Z^{(l, p)}} \cdot \frac{\partial Z^{(l+1, p)}}{\partial X^{(l, p)}} \cdot \frac{\partial \mathcal{L}(Y, \hat{Y})}{\partial Z^{(l+1, p)}} \\ &=f_{l}^{\prime}\left(Z^{(l, p)}\right) \odot \operatorname{up}\left(\delta^{(l+1, p)}\right)\\ \end{aligned}

其中f^′_l (·)为第l层使用的激活函数导数,up为上采样函数(upsampling),与汇聚层中使用的下采样操作刚好相反。如果下采样是最大汇聚(max pooling),误差项\delta^{(l+1, p)}中每个值会直接传递到上一层对应区域中的最大值所对应的神经元,该区域中其它神经元的误差项的都设为0。如果下采样是平均汇聚(meanpooling),误差项\delta^{(l+1, p)}中每个值会被平均分配到上一层对应区域中的所有神经元上。

3.1.2、卷积层的误差项

l层的第d个特征映射的误差项δ^{(l,d)}的具体推导过程如下:

\begin{aligned} \delta^{(l, d)} & \triangleq \frac{\partial \mathcal{L}(Y, \hat{Y})}{\partial Z^{(l, d)}} \\ &=\frac{\partial X^{(l, d)}}{\partial Z^{(l, d)}} \cdot \frac{\partial \mathcal{L}(Y, \hat{Y})}{\partial X^{(l, d)}} \\ &=f_{l}^{\prime}\left(Z^{(l)}\right) \odot \sum_{p=1}^{P}\left(\operatorname{rot} 180\left(W^{(l+1, p, d)}\right) \tilde{\otimes} \frac{\partial \mathcal{L}(Y, \hat{Y})}{\partial Z^{(l+1, p)}}\right) \\ &=f_{l}^{\prime}\left(Z^{(l)}\right) \odot \sum_{p=1}^{P}\left(\operatorname{rot} 180\left(W^{(l+1, p, d)}\right) \tilde{\otimes} \delta^{(l+1, p)}\right) \end{aligned}

其中\tilde{\otimes}为宽卷积。

4、几种典型的卷积神经网络

4.1、LeNet-5

LeNet-5虽然提出的时间比较早,但是是一个非常成功的神经网络模型。基于LeNet-5 的手写数字识别系统在90年代被美国很多银行使用,用来识别支票上面的手写数字。LeNet-5 的网络结构如图:

不计输入层,LeNet-5共有7层,每一层的结构为:

4.2、AlexNet

AlexNet是第一个现代深度卷积网络模型,其首次使用了很多现代深度卷积网络的一些技术方法,比如采用了ReLU作为非线性激活函数,使用Dropout防止过拟合,使用数据增强来提高模型准确率等。AlexNet 赢得了2012 年ImageNet 图像分类竞赛的冠军。

AlexNet的结构如图,包括5个卷积层、3个全连接层和1个softmax层。因为网络规模超出了当时的单个GPU的内存限制,AlexNet 将网络拆为两半,分别放在两个GPU上,GPU间只在某些层(比如第3层)进行通讯。

AlexNet的具体结构如下:

4.3、Inception网络

在卷积网络中,如何设置卷积层的卷积核大小是一个十分关键的问题。在Inception网络中,一个卷积层包含多个不同大小的卷积操作,称为Inception模块。Inception网络是由有多个inception模块和少量的汇聚层堆叠而成

v1版本的Inception模块,采用了4组平行的特征抽取方式,分别为1×1、3× 3、5×5的卷积和3×3的最大汇聚。同时,为了提高计算效率,减少参数数量,Inception模块在进行3×3、5×5的卷积之前、3×3的最大汇聚之后,进行一次1×1的卷积来减少特征映射的深度。如果输入特征映射之间存在冗余信息,1×1的卷积相当于先进行一次特征抽取

Inception网络最早的v1版本就是非常著名的GoogLeNet,并赢得了2014年ImageNet图像分类竞赛的冠军。

4.4、残差网络

残差网络(Residual Network,ResNet)是通过给非线性的卷积层增加直连边的方式来提高信息的传播效率

假设在一个深度网络中,我们期望一个非线性单元f(x; θ)可以去逼近一个目标函数h(x)。如果将目标函数拆分成两部分:恒等函数x和残差函数h(x) − x

h(\mathrm{x})=\mathrm{x}+(h(\mathrm{x})-\mathrm{x})

根据通用近似定理,一个由神经网络构成的非线性单元有足够的能力来近似逼近原始目标函数或残差函数,但实际中后者更容易学习

下图给出了一个典型的残差单元示例。残差单元由多个级联的(等长)卷积层和一个跨层的直连边组成,再经过ReLU激活后得到输出。残差网络就是将很多个残差单元串联起来构成的一个非常深的网络。

上一篇下一篇

猜你喜欢

热点阅读