CNN-经典论文阅读-(1998, LeNet-5)Gradient-Based Learning Applied to Document Recognition
这是我阅读的第一篇经典论文,本来应该早点阅读这篇经典之作的,但是每每打开看到长达48页的页码提示,都望而止步。所有的问题都需要正视,经典之所以被人称赞,一定有它的过人之处,所以这一次鼓足勇气,阅读全文,整理出一些摘要,是给自己的一个交代,同时也希望帮到大家。
本人是CNN刚入门阶段,文章中难免有一些出现理解错误的地方,希望大家指正!
摘要
1.文章中与标准的手写体数字识别方法做对比,描述用于手写识别的其他方法,比如能够较好的处理二维数据的卷积神经网络。
2.现实生活中的文件识别系统由多个模块组成,如字段提取(field extraction)、分割(segementation)、识别(recognition)以及语言模型(language modeling)。大家希望有一个模型能把所有的模块整合起来,系统的调节参数,因此作者介绍了Graph Transformer Networks(GTN)图变网络,使用基于梯度方法系统性的训练全部的参数,表现得更加优越。
keywords:神经网络、光学字符识别(OCR)、文件识别、机器学习、梯度学习、卷积神经网络、图变网络、有限状态传感器
正文
1.手工特征提取逐渐被直接对像素图片进行处理的学习机器取代。
2.通过手工集成单独设计的模块来构建识别系统的传统方法被GTN设计范式取代,GTN可以对所有模块进行全局性的优化。
作者指出:需要特征提取器是因为分类器只能处理比较低维的数据,但是现在技术的发展改变了这个局面:
- 更快处理单元的低价机器
- 更多的数据
- 能够处理大量、高维数据并形成复杂结论的方法。
1.引言
A. Learning from Data
介绍梯度学习算法(gradient-based learning)
1.计算
Y
p
=
F
(
Z
p
,
W
)
Y^p = F(Z^p,W)
Yp=F(Zp,W),其中
Z
p
Z^p
Zp是第个输入,W是系统的参数,
Y
p
Y^p
Yp可以理解为输出的分类标签。
2.损失函数
E
P
=
D
(
D
P
,
F
(
W
,
Z
P
)
)
E^P = D(D^P,F(W,Z^P))
EP=D(DP,F(W,ZP)),计算真实标签
D
p
D^p
Dp与预测标签
Z
p
Z^p
Zp之间的差。
3.测试集损失
E
t
e
s
t
E_{test}
Etest和训练集误差
E
t
r
a
i
n
E_{train}
Etrain之间的数学关系:
E
t
e
s
t
−
E
t
r
a
i
n
=
k
(
h
/
P
)
a
E_{test} - E_{train} = k(h/P)^a
Etest−Etrain=k(h/P)a
其中
P
P
P是样本个数,
h
h
h表示能力有效性(effective capacity),
a
a
a是普通参数,值在0.5~1.0之间,
k
k
k是常数。
- 当训练样本数量增加时,训练集和测试集之间的误差会减小。
- h h h增加时, E t r a i n E_{train} Etrain会减少,因此在增加 h h h的同时, E t r a i n E_{train} Etrain的减小与训练集和测试集的差增加之间存在着一种平衡关系,即以 h h h为最优值获得最低的泛化误差 E t e s t E_{test} Etest。
- 结构风险最小化(Structural Risk Minimization):指的是最小化
E
t
r
a
i
n
+
β
H
(
W
)
E_{train} + \beta H(W)
Etrain+βH(W),其中
H
(
W
)
H(W)
H(W)被称为正则函数,
β
\beta
β是一个常数。
原文中说:H(W)的选取使得属于参数空间高容量子集的参数W具有较大的值。 H(W) is chosen such that it takes large values on parameters W that belong to high-capacity subsets of the parameters space.
这句话没太理解
B. Gradient-Based Learning
梯度下降的内容大家应该都很熟悉了,附上论文中的公式:
W
K
=
W
k
−
1
−
ϵ
α
E
(
W
)
α
W
W_{K} = W_{k-1} - \epsilon \frac{\alpha E(W)}{\alpha W}
WK=Wk−1−ϵαWαE(W)
随机梯度算法
在使用随机梯度算法进行参数更新时,参数向量在一个平均轨迹上波动,在大数据集上的(尤其是由大量冗余样本)收敛速度比常规梯度下降法和二阶方法要快很多。
C. Gradient Back-Propagation
文章中之描述了其发展的一些过程,反向传播的概念不再赘述。
D. Learning in Real Handwriting Recognition Systems
文中提到使用梯度学习的神经网络比其他方法都要好,其中卷积神经网络具有最好的效果。
文章指出手写识别最困难的问题之一是将单词或句子中的字符分开。这种技术被称为启发式过渡分割(Heuristic Over-Segmentation),分割效果称为影响识别准确率的主要因素。
解决方案:
- 在整个字符串级别上训练系统,不是只在字符的级别上。
- 将识别和分割合在一起,让识别器在输入图片的每个可能位置移动。
E. Globally Trainable Systems
这一部分主要是将前面的知识串在一起,讲解了使用神经网络需要注意一些什么,比如保证函数可微等。
2. Convolutional Neural Networks For Isolated Character Recognition
用于独立字符识别的卷积神经网络
A. 卷积神经网络
卷积神经网络结合了三种结构的思想来确保一定程度的位移、缩放和距离不变性:
- 局部感受野(local receptive fields)
- 共享权值(weight sharing)
- 空间二次抽样(spatial sub_sampling)
其中局部感受野的思想是由Hubel和Wisel在1962年提出的:猫的视觉系统包含局部敏感(locall-sensitive)和具有方向选择性(orientation-selective)的神经元。
最早使用局部感受野的神经网络模型是神经认知机,由Fukushima在1980年提出。
局部连接在视觉学习的神经模型种被多次使用,局部连接的神经元可以提取基本的视觉特征,比如定向边缘、端点、角。这些特征会被更高层组合以得到更高级的特征。
权重共享 一个feature map中的所有单元共享相同的权重和偏差,因为它们是在所有可能的位置上提取相同的特征,不同的feature map使用不同的权重和偏差,来提取不同类型的局部特征。
检测到的特征的确切位置并不是很重要,特征与特征之间的相对位置才重要。比如我们检测到如数图像在左上角有一个端点,右上角也有一个端点,那么我们就可以预测输入的数字是7。不同的人所写的数字的特征的精确位置不可能完全一致,因此降低输入图像的空间位置信息是非常有必要的,可以通过降低特征图的空间分辨率来实现,具体可以使用一个下采样层来弱化图像特征的空间信息。
LetNet-5的第二个隐藏层是下采样层,这一层包含6和特征图,每个特征图对应前一层的一个特征。每个感受野是上一层对应特征图中2*2的区域,每个单元计算4个输入的平均值,再乘以一个可训练的系数加上可训练的偏差,结果经过sigmoid函数处理,相邻的单元具有不重叠的感受与。因此次采样的特征图只有原来一半的行和列作为前一层的特征映射。可训练系数和偏差对非线性函数sigmoid影响很大。如果系数较小,那么这个单元就像是在执行线性函数(sigmoid函数图像中间的一小部分可以看作线性),如果系数比较大,就像是执行或、与函数(不是0就是1,参照函数图像)。
卷积层和下采样层交替出现,特征图的数量随着空间分辨率的降低而增加。
LeNet-5网络结构图:
权重共享带来的另一个优势:减少了自由参数的数量,降低了机器所需的内存,减少了测试误差和训练误差之间的差距。图中的网络包含340908个连接,因为权重共享,只有60000个可训练的自由参数。
B. LeNet-5
LeNet-5共有7层,每层都包含可训练的参数。输入的是一个3232大小的图片,输入的图片比原来的图片大小(2020,28*28)要大,这主要是因为需要检测图像的边界特征信息,比如角、点等。输入的像素都进行了归一化处理,所以白色的背景值对应于0.1,黑色的对应值为1.175,这也使得输入的平均值近似为0,方差近似为1,这样大大的加快了学习速度(原因参考一个扁形的梯度下降图和一个相对较圆的梯度下降图,不再赘述)。
再挂一遍LeNet-5的模型图,方便观看。
模型结构:
- C1为卷积层,由6个2828的特征图(feature map)组成,核函数(kernel)大小55,步长(stride)为1,共有556+6=156个参数(每个特征提取器有55个unit参数,一共6个特征提取器,另外每一层都有一个偏置参数),共1562828=122304个连接(可以结合公式WX+b理解,相当于参数输入单元个数)。
- S2是下采样层,由6个1414的特征图组成,核函数(kernel)大小22,步长为2。S2层每个单元的4个输入相加,乘以一个可以训练的参数,再加上可训练的偏置,其中每个单元的22感受野不重叠。共有6(1+1)=12个参数(四个输入相加再乘以一个参数加一个偏置),和1414(2*2+1)6=5880个连接(1414个输入乘以核函数大小+一个偏置,我理解的是发生几次乘法就有几个连接)。
- C3为卷积层,由16个1010的特征图组成,kernel=55,stride=1,C3中每个特征图由S2中6个或几个不同的特征图组合而成。不把S2中每个特征图连接到每个C3的特征图的原因:1.不完全的连接机制将连接数量保持在合理的范围内。2.这样能够破坏网络的对称性。例如C3的前6个特征图以S2中3个相邻的特征图子集为输入,下面6个特征图以S2中4个相邻的特征图子集输入,剩下3个以不相邻的4个特征子集为输入,最后一个将S2中所有特征图为输入。这样C3层共有:
[6*(553+1)+6*(455+1)+3*(455+1)+(556+1)=1516]个参数,共有15161010=151600个连接。
- S4为下采样层,由16个55的特征图构成,kernel=22,stride=1,S4有(16*(1+1))=32个参数,(16*(2*2+1)55)=2000个连接。
- C5为卷积层,有120个11的特征图,kernel = 55,共有5516120+120=48120个参数,有481201*1个连接。
- F6为全连接层,包含84个单元,F6层包含120*84+84=10164个参数。
- 输出层包含10个单元,分别输出10个数字的类别概率。