手写数字识别问题(3)——详解卷积神经网络LeNet-5

由于卷积神经网络结构较为复杂,因此以示例详解卷积神经网络。
作为手写数字识别的巅峰之作, Yann LeCun等人提出了基于卷积神经网络的一个文字识别系统 LeNet-5。(论文为《Gradient-Based Learning Applied to Document Recognition》)该系统90年代就被用于银行手写数字的识别,且识别率极高。
论文链接如下:
百度学术链接:https://xueshu.baidu.com/usercenter/paper/show?paperid=80fd293244903d8233327d0e5ba6de62&site=xueshu_se

https://download.csdn.net/download/didi_ya/12314987
LeNet-5
下面详细解释一下上面这个用于文字识别的LeNet-5深层卷积网络,依次深入了解一下卷积神经网络。

1.输入层(INPUT)32X32图像

首先,输入图片有一个要求,包含数字的部分必须在32*32中间部分,在边缘要留下一定区域的空白地带。The values of the input pixels are normalized so that the background level (white) corresponds to a value of 0.1 and the foreground (black) corresponds to 1.175.
即将输入像素的值进行标准化,使背景级别(白色)对应于0.1的值,而前景(黑色)对应于1.175。原因:所有像素相加平均值为0.

2.卷积层(C1)[email protected]

该卷积层内有6个卷积平面,对应于6个55窗口(卷积核又叫filter或neuron),其运算过程如下图所示。
在这里插入图片描述
即有B11=A00
K22+A01K21+A10K12+A11*K11

同理:
B12=A01K22+A02K21+A11K12+A12K11
B13=A02K22+A03K21+A12K12+A13K11
B14=A03K22+A04K21+A13K12+A14K11
。。。。。。
输入的32X32图像与5X5filter运算后,得到28X28矩阵(32-5+1=28)。
C1层中每个平面内的权值(5X5=25)是相同的,这称为权值共享

因此,INPUT——C1层共有5X5X6=150个权值(一个filter有25个权值),还有6个偏置,因此共有156个需要训练的参数。(5X5+1)为一个神经元(一个5X5filter)产生的连接数,每张平面有28X28个神经元(filter),由于有6张平面,因此共有(5X5+1)X28X28X6=122304个连接数。
在这里插入图片描述

3.采样层(S2)(也称池化层,Pooling)[email protected]

由4个点(2X2filter)采样(也就是4个数的平均值),乘权值再加偏置,得到一个采样层的值。一层中,所乘的权值和所加的偏置值都是相同的,因此一层中只有2个需要训练的参数。因此共有2X6=12个需要训练的参数。共有(2X2+1)X14X14X6=5880个连接数。
在这里插入图片描述

4.卷积层(C3)[email protected]

根据对前面C1层同样的理解,且同样利用5X5filter,我们很容易得到C3层的大小为10x10(14-5+1). 只不过,C3层的变成了16个10x10网络! 为什么呢?具体的组合规则,在 LeNet-5 系统中给出了下面的表格:
在这里插入图片描述
以C3层的第0个平面为例,第0个平面与前面采样层第0、1、2个平面上3个5X5filter相连,以此类推。
观察上图,前6个每个神经元对应于3个平面,6-14每个神经元对应于4个平面,15对应于6个特征平面。为什么这样采样呢?
在这里插入图片描述
原因有两个。首先,不完全连接方案将连接数保持在合理的范围内。更重要的是,它迫使网络的对称性被打破。不同的特征映射提取不同的(希望是互补的)特征,因为它们得到不同的输入集。连接数:
(5x5+1)x3x10x10x6+(5x5+1)x4x10x10x9+(5x5+1)x6x10x10=156000
需要训练的参数:(5x5x3+1)x6+(5x5x4+1)x9+(5x5x6+1)x1=1516个。
在这里插入图片描述

5.采样层(S4)[email protected]

由4个点(2X2filter)采样(也就是4个数的平均值),乘权值再加偏置,得到一个采样层的值。一层中,所乘的权值和所加的偏置值都是相同的,因此一层中只有2个需要训练的参数。因此共有2X16=32个需要训练的参数。共有(2X2+1)X5X5X16=2000个连接数。
在这里插入图片描述

6.卷积层(C5)120

5x5filter与采样层S4卷积运算得到1x1即C5一层只有一个元素。C5中每一个元素与S4中的16个平面全部连接,可以理解为full connection。
需要训练的参数:(5x5x16+1)x120=48120个。
在这里插入图片描述

7.连接层(F6)84

全连接,(120+1)x84=10164个训练参数。
在这里插入图片描述

这里的激活函数是:双曲正切函数
在这里插入图片描述

8.输出层 10

10个手写数字
F6与输出层之间是高斯连接,输出层由欧几里得RBF单元组成,每个类别一个,每个有84个输入。

训练

训练算法与BP神经网络类似,信号前向传播,误差反向传播。注意,卷积中有很多权值共享。

一般的BP神经网络,有一种头重脚轻的感觉,越往输入,神经元越多,权也越多,梯度递减问题就变得尤为严重;纵观整个LeNet-5,越往输出,权值越多,这样的一大好处是,在误差反向传播时,不会过于分散,而使得梯度逐渐消失。
源代码可参考:https://www.codeproject.com/Articles/16650/Neural-Network-for-Recognition-of-Handwritten-Digi

由于卷积神经网络已经应用十分广泛,因此很少要求大家从头开始写一个卷积神经网络。通常就是利用一个框架,实现卷积神经网络。更重要的是,如何利用卷积神经网络的原理和经验,决定卷积神经网络的结构,对哪些参数调优。其他的扔给框架就行了。

一般来说,卷积神经网络对于图像平移、扭曲等,有较强的鲁棒性。