Lecun这篇深度学习的开山祖师是我阅读的第一篇相关论文。阅读时还是比较吃力,经常出现读了后面忘记前面的情况,因此一边阅读一边翻译,就有了本博客。翻译得不太好,请谅解~
Gradient-Based Learning Applied to Document Recognition
Yann Lecun. IEEE 1998
I. Introduction
介绍传统模式识别及其短板。常见模式由两个子模块组成:
- 特征抽取:将输入的模式转变为可被简单匹配或比较的低维的向量或短字符串,该模块具有一定的不变性,尽管输入的模式有着各种变形、畸变。特征抽取包含了大部分前沿知识并专门负责到其任务类型。由于它常常是完全由人工组建,它同样是设计的主要耗时所在
- 分类模块:通用并可训练的。
这样的处理方式最主要的问题是,识别准确度强依赖于设计人员设计出一系列适当的特征的能力。不幸的是,这是一个令人沮丧的任务因为它对于每一个新问题都需要重新完成。大量的模式识别文献都致力于描述、比较对于特定任务的不同特征集之间的相关性和优点。
从历史来看,对于准确的特征抽取器的需要来自于目前分类器所使用的学习技术被限制在低维的可分割的类。过去十年,三个因素的组合已经改变了这一观点。
- 便宜的有着快速计算能力的机器让我们可以更依赖暴力数值计算而不是算法细化。
- 对于有着广大市场和兴趣的问题如手写识别的大型数据库,允许设计者更依赖真实数据而不是人工构造的特征抽取来建造识别系统。
- 最重要的因素是,在输入大数据集时,强力的可以hold住高维输入的,并且能产生复杂的决策函数的机器学习技术的出现。
可以说近期大部分在语音和手写识别系统中准确度的进展都可归功于学习技术和大的训练集。一个证据就是,大部分现代商用OCR系统使用了各种形式的使用了反向传播的多层神经网络进行训练。
在本课题,我们选择手写识别任务(Section I、II)并将其在测试集上的性能与数个学习技术进行比较(Section III)。没有一定数量的之前的任务知识,没有学习技术能成功。对于多层神经网络来说,吸收已有知识的好方式即裁剪其架构以适合任务。在Section II介绍的卷积神经网络就是一个例子,它是一个基于局部联通模式和对权重的约束,来吸收了2D图形的不变性的知识的多层神经网络。对于单个手写数字识别的多种方法的比较在Section III。Section IV介绍了从识别字符到词到段落,使用多个训练模型以降低错误的方法。使用多模块系统识别变长的对象如手写词在模块是被构造为有向连通图时完成得最好。这引出了在Section IV介绍的概念,可训练的Graph Transformer Network(GTN)
。Section V描述了当下经典的用于词、字符串识别的启发式分段方法。Section VI呈现了不使用人工分段和标注时,适用基于梯度的技术训练对词的识别器的识别力。Section VII呈现了有希望Space-Displacement Neural Network(SDNN)
有希望的尝试,通过使用识别器对输入的扫描,消除了对于分段的依赖。Section VIII,展示了可训练的GTN能被构造为基于通用的图像组成算法的多个通用转化器。还有常用于语音识别的隐马尔可夫模型HMM跟GTN的联系。Section IX描述了用于识别手写笔输入的字符的完全训练的GTN系统。这一问题被熟知为“在线”手写识别,因为机器必须在用户写的瞬间产生反馈。系统核心是CNN。结果清晰地显示了在词层面训练而不是在预先分割、人工标注、孤立的字符上训练的优势。Section X描述了用于读取手写和打印的支票的完整的基于GTN的系统,其核心是LeNet-5。该系统已用于银行业的NCR组织。它在整个美国的多个银行,每月读取数十万张支票。
A. Learning from Data
自动机器学习有多种方式,其中最成功的一种,也是近年流行与神经网络社区的,是gradient-based learning
。学习的机器计算函数 $Y^p = F(Z^p,W)$ ,其中$Z^p$是第$p$个输入模式,而$W$是系统中可调整的参数集合。在模式识别的背景下,输出$Y^p$可被解读为模式$Z^p$的类标签,或关联各个类的得分、概率。loss函数 $E^p = \Delta(D^p, F(W,Z^p)) $,度量了$D^p$,也就是模式$Z^p$正确的输出和系统产生的输出的差距。平均loss函数$E_{train}(W)$是对被称为训练集的标签样本集合$\{(Z^1,D^1),…(Z^P,D^P)\}$的平均误差。在最简单的情况,学习的问题就是找到让$E_{train}(W)$最小的$W$的值。实际应用中,系统在训练集上的性能意义不大。更贴切的测量是测量错误率。测量其在测试集的准确度,与训练集无关的数据集合。大量理论和实验工作$ ^{[3],[4],[5]}$已表明测试集$E_{test}$的错误率和训练集$E_{train}$的差会随训练样本数量增长而降低,如:
其中$P$是训练样本数量,$h$是“有效能力”或机器复杂性的度量$ ^{[6],[7]}$,$\alpha$是一个0.5到1.0之间的值,而$k$是一个常量。这一差距总是会随着训练样本数量增长而减少。并且,随着$h$的增长,$E_{train}$不断下降。因此,当增加能力$h$时,需要在$E_{train}$和gap中做个取舍。通常缓慢增加$h$。实践中还常常使用正则化。
B. Gradient-Based Learning
整个最小化一系列参数的函数的问题是很多计科问题中的根本。比起离散函数,GBL通常更容易最小化一个平滑、连续的函数。损失函数能通过消除函数中的参数的细小不同的影响来被最小化。这是通过对损失函数参数的梯度来度量的。当梯度向量可以被分析计算时,有效的学习算法就能被设计出。这是很多GBL算法的基础。在本文所描述的流程中,参数集$W$是是实数集合。这样的设定中最简单的最小化流程即是循环地如下调整$W$:
在这例子中,$\epsilon$是常量。在复杂的流程中,常常会使用变量$\epsilon$,或用黑塞矩阵代替。
一个流行的最小化流程是随机梯度下降算法SGD,也被称为在线更新。它持续地用抽样的平均梯度更新参数:
这一流程中,参数向量会在一个平均轨迹上波动,但通常会比正常的梯度下降算法收敛得更快。原因会在附录B中解释。算法的这个特性已自1960‘s开始用于学习,但真正有实际进展要到80年代中期了。
C. Gradient Back-Propagation
GBL算法自1950’s末期就开始被应用,但它们多被限制在线性系统中。这一技术对复杂机器学习任务的有效性直到最近三个事件才被意识到。第一个是尽管和早期的警告相反,但实际上损失函数的下降到局部最小值并不是实践中的大问题。这在一些早期非线性GBL才表现出来,如波兹曼机。第二个事件即是反向传播算法的流行。第三件事是应用于使用Sigmoid单元的多层神经网络的反向传播能解决复杂的学习任务。反向传播的基本思想就是梯度可以高效地从输出向输入计算。这一想法在60年代早期的控制理论中经常被提到,但并没有意识到它在机器学习的应用。有趣的是,早期的神经网络学习领域里的反向传播在中间层的单元里不用梯度,而是“虚目标”或是最小扰乱参数。控制理论文献中用的拉格朗日形式也许提供了最好的严谨的驱动反向传播,泛化目前的网络中的反向传播、以及具有多样性的模块的网络的方法。驱动普通多层系统的最简单方法在I-E节给出。
局部最小值不是大问题的原因理论上有点神秘。如果网络规模对于任务来说过大(实际中常见的情况),参数空间里的“多出来的”维度就降低了不可达区域的风险。目前为止反向传播是神经网络学习算法中用得最多的,也许也是任何形式的学习算法用得最多的。
D. Learning in Real Handwriting Recognition Systems
单个手写字符识别已经被广泛地研究过,也是早期神经网络成功应用之一。这些实验的比较在第III部分。它们说明了对同样的数据,基于梯度的神经网络表现比其它方法都更好。最好的神经网络——卷积网络,被设计为直接从图片抽取重要特征进行学习(第II部分)。
手写识别中最难的问题不是识别,而是分割。目前的“标准”是启发式过分割。它不断地用启发式图片处理技术生成大量可能的字符分割,随后基于识别器对每个候选词的打分,选出最佳组合。在这个模型中,系统准确度取决于识别器识别出正确的分割的能力。训练识别器来完成这任务成了最主要的挑战,因为创建一个带标签的错误分割的字符很困难。最简单的还是持续分割,并手工标注。不幸的是,这不仅是极大量的任务,做到标注的一致性也很困难。如,右半部的4该被标注为1还是非字符?右半部的8该不该被标注为3?
第V部分介绍了最初的解决方案,持续用整个字符串而不是字符来训练系统。GBL能用于此。该章节介绍了有向无环图的使用,介绍了GTN。
第VII部分描述了另一解决方法,即将识别器在图上完整扫过,依赖其“字符定位”属性,即其定位到字符中信的能力,就算其它字符会在其旁边。扫描出的结果将提供给Graph Transformer Network GTN,它考虑了语言约束并最终提取出最可能的解释。GTN有点类似隐马尔可夫模型HMM,尝试经典的语音识别。
E. Globally Trainable Systems
如前面提到的,最实用的模式识别系统由多个模块组成。一个文档识别系统由提取兴趣区的定位模块,切割模块和一个生成候选词得分的识别器以及一个上下文相关后处理器组成。后处理器基于随机文法,从识别器生成的猜测中选出语法上最正确的。通常,模块到模块之间传输的信息的最好呈现方式是用弧的图像表示。如识别模块的输出可以用无环图标识,每条带有标签和得分的边表示一个对输入字符的候选翻译。通常,每个模块是在脱离上下文的情况下训练或手动优化的。比如,识别模块是由预先分割标注好的图片训练的。当整个系统对接后,手动调整各个模块的参数来取得最好的整体成绩。最后一步是极度无聊、耗时而且几乎肯定无法达到最优的。
一个更好的方案是训练整个系统,用错误率来驱动学习。理想情况下,我们能找到一套够好的参数。乍看之下,这一系统的规模复杂度会让其过于困难。
为了确保全局损失函数$E^p(Z^p,W)$是可微的,整个系统由前向的可微模块网络组成。每个模块的实现函数都必须是连续的,而且对内部参数和输入都可微。在这样的情况下,一个简单反向传播流程都能高效的为系统计算损失函数的梯度。比如,一个使用瀑布模型组件的系统,实现了函数$X_n=F_n(W_n,X_{n-1})$,其中$X_n$是模块输出的向量形式,$W_n$是模块的参数向量,$X_{n-1}$是模块的输入,也是上一个模块的输出。如果$E^p$对$X_n$的偏导已知,则可以通过反向传播计算$E^p$对$W_n$和$X_{n-1}$的偏导。
其中$\frac {\partial F}{\partial W}(W_n,X_{n-1}) $是$F$对$W$在点$(W_n,X_{n-1})$的导数的雅克比矩阵(导数矩阵)。向量函数的导数矩阵是一个所有输出对所有输入的偏导的组成的矩阵。第一个等式计算了$E^p(W)$的梯度,第二个等式生成了反向传播的循环。有意思的一点是很多时候没有必要完整地计算导数矩阵。前面的方程用了导数矩阵的产物,一个偏导的向量,通常直接计算这一产物而不提取计算导数矩阵要简单的多。通常的多层神经网络中,中间层被称作hidden layer因为它们的输出从外部是无法被观测到的。在更复杂的网络结构中,偏导符号常常会变得模糊而棘手。更通用的严格的偏导可以用拉格朗日方程。
第IV,VI和VIII部分介绍了Graph Transformer Networks GTN的概念。
II. Convolutional Neural Networks For Isolated Character Recognition
使用GBL从大规模样本中训练的多层网络的能力让它们明显地适合进行图像识别任务。模式识别的传统模型中,人工设计的特征抽取器从输入中收集重要特征并消除无关变化。接下来一个可训练的分类器就开始对这些特征向量进行分类。在这里,可以使用标准的全连接多层网络作为分类器。也许更有趣的方法是让特征抽取器尽量依赖自己学习。在字符识别中,网络完全可以接受几乎原始的数据输入。尽管如此,还是有一些问题。
首先,通常图像会很大,常常有数百个变量(像素)。假如第一层是一个有着100个单元的fc层,会有数万个权重参数。如此大的参数规模增大了系统的能力,也需要更大的训练样本。另外,为了存储如此多的参数所需的内存阻止了常见的硬件实现。不过面向图像或语音的非结构网络主要的低效之处在于,它们对于输入的变化或局部失真没有内建的抵抗性。在输入到神经层前,图像数据必须被处理,字符必须在正中。不幸的是,这样的预处理不可能完美:手写字符常按词这一级来归一化,这会导致各个独立字符的大小,倾斜度和位置的不同。再加上书写风格的不同,会导致输入对象的位置特征明显不同。从原理上,一个有足够大小的全连接网络能抵抗这一不同性。但是学习这一任务很可能导致多个有着相同权重模式的单元指向了输入的各个位置,从而能检测出现在各种位置的特征。学习这样的权重配置需要大量的训练样本才能覆盖所有可能的不一致性。在后面描述的卷积网络中,会通过在复制权重配置来自动获得位移不变性。
其次,全连接结构的无效性是因为输入的拓扑结构完全被忽略了。输入变量能以任何顺序排列而不影响训练结果。正相反,图片(或Time–frequency representation TFR的语音)有着强2D局部结构:变量是有空间性的或是高度相关的。局部相关性正是在识别空间性对象前先抽取组合局部特征的广为人知的优势的原因,因为相邻变量的结构可被分类到少数范畴中(如边缘、角)。卷积网络通过强制让hidden unit的感知域变得更局部来加强对局部特征的抽取。
A. Convolutional Networks
卷积网络结合了三个建筑学上的概念来获得一定程度的平移、形变、干扰不变性:局部感受野,共享权重或(权重复制)和部分或二次抽样。图2是LeNet-5,一个用于识别字符的典型的卷积网络。输入层接收大致一致化并居中的字符图像。层中的每个单元接收前一层的一小部临近单元的集合。把单元连接到局部感受野的想法早在60年代早期,感知机就出现了。几乎同时也在猫的视觉系统里发现了这一局部敏感性的神经元。局部连接经常在视觉学习神经模型中使用。靠着局部感受野,神经元能抽取基本视觉特征如有向边、端点,角等。这些特征会被后续层组合起来用于检测更高位的特征。如前面提到的,输入的变形、干扰会使显著的特征位置相差很远。另外,单元素特征检测在一张图的局部有效的话,很有可能在整个图片上都有效。这一知识可以通过强制让各自局部感受野位置各不一样的单元集使用同样的权重向量来应用。层中共享同样的权重的单元组织成一个平面。这一平面中的单元的输出集合被称作feature map。Feature map中的unit被强制在图片的不同位置进行同样的操作。一个完整的卷积网络由多个feature map 构成,这样每个位置的多个特征都能被抽取。LeNet-5的第一层就是一个卷积例子。LeNet-5中的第一个hidden layer中的unit组织为6个平面,每个都是一个feature map。一个feature map中的单元有25个输入,来自输入中的一个5*5的区域,也就是这个单元的局部感受野。Feature map中相邻的单元的局部感受野的中心也是同样相邻。因此相邻的单元的局部感受野会重叠。比如LeNet-5中的第一层,相邻的局部感受野会重叠4*5。前面提到过,Feature map中的所有单元使用同样的参数集,来抽取输入中所有可能位置中的同样的特征。这一层的其余Feature map则用了不同的参数集,因此抽取了不同的局部特征。在LeNet-5中,输入里每个位置都被6个Feature map中对应的unit抽取了6个不同的特征。卷积的核就是Feature map使用的连接的权重的集合。卷积层的一个有趣的特性是如果输入的图像有位移,产生的Feature map也会有同样程度的位移,但其余的都不变。这一属性就是卷积网络对位移和失真的健壮性的基础。
一旦一个特征被检测到,它的具体位置就不那么重要了。只有它相对其他特征的可能位置才重要。比如,一旦我们知道了输入的图像在左上和右上角区域有一个基本水平的段的两个端点,而较下方有一个接近垂直的段的端点,我们就能确定这个图片是7。这些不相干的特征的具体位置不仅对模式的识别没有帮助,甚至有潜在的危害因为同一个字的不同样本中它们的位置可能会有很大差别。要降低这一Feature map中位置准确度的办法就是缩小Feature map的分辨率。这可以通过一个叫做sub-sampling layer来完成。它执行平均和抽样,降低Feature map的分辨率,并降低输出对移动和失真的敏感度。LeNet-5中的第二个hidden layer就是一个sub-sampling layer。这一层由6个feature map组成,都是从前一层来的。每个单元的感受野是前一层的对应2*2的区域。每个单元计算它的四个输入单元的平均值,乘以一个可训练的系数,再加上bias,并传给一个sigmoid函数。相邻的单元的感受野没有覆盖。结果就是本层的feature map宽高都是前一层的一半。可训练的系数和bias控制了Sigmoid的非线性效果。如果系数较小,则unit会是似线性的模式,整个layer仅仅模糊了输入。如果系数较大,unit可被看做执行“noisy OR”或是“noisy AND”,取决于bias大小。卷积层和池化层交替出现,呈现出一种“双锥型”:每一层,feature map数量在增加而整个空间的分辨率在降低。这样的组合,由Hubel和Wiesel的简单、复杂细胞观点所启示,在Fukushima的生物识别中实现,不过那时没有这样的监督学习流程。对于输入的变换的不变程度可以在这逐步的降低分辨率同时增加表达丰富程度过程中获得。
由于所有权重会在反向传播时学习,卷积网络可被看做整合了自己的特征抽取模块。权重共享技术还有着降低自由参数的副作用,从而降低了机器的capacity和训练误差与测试误差的差距。LeNet-5有340908个连接,但只有60000个可训练的自由参数。
固定大小的卷积网络被应用到各个领域,如手写、打印识别,在线手写识别、人脸识别等。在单维共享维度的固定大小卷积网络也就是熟知的Time-Delay Nerual Networks(TDNNs)。它被用作音节检测(不进行池化)、演讲文字识别(进行池化),单个手写字符的在线检测和签名验证。
B. LeNet-5
这一节描述了实验所用的卷积神经网络LeNet-5的更多细节。它一共有7层,除了输入层每层都有可训练参数。输入是32*32的图像。这比数据库中的最大字符(28*28中最多20*20)都大上不少。这样做是出于对可能的重要特征如拐角端点能出现在局部感受野的正中的需要。LeNet-5中的最后一个卷积层(第三层)的局部感受野中心的集合正好是输入的32*32中心的20*20的区域。输入的像素被归一化,让背景(白)为-0.1,前景(黑)为1.175,从而平均值大概是0,方差大概是1,这能加速学习。
在后续部分,卷积层将用$C_X$标记,二次抽样层将用$S_X$标记,全连接层是$F_X$,$X$是层序号。
$C_1$是有着6个feature map的卷积层。feature map中的每个单元都连接自输入的5*5相邻区域。feature map大小是28*28,防止输入层的连接超出边界。$C_1$有156个参数,122304个连接。
$S_2$是池化层有着6个14*14大小的feature map。feature map中的每一个单元都来自$C_1$对应map的2*2区域。每个单元计算它的四个输入单元的平均值,乘以一个可训练的系数,再加上bias,并传给一个sigmoid函数。$S_2$有12个参数和5880个连接。
$C_3$是有16个feature map的。卷积核5 * 5。$C_3$并没有使用$S_2$中全部feature map,如Table 1。不把$S_2$和$C_3$中所有feature map都连接起来有两个原因:
- 不完整的连接组合让连接数不至于过多
- 给与网络强制的非对称性
不同的feature map因为它们不同的输入,被强迫提取不同的特征。
$C_3$前6个feature map即是$S_2$全部连续3个map的排列。接下来6个是全部连续4个的排列。接下来3个接收一下不连续的4个的子集。最后一个接收了所有的$S_2$的map。$C_3$一共有1516个参数和151600个连接。
$S_4$是有着16个5 * 5大小的feature map的池化层。核为 2 * 2。共有32个参数和2000个连接。
$C_5$是有120个feature map的卷积层。每个单元都连接到$S_4$的全部16个feature map上的一个5 * 5的区域。由于$S_4$的feature map大小同样是5 * 5。$C_5$的map大小为1 * 1:这相当于从一个全连接。$C_5$被标记为卷积层而不是全连接层的原因是,如果LeNet-5的输入变大而所有其余的不变,feature map会比1 * 1大。Section VII里描述了这一网络大小动态增长的过程。$C_5$有48120个参数和连接。
$F_6$有84个(数字来自输出层的设计,后续会加以解释)全连接到$C_5$的单元。共有10164个参数。
就如同经典神经网络中一样,$F_6$中的单元计算输入向量和权重向量的乘积加上bias。加权和,计做unit $i$的$a_i$,传入sigmoid函数,计做unit $i$的状态$x_i$:
激活函数是缩放的双曲正切函数(Scaled Hyperbolic tangent):
其中$A$是函数振幅而$S$确定了原点的斜率。$f$是一个在$\pm A$处有着水平渐近线的奇函数。常量$A$设为1.7159。选择激活函数的原理在附录A。
最终,输出层由高斯核函数(RBF——Euclidean Radial Basis Function units)将84个输入组成。每一个RBF单元的输出$y_i$如下计算:
换句话说,每个RBF输出单元计算了它的输入向量和参数向量的欧几里得距离。The further away is the input from the parameter vector, the larger is the RBF output. 一个RBF的输出可被理解为输入的模式和实际的fit之间的惩罚度量。在概率论里,RBF的输出可被看做$F_6$的配置空间的高斯分布的未归一化的负对数似然度。给定输入的模式,loss函数应该被设计为$F_6$的配置应尽量接近模式所属类别的RBF参数向量。这些单元的参数向量是手工设定并不变的(至少开始是)。参数矩阵的分量被设为1或-1。它们被设计为代表一个画在一个固定风格的7 * 12图片上的字符,而不是代表概率或组成一个error correcting code。这种表现不光是在识别单个字符中特别有用,识别打印的ASCII字符集字符串也是很有用的。相似的字符都是易混淆的,如大小写O和0,小写l、1,[]和大写I,会有着近似的输出。当系统组合了一个语义后处理器来处理这些混淆时会尤其有效。图3给出了ASCII集的输出code。
另一个使用这样的分布式的output code的原因,而不是更常见的“1 of N”code(也称作place code 或grand-mother cell code)是非分布式code倾向于在类别数多于数十个时表现得很差。原因是非分布式code的话,输出单元大多时候都出于非激活态。对于sigmoid单元来说很难达到。当然另一个原因是分类器不仅仅用于识别字符,也用于拒绝非字符。分布式code的RBF更适合这个目的,因为不像sigmoid,它们输入空间里的可激活部分聚集得很好,非典型的模式更容易剔除。
RBF的参数向量扮演了$F_6$中的目标向量。值得一说的是它们各自的分量是+1或-1,很好得落在了$F_6$的sigmoid的范围内,从而避免了这些函数饱和saturation。实际上,+1和-1是sigmoid的曲率最大点。这强迫$F_6$的单元在其最大的非线性范围中操作。Sigmoid的饱和是一定要避免的,因为这会导致学习过慢和病态的loss函数。
C. Loss Function
能用于前文描述的网络的最简单的loss函数是最大似然估计(MLE——Maximum Likelihood Estimation criterion),在我们这里和最小均方误差(MSE——Minimum Mean Squared Error)一致。
$yD^p$是第$D_p$个RBF单元的输出,如输入模式$Z^p$的对应正确的类的单元。虽然这个loss函数大部分情况都合适,它还是缺少了三个重要的属性。
- 如果我们允许RBF的参数学习,$E(W)$有一个琐碎而完全不可接受的解。在这个解中,所有的RBF参数向量都是相等的,$F_6$的状态是不变的,等于参数向量。在这个例子里网络会忽略其输入,所有的RBF输出都会等于0。在RBF参数不参与学习时,这种崩溃现象不会出现。
- 类与类之间缺乏竞争。
这种竞争可以通过使用一个更具歧视的被称作最大后验(Maximum a posteriori——MAP)loss函数,近似于常用于训练HMM的最大互信息量准则(Maximum Mutual Information)。给定输入图片,它相应地能从一系列类中,最大化正确类$D_p$的后验概率(或最小化正确类的对数概率)。惩罚形式意味着除了像MSE一样压低正确分类的惩罚外,同时提高错误类的处罚。式中的负的第二部分就扮演了竞争性的角色。它必须小于等于第一部分,因此loss函数是正数。常量$j$是整数,用于防止类的惩罚值已经很大时被变得更大。错误类的后验概率是$e^{-j}$比$e^{-j}+\sum _i e^{-y_i(Z^p,W)}$。这样有区别的函数通过让RBF分得更开,来避免前面提到的RBF参数可学习时的崩溃现象。Section VI中,我们提供了一种更泛化的函数形式,用于学习分类输入中的多个对象的系统(如词或文档中的字符)。
loss函数对卷积网络的所有层的所有权重的梯度的计算是通过反向传播实现的。为了处理权重共享,需要对标准算法稍加修改。一个最简单的实现就是计算loss函数对每个连接的偏导,就像网络是一个没有使用权值共享的网络一样。再把所有共享了一个参数的连接的偏导相加,得到对那个参数的偏导。
使用附录中描述的一些技巧可以让这样一个庞大的结构被非常高效地训练。附录中的Section A描述了所使用的Sigmoid的细节。B和C描述了所使用的最小化流程,也就是Levenberg-Marquardt(一种最小二乘法)的对角近似随机版。
III. Results and Comparison with Other Methods
尽管识别单个字符只是设计实际的识别系统中很多歌问题之一,它还是一个非常好的比较各识别方法的benchmark。这篇文章重点在进化方法而不是常见的组合了定制特征抽取器的方法。
A. Database: the Modified NIST set
用于训练和测试本文描述的系统的数据集来自NIST的Special Database 3 和 1。NIST最初指定SD-3为训练集而SD-1为测试集。但是SD-3比SD-1要干净很多更容易识别。SD-3采集自人口调查局员工而SD-1采集自高中学生。要从学习实验中获得合理的结论需要结果与如何选择测试集和训练集的样本无关。因此很有必要通过混合NIST的数据库来构建一个新的数据库。SD-1中有500个不同书写者写的58527张数字图片。不像SD-3那样不同书写者的数据顺序出现,SD-1的数据是杂乱的。我们用SD-1中的书写者信息来重新规整SD-1的数据。接下来我们把SD-1分成两部分:前250个书写者的字符放到我们的新训练集中,剩余的放到测试集。这样我们有两个接近30000个样本的集。我们再从SD-3中的模式#0开始,得到一个60000的训练集。同样,测试集从SD-3的#35000开始。这一database称做MNIST。
原始的黑白(二值)图像被一致化重调整大小以能放入20 * 20像素同时保持原始比例。结果的图像包含灰度,作为一致化算法使用的反混淆(图像插值)技术的结果。一共使用了三个版本的数据库。
- Regular database :字符在28 * 28图片中心。有些情况下,28 * 28图片扩展为32 * 32.
- Deslanted database:字符被裁剪到20 * 20,并通过水平移动线条,让主轴为纵轴
- 图片缩减到16 * 16
图4是测试集中随机选取的样本。
B. Results
在Regular database上训练了多个版本的LeNet-5。每次在整个测试集上运行了20个循环。学习率$\eta$通过如下流程降低:前2次用0.0005,接下来3次是0.0002,接下来3次是0.0001,接下来4次是0.00005,剩下的是0.00001。如附录C中描述,每次迭代前500个样本的对角黑塞近似(diagonal Hessian approximation )被重新赋值并在整个迭代中不断被修正。参数$\mu$设为0.02。这使得第一次迭代时参数集的学习率近似在$7 * 10^{-5}$和0.0016这一有效的区间变化。10次迭代后,在训练集上的错误率会稳定到0.95%,19次后会达到0.35%。当为不同任务训练学习算法时,常常能观察到过拟合的现象。当过拟合发生时,训练误差会持续下降,而测试误差会达到一个极小值后开始增长。尽管这是个常见现象,图5显示的学习曲线中却观察不到。一个可能的原因是学习率始终保持在相对大的值。作用就是权重永远不会再一个局部最小值停下来,而是持续地随机震荡。由于这些震荡的存在,平均的cost会比broader minimum还小。因此,随机梯度会和规范形式有着近似的效果。
测试集大小的影响通过用15000,30000和60000个样本来训练网络来测量。结果在图6,很明显的是,即是是像LeNet-5一样特别的结构,更多的训练数据也会提升准确度。
为了验证这一猜想,我们通过对原始图像的随机失真,人为地生成了更多的训练样本。增加后的训练集由60000个原始模式和540000个失真模式构成。失真由如下平面仿射变换构成:水平和垂直移动,缩放,挤压(水平压缩时垂直拉伸或相反),水平剪切。图7显示了失真处理后的样本。当失真样本参与训练时,测试错误率从0.95%掉到0.8%。值得注意的是,网络在20次迭代中只用来2次就能有效地区分不同的样本了。
图8显示了82个错误分类样本,有些相当模糊,而有些是人类完全可以分别的,尽管它们的写法很差。这预示着未来有了更多训练数据后,可以期待的进步。
C. Comparison with Other Classifiers
出于比较的目的,我们在同样的数据集上训练并测试了多种其它分类器。图9是它们各自的测试集误差。
C.1 Linear Classifier, and Pairwise Linear Classifier
最简单的就是线性分类器。每个像素的值都在输出的加权和中起作用。有着最大值的输出单元(包括bias)就是输入字符的类。在regular数据,错误率是12%。网络共有7850个自由参数。在deslanted数据上,错误率是8.4%,网络有4010个自由参数。线性分类器的缺点已经记述得很完善了,这里引入它仅仅是为了和更复杂的分类器进行比较。Sigmoid unit、Linear Unit、gradient descent learning、learning by directly的各种组合都得到了近似的结果。
有一个进过测试的简单提升。训练一个单层网络中的每个单元来区分类别。也就是45个单元代表0/1,0/2,…0/9,1/2…8/9。单元$i/j$被训练来为类$i$产生+1,为$j$产生-1,并对其它类型不加训练。类$i$的最终得分就是所有$i/x$的输出的和减去所有$y/i$输出的和。在regular测试集上错误率是7.6%。
C.2 Baseline Nearest Neighbor Classifier
另一个简单的分类器是使用欧几里得距离度量的KNN分类器。该分类器的优点是不需要训练时间和设计者的思考。但是所需要的内存、识别时间都很大:完整的60000个20 * 20像素的训练图片必须在运行时可用。适度增加错误率的情况下,可设计出更紧凑的表达。在regular,测试误差是5.0%,deslanted数据上是2.4%,k=3。
C.3 Principal Component Analysis and Polynomial Classifier
用一个预处理阶段来计算输入模式到训练集向量的40个主元分量上的投影。为了计算主元,首先计算训练向量的的每个输入分量的平均值。接着计算结果向量的协方差矩阵,并用奇异值分解(Singular Value Decomposition)来对角化。40维的特征向量用作下一个多项式分类器的输入。这个分类器可被看做有着821个输入的线性分类器,先于一个计算所有输入变量对的积的模块。Regular错误率是3.3%
C.4 Radial Basis Function Network
RBF网络第一层是由1000个高斯RBF单元组成,接收28 * 28的输入。第二次是简单的1000输入/10输出的线性分类器。RBF单元被划分到10个大小为100的组。使用adaptive K-means 算法让所有unit在所有样本上进行训练。第二层的参数使用正则化的伪逆方法计算。Regular错误率是3.6%。
C.5 One-Hidden Layer Fully Connected Multilayer Neural Network
接下来是测试一个有两层权重的全连接神经网络(1个Hidden Layer),用在附录C里描述的反向传播进行训练的。300 hidden unit 的Regular错误率是4.7%,1000个的是4.5%。使用了人工失真样本的是3.6%和3.8%。使用了deslanted数据后,300个hidden单元错误率降低到1.6%。
有着如此庞大数量的自由变量的网络能达到如此地的错误率的原因仍是个谜。我们猜测是多层网络里的动态化梯度学习有“自行正则化”的效果。因为权重空间的原点是鞍点,在所有方向都很吸引人,在前几次迭代中,权重会不可避免的缩减。小的权重会导致sigmoid来到准线性区域,让网络最终变成一个低容量的,单层网络。随着学习继续,权重变大,慢慢地增加网络的有效容量。这看起来几乎是Vapnik的“结构风险最小化”原则的完美实现。对这个现象,我们最终会需要一个更好的理论理解和更实验性的证据。
C.6 Two-Hidden Layer Fully Connected Multilayer Neural Network
为了检查这个结构的效果,又训练了多个双Hidden layer的多层神经网络。理论结果已经显示了任何函数都能用一个单Hidden layer神经网络来拟合。不过,实际应用中发现双Hidden layer的多层神经网络有时有更好的表现。在这里也观察到了这一现象。28 * 28 - 300 - 100 - 10网络的错误率是3.05%。通过一点更多的权重和连接,结果大大优于单Hidden层网络。将网络增加到28 * 28 - 1000 - 150 - 10只提升了一点:2.95%。用乱序的数据训练分别提升到了2.5%和2.45%。
C.7 LeNet-1
卷积网络尝试解决小网络难以学习,而大网络容易过拟合的困境。LeNet-1是早期卷积网络结构,这里是用于比较。图片被下采样为16 * 16并居中于28 * 28的输入层。尽管它的运算需要100000次乘法、加法,LeNet-1的卷积特性让自由参数保持在2600个左右。LeNet-1错误率为1.7%,参数这么少而错误率如此棒,说明这种结构很适合这一任务。
C.8 LeNet-4
对LeNet-1的实验说明有必要使用更大的卷积网络来利用如此庞大的训练集。LeNet-4和-5就是被设计为解决这一问题的。除了架构上的细节以外,LeNet-4和LeNet-5十分类似。有着四个一级feature map,接下来是与之相连的8个subsampling map。接着是16个feature map和16个subsampling map。最后是一个120个单元的全连接层,接着一个输出层。LeNet-4有260000个连接和17000个参数。错误率是1.1%。在一系列实验中,我们用欧几里得最近邻分类器代替了最后一层,用“local learning”方法。这些方法都没能提升错误率,但提升了拒绝错误样本的表现。
C.9 Boosted LeNet-4
结合三个LeNet-4。第一个是正常训练的。第二个是由被第一个筛选过的样本训练的。50%是正确识别而50%是识别失败的。最后一个是由前两个出现分歧的样本训练的。在测试中,将三个网络的输出简单相加。由于LeNet-4错误率很低,必须用失真样本才足够训练第二三个网络。错误率达到了0.7%。乍看之下boost是单网的三倍时间花费。但实际上当第一个得出高置信度的结果,后两个网络将不被调用。平均计算花费是单网的1.75倍。
C.10 Tangent Distance Classifier(TDC)
TDC是一个最近邻分类方法,它的距离函数对输入图像的小的失真和变换敏感。想象一个高维空间中的一个点的图像(维度等于像素数),那么一个字符的失真演化为像素空间中的一个曲线。合在一起,所有的这些失真都定义了像素空间的低维多样化。对于小的失真,在原图的临近处,这种多样化可以通过一个平面来拟合,即tangent平面。对于字符图像的“邻近”的很好的度量方法是它们tangent平面的距离,也就是那生成这一平面的一系列失真:平移、缩放,歪斜,捏、旋转、线条粗细的区别。使用16 * 16大小图像获得了1.1%的错误率。使用前置的过滤手段如简单的高斯距离能减少Tangent Distance计算数量。
C.11 Support Vector Machine(SVM)
用多项式分类器生成复杂决策面是已被研究透了的方法。不幸的是用它们解决高维问题是不实际的,因为乘积项数量是不确定的。用SVM表达高维空间的复杂面是一个非常经济的方法,包括多项式和其它类型的面。
决策面中一个非常有趣的子集是一个符合以下特征的超平面:距离高维空间中两个类别的乘积项(product term)的凸包(convex hulls)的距离最远。Boser、Guyon和Vapnik发现在“最大距离”集合中的任何最高次数为$k$的多项式都能这样计算:先计算输入的图像和训练样本的子集(支持向量)的点乘,提升结果到$k$次幂,并线性组合这些数字来得到。通过找到支持向量和系数来计算有着线性不等式约束的高维空间的二次最小化问题。我们引入了Burge和Scholkopt的结果用作比较。使用常见的SVM错误率为1.4%。使用稍不同的技术可以得到1.1%。这一技术的计算量非常大:每个识别需要1400万乘/加操作。使用虚拟支持向量机可以得到1.0%。最近一个修改版的V-SVM达到了0.8%。然而V-SVM计算量还要比SVM大一倍。因此Reduced Set SVM出现了,1.1%的错误率每次识别却只有650000乘/加操作。
D. Discussion
图9到12是对各个分类器的性能总结。图9是它们在10000个测试样本上的错误率。Boost LeNet-4最优,为0.7。随后是LeNet-5的0.8%。
图10是显示了各个方法的拒绝错误率。当输出小于特定值时,样本被拒绝。各个方法使用的阈值是不同的。同样,表现最好的是Boost LeNet-4。尽管准确率一致,LeNet-4的改进版拒绝错误率比原版要好。
图11显示了各个方法识别单张大小一致化的图片所需的乘加操作数量。神经网络方法要比基于记忆的方法的需求小得多。神经网络的特殊结构也很适合硬件实现——它的权重集对内存需求低。LeNet-5的前身在单芯片上的模拟数字实现能达到每秒处理1000个字符。不过,主流电脑科技的迅速发展让这些异国技术迅速过时。
同样测量了训练时间。KNN和TDC没有训练时间。单层网络、pairwise网络和PCA+二次网络能在1小时内完成训练。多层网络所需时间要长的多,不过只需要10-20次迭代。在Silicon Graphics Origin 2000服务器上用一个200MHz R10000处理器大概需要2到3天。很重要的一点是虽然训练时间对设计者来说很关键,最终用户却不太关心。
图12显示了内存需求,也就是各个分类器所需的参数数量。大部分方法的每个参数只需要1字节,而KNN需要存储模板图像,每个像素需要4位。神经网络所需内存很少。
整体性能取决于很多因素:包括准确率、运行时间和内存需要。随着计算机技术的发展,大容量识别器变得可行。更大的识别器需要更大的训练集。LeNet-1适用于1989的科技,正如LeNet-5适合现在的科技。在1989,LeNet-5会需要几周来训练,以及比已有数据集更大的需求,所以当时未被考虑。在很长一段时间,LeNet-1都是最先进的。Local learning分类器、最优距离分类器和TDC都通过依靠LeNet-1来提升。反过来它们也刺激了对神经网络结构的研究。本论文有一部分是来自对不同学习机器的容量的估计,演化自训练、测试误差测量方法。我们发现需要更大的容量。通过一系列架构实验结合对识别错误的特征分析,LeNet-4和LeNet-5被设计出来了。
我们发现boost通过适量内存和计算量的损失获得了准确率上的较大进步。同样,对样本的失真处理也能在不去实际收集更多样本的情况下,用于增大样本的有效尺寸。
考虑到SVM不像其它方法一样有着对问题的先验知识,它的准确度相当不错。实际上,如果图片像素按固定方式打乱,失去了它的图像结构,这个分类器也能完成任务。RD-SVM对内存和计算的需求大概是神经网络的两倍以内,错误率非常接近。这一技术还是相对新的,所有我们可以期待它的提升。
当数据数量足够时,很多方法都能获得相当好的准确度。神经网络相比基于记忆的方法,运行得更快且内存占用跟梢。随着训练数据的增长,神经网络的优势将会更加突出。
E. Invariance and Noise Resistance
卷积网络非常适合识别、拒绝各种大小、类型、方向的图像,就像实际字符串识别系统中的启发式分段器产生的那样。
正如之前实验中一样,噪声抵抗和失真不变性的重要性不明显。但实际应用中的情况却不一样。字符的分割通常先于被识别。而分割算法很少会完美,常常在字符图像中留下无关的痕迹(噪声,下划线,相邻的字符),有时会切得太狠,留下不完整的字符。这些图片不能被可靠地大小归一化和置中。归一化不完整的字符非常危险。比如,一个放大的竖痕迹能被认作1。因此很多系统在词的阶段就进行了归一化操作。在我们的系统了,支票里整个填写区域的最高和最低轮廓被检测出,用于将突破归一化到固定高度。虽然这保证了痕迹不会被拉伸到像字符,这也让字符分割后的大小和垂直方向的位置变化很大。因此最好使用一个对这种变性健壮的分类器。图13显示了被LeNet-5正确识别的失真样本。据估算,对于缩放变化范围为2,垂直偏移半个字符高度,旋转30度的图像,识别准确度都可以得到保证。看起来卷积网络提供了一个对几何失真健壮性问题的部分答案,尽管对于复杂形状的完全不变性识别仍是个问题。
图13中包含了LeNet-5在极端噪声情况下的健壮性的样本。要处理这些图片会对很多方法造成不能克服的困难,而LeNet-5似乎能从这些混乱的图片中提取出显著的特征。用于训练的MNIST训练集添加了一定的噪声。每个像素都有0.1的概率翻转。