卷积神经网络LeNet
在这一讲中,我们将讲解目前深度学习领域最常用的一个模型—卷积神经网络(
Convolutional Neural Network, CNN
)。
1. CNN的历史
CNN
的历史可以追溯到1980年Fukushima
发明的神经认知机(neocognitron
),这是第一个通过自动学习卷积核的人工神经网络系统,具备了CNN
最基础的性质。在1998年,在贝尔实验室工作的Yann LeCun
开发了一套能够识别手写数字的系统,即识别一张二值图片是0到9数字当中的哪一个。Yann LeCun
以自己的名字命名了这个CNN
为LeNet
,这是CNN
第一次走入实际的应用领域,Yann LeCun
的工作基本上定义了目前CNN
当中常用的技术,包括自动学习卷积核、多层结构、降采样和全连接技术等等组成部分。
2. 卷积神经网络LeNet
2.1 经典的LeNet结构
下图2是经典的LeNet
的结构,它包含7
层,首先是一个输入层,输入一张32×32
的二值图像,LeNet
有2个卷积层,分别用C1
和C3
表示,同时它有2个降采样层S2
和S4
,最后它有2个全连接层C5
和F6
,1个输出层。
2.2 卷积过程
首先,我们了解一下卷积的概念,如下图3(a)所示,假设输入是一张32×32
的彩色图片,这张图片有RGB
三个颜色的分量。在图中,我们可以把这张图片表示成一个长(height
)、宽(width
)都是32
,而通道数channel
为3
的一个张量(tensor
)。我们将图像和一个卷积核(convolutional kernal
)进行卷积运算,假设这个卷积核是另一个5×5×3
的张量,如图3(b)所示,这个卷积核从左上到右下以步长stride=1
进行滑动,每滑到一个位置,我们把卷积核与该位置图像重合的像素值相乘然后再相加得到一个数(如图3(b)示意图,仅示意非本例),将每次滑动的数排列起来将得到一个28×28×1
的张量。我们把获得的这个28×28×1
的张量叫作特征图(Feature Map
),如图3(a)的右边所示,这就是一幅图像经过卷积核卷积运算的全过程。
在这个例子中,为什么获得的特征图长和宽都是28
呢?
我们简要说一下其中的道理,我们先看特征图的长,特征图的第1个数是卷积核在最左上端的时候与图像相乘再相加的结果,由于卷积核的长是5,因此,这个时候它覆盖的图像长这个方向第1到第5个像素。接下来,特征图以步长stride=1
向右移动了一个步数,那么此时卷积核覆盖的图像长这个方向第2到第6个像素,以此类推,卷积核不断向右移动,直到移动28次后,覆盖的图像长这个方向第28到第32个像素,此时,卷积核的最右边已经到达了图像的最右边,即图像的第32个像素,因此特征图的长就是28。同样的道理可以推出,特征图的宽也是28。卷积过程动态示意图如下图4所示(仅示意非本例)。
3. LeNet-5网络结构分析
3.1 卷积核参数更新
在LeNet
中,第一层卷积层C1
,我们用了6个卷积核卷积原来的图像,因此我们获得了6个28×28
的特征图,用简化的画法可以看到,我们可以直接把这6个特征图并到一起作为最后的显示结果。由于这6个卷积核的参数是待定的,所以我们需要在训练过程中通过后向传播算法对他们进行更新。
接下来,我们简要的讲一下如何求解卷积核中参数的梯度,从而完成对卷积核参数的更新,如下图6所示。
假设我们计算一个3×3
的图像与一个2×2
的卷积核卷积,stride=1
,图像的像素值分别用x1
到x9
表示,卷积核的参数分别用w1
到w4
表示,最终我们得到的2×2
的特征图,它的参数用p1
到p4
表示。根据前面卷积操作的流程,我们可以把 p1
到p4
写成如下的形式:
写出来稍微有点复杂,但是在图6上利用卷积的性质我们很容易获得这些式子。以上这4个式子等价于如下权值共享网络。
在图7中,w1,w2,w3,w4
各自被用了4次。因此我们假设整个LeNet
最终的目标函数为 E E E,那么通过链式求导法则,我们可以很方便的得到 ∂ E ∂ w 1 , ∂ E ∂ w 2 , ∂ E ∂ w 3 , ∂ E ∂ w 4 \frac {∂E}{∂w_1},\frac {∂E}{∂w_2},\frac {∂E}{∂w_3},\frac {∂E}{∂w_4} ∂w1∂E,∂w2∂E,∂w3∂E,∂w4∂E,如下式所示:
∂ E ∂ w 1 = ∂ E ∂ p 1 x 1 + ∂ E ∂ p 2 x 2 + ∂ E ∂ p 3 x 4 + ∂ E ∂ p 4 x 5 \frac {∂E}{∂w_1}=\frac {∂E}{∂p_1}x_1+\frac {∂E}{∂p_2}x_2+\frac {∂E}{∂p_3}x_4+\frac {∂E}{∂p_4}x_5 ∂w1∂E