LeNet:Gradient based learning applied to document recognition
- 作者:Yann LeCun, Leon Bottou, Yoshua Bengio, and Patrick Haffner
- 发表时间:December 1998
- 期刊:Proceedings of the IEEE
- 影响:世界上第一个卷积神经网络
论文中英文对照合集 : https://aiqianji.com/blog/articles
Abstract 摘要
用BP算法训练多层神经网络,是梯度学习技术的一个成功的案例。本文给出一个合适的网络架构,通过bp算法可以计算出一个复杂的决策面,来实现对于类似手写体字符这样高维模式的分类。本文回顾了各种不同的手写体识别方法,并基于标准任务比较这些算法。卷积神经网络,专门为处理变化较大的二维图形而设计,显示出超越所有其他技术的能力。
现实中的文档识别系统由字段提取、分割、识别和语言建模等多个模块组成。图变换网络(Graphic Transformer Networks, GTN)是一种新的学习方法,允许多模块系统全局的使用梯度方法训练,以便尽量减少整体性能指标。
本文介绍了两个针对在线手写体识别的系统。实验证实了全局训练的优势,以及图变换网络的灵活性。
本文还介绍了一个用来读取空白支票的图变换网络系统。通过使用基于全局训练技术的卷积神经网络字符识别算法,可提供商业和个人支票的精确记录。该系统已经实现了商业化部署,每天读取数百万张支票。
keywords 关键词
神经网络, OCR,文档识别,机器学习,梯度学习,卷积神经网络,图变换网络,有限状态传感器。
Introduction 引言
在过去的几年里,机器学习技术,尤其是基于神经网络的那部分,在模式识别系统中的重要性快速提升。事实上,在近期一些成功的模式识别应用中,例如连续语音识别和手写体识别,学习技术是否是一个关键性的因素仍存在争议。
本文展示的主要信息是,更多地依靠自动学习、更少地依赖人工设计的启发式策略,能够构建更好的模式识别系统。当前机器学习和计算机技术的进步已经使这样的方法成为可能。用字符识别算法作为一个案例研究,我们看到,人工设计的特征抽取方法,完全可以被仔细设计的直接基于像素图象的学习机很好地代替。用文档理解算法举例来说,我们看到,传统的构建方法是用人工集成多个设计好的模块,这种方法完全被一种统一的并且有原则的设计范式所取代,这种设计范式允许训练所有的模块以便优化全局的性能指标,这个被称之为图变换网络。
从模式识别的早期开始,人们就知道,自然数据的多样性和丰富性,无论是语音、字形还是其他类型的模式,几乎不可能完全靠手工建立一个精确的识别系统。因此,大多数模式识别系统是使用自动学习技术和手工算法的组合来构建的。识别单个模式的常用方法是将系统分为两个主要模块,如图1所示。rst模块称为特征提取器,它对输入模式进行变换,使得它们可以用低维向量或短串符号来表示,这些符号(a)可以很容易地匹配或比较,并且(b)对于不改变其性质的输入模式的变换和扭曲相对不变。特征抽取器包含了大部分的先验知识,并且对任务相当特殊。它也是大多数设计的焦点,因为它通常完全是手工制作的。另一方面,通常是通用的、可训练的。这种方法的一个主要问题是,识别精度在很大程度上取决于设计者提出适当特征集的能力。事实证明,这是一项艰巨的任务,不幸的是,必须为每一个新问题重新做。大量的模式识别文献致力于描述和比较不同特征集对于特定任务的相对优点。
图1、传统的模式识别有两个模块:固定特征提取模块和可训练分类模块。
历史上,需要合适的特征抽取器是因为分类器使用的学习技术仅限于具有容易分离类的低维空间[1]。在过去的十年里,三个因素的结合改变了这一愿景。
首先,具有快速运算单元的低成本机器的可用性允许更多地依赖于强力“数值”方法,而不是算法改进。
其次,大型数据库的可用性使设计师能够更多地依赖真实数据,而较少地依靠手工提取特征来构建识别系统。
第三个也是非常重要的因素是强大的机器学习技术的可用性,这些技术可以处理高维输入,并且在输入这些大数据集时可以生成复杂的决策函数。
可以说,语音和笔迹识别系统的准确性最近的进步在很大程度上可以归因于对学习技术和大量训练数据集的依赖性增加。作为这一事实的证据,现代商业OCR系统的很大一部分使用了某种形式的多层神经网络训练与反向传播。
在这项研究中,我们考虑了手写字符识别的任务(第一和第二节),并比较了几种学习技术在手写数字识别基准数据集上的性能(第三节)。虽然更多的自动学习是有益的,但是没有最少的关于任务的先验知识,任何学习技术都不可能成功。在多层神经网络的情况下,一个很好的结合知识的方法是根据任务调整其结构。第 II 节介绍的卷积神经网络[2]是一个特殊的神经网络体系结构的例子,它通过使用局部连接模式和对权重施加约束来整合关于二维形状不变性的知识。第 III 节对几种孤立手写体数字识别方法进行了比较。从单个字符的识别到文档中单词和句子的识别,第四节介绍了将多个训练模块组合起来以减少总体误差的思想。如果模块操作有向图,则最好使用多模块系统来识别可变长度的对象,如手写字。这就引出了可训练图变换网络(GTN)的概念,并在第四节中介绍了GTN。第五节描述了用于识别单词或其他字符串的启发式过分割的经典方法。第六节介绍了在不需要人工分割和标记的情况下,在字级训练识别器的判别和非判别梯度技术。第七节提出了一种很有前途的空间位移神经网络方法,通过扫描识别器输入上所有可能的位置。在第八节中,基于一般的图合成算法,可训练的图变换网络可以表示为多重广义变换。讨论了语音识别中常用的GTNs模型和隐马尔可夫模型之间的联系。第九节描述了一个全局训练的GTN系统,用于识别输入到笔式计算机中的手写体。这个问题被称为“联机”手写识别,因为当用户书写时,机器必须立即产生反馈。系统的核心是卷积神经网络。结果清楚地显示了在单词层次训练识别器的优势,而不是在预分割的、手工标记的、孤立的字符上训练识别器。第十节描述了一个完整的基于GTN的系统,用于读取手写和机器打印的银行支票。系统的核心是第二节描述的卷积神经网络LeNet-5。该系统已在NCR公司银行业支票识别系统中投入商业应用。它在全美多家银行每月收到数百万张支票。
A. 从数据中学习
自动机器学习有几种方法,但最近几年神经网络社区推广的最成功的方法之一可以称为“数值”或基于梯度的学习。
学习机计算函数$Y^p = F(Z^p , W)$ ,
其中$Z^p$ 是第p 个输入模式,W表示系统中可调参数的集合。
在模式识别设置中,输出$Y^p$可以被解释为模式$Z^p$ 的识别类标签,或者被解释为与每个类相关联的分数或概率。
损失函数$E^p=D(D^p,F(W,Z^p))$,测量的是$D^p$:输出模式$Z^p$对应的“正确”结果 和系统产生的输出之间的差异。
平均损失函数$E_{train}(W)$是一组标记示例(称为训练集${ (Z^1, D^1), ...... (Z^P, D^P)}$上的误差$E^p$的平均值。
在最简单的情况下,学习问题在于找出使$E_{train}(W)$最小化的W值。在实践中,系统在训练集上的性能没有什么意义。更为相关的衡量标准是系统在实际应用中的误差率。这种性能是通过测量一组与训练集(称为测试集)不相交的样本的精度来估计的。大量的理论和实验工作[3]、[4]、[5]表明,测试集$E_{test}$上的期望错误率和训练集$E_{train}E$上的错误率之间的差距随着训练样本数的增加而减小,近似于
$E_{test}- E_{train}=k(h/P)^{\alpha} (1)$
其中P是训练样本的数量,h是“有效容量”或机器复杂性的度量[6],[7],$\alpha$是介于0:5和1:0之间的数字,k 是常数。当训练样本数增加时,这种差距总是减小的。此外,随着容量h增加,$E_{train}$减小。因此,当增大容量h时,$E_{train}$的减小与间隙的增大之间存在一个权衡关系,最优化容量h的值以便达到最小的泛化误差$E_{test}$。
大多数学习算法试图最小化$E_{train}$以及一些对间隙的估计。该方法的一个正式版本称为结构风险最小化[6],[7],其基础是解出一系列容量不断增加的学习机,对应于参数空间的一系列子集,使得每个子集都是前一子集的超集。实际上,结构风险最小化是通过最小化$E_{train}+\beta H(W)$来实现的,其中函数$H(W)$被称为正则化函数,并且是常数。$H(W)$的选择使得它对属于参数空间的高容量子集的参数W 取大值。最小化$H(W)$实际上限制了参数空间的可访问子集的容量,从而控制了最小化训练误差和最小化训练误差和测试误差之间的期望间隙之间的权衡。
B. 梯度学习
基于一组参数最小化一个函数是计算机科学中许多问题的根源。基于梯度的学习利用了这样一个事实,最小化一个相当平滑的连续函数通常比离散(组合)函数更容易。通过估计参数值的微小变化对损失函数的影响,可以使损失函数最小化。这是通过损失函数相对于参数的梯度来测量的。当梯度矢量可以解析计算(而不是通过扰动进行数值计算)时,就可以设计出有效的学习算法。这是众多连续参数梯度学习算法的基础。在本文描述的过程中,参数W的集合是一个实值向量,对于它,$E(W)$是连续的,并且几乎处处都是可微的。在这种情况下,最简单的最小化过程是梯度下降算法,其中W的迭代调整如下:
$W_k=W_{k-1}-\epsilon\frac{\partial E(W)}{\partial W} (2)$
在最简单的情况下,是标量常量。更复杂的过程使用变量,或用它代替对角矩阵,或用它代替逆Hessian矩阵的估计,如牛顿或拟牛顿方法。也可以使用共轭梯度法[8]。然而,附录B显示,尽管文献中有许多相反的说法,这些二阶方法对大型学习机的有用性非常有限。一个流行的最小化过程是随机梯度算法,也称为在线更新。它包括使用噪声或近似的平均梯度版本更新参数向量。在最常见的情况下,W基于单个样本进行更新:
$W_k=W_{k-1}-\epsilon\frac{\partial E^{pk}(W)}{\partial W} (3)$
使用此过程,参数向量围绕平均轨迹进行计算,但通常比常规梯度下降法和二阶方法在具有冗余样本(如语音或字符识别中遇到的样本)的大型训练集上收敛得快得多。其原因在附录B中有解释。自20世纪60年代[9]、[10]、[11]以来,应用于学习的此类算法的特性已经在理论上进行了研究,但直到80年代中期才在非琐碎任务上取得实际成功。
C. 梯度 BP 算法
基于梯度的学习方法从20世纪50年代后期就开始使用,但它们大多局限于线性系统[1]。这种简单的梯度下降技术在复杂的机器学习任务中的惊人效用直到以下三个事件发生后才被广泛认识。第一个事件是意识到,尽管有相反的早期警告[12],损失函数中存在局部极小值在实践中似乎不是一个主要问题。当人们注意到局部极小值似乎并不是早期基于梯度的非线性学习技术(如Boltzmann机器)成功的主要障碍时,这一点就变得明显了[13],[14]。第二件事是Rumelhart、Hinton和Williams等人[15]推广了一种简单有效的程序,即反向传播算法,用于计算由若干层处理组成的非线性系统中的梯度。第三件事是证明了将反向传播方法应用于具有sigmoidal单元的多层神经网络可以解决复杂的学习任务。反向传播的基本思想是,通过从输出到输入的传播,可以有效地计算出梯度。这种思想在60年代早期的控制理论文献[16]中有描述,但它在机器学习中的应用当时还没有普遍实现。有趣的是,神经网络学习背景下反向传播的早期推导没有使用梯度,而是使用“中间层单元的虚拟目标”[17]、[18]或最小干扰参数[19]。控制理论文献中使用的拉格朗日形式可能是推导反向传播[20]和推导反向传播到递归网络[21]和异质模块网络[22]的推广的最佳严格方法。第I-E节给出了一般多层系统的一个简单推导。
对于多层神经网络来说,局部极小值似乎不是一个问题,这在理论上是个谜。据推测,如果网络对于任务来说过大(在实践中通常是这样),参数空间中存在“额外维度”会降低无法到达区域的风险。反向传播是迄今为止使用最广泛的神经网络学习算法,可能也是任何形式中使用最广泛的学习算法。
D. 学习方法用于真实的手写体识别系统
孤立手写体字符识别在文献中得到了广泛的研究(见[23],[24]的综述),是神经网络的早期成功应用之一[25]。第 III 节介绍了手写体数字识别的对比实验。比较结果表明,用梯度学习训练的神经网络比在相同数据上测试的所有其他方法表现得更好。最好的神经网络,称为卷积网络,旨在学习直接从像素图像中提取相关特征(见第 II 节)。
然而,手写体识别中最困难的问题之一,不仅是识别单个字符,而且是在单词或句子中从相邻字符中分离出字符,这一过程被称为切分。这种已经成为标准的技术称为启发式分割。它包括使用启发式图像处理技术在字符之间生成大量潜在的切割,然后根据识别器为每个候选字符给出的分数选择切割的最佳组合。在这样的模型中,系统的准确性取决于启发式生成的切割质量,以及识别器将正确分割的字符与字符片段、多个字符或其他错误分割的字符区分开来的能力。训练一个识别器来执行这项任务是一个巨大的挑战,因为在创建一个包含错误分割字符的标记数据库方面存在困难。最简单的解决方案是通过分段器运行字符串图像,然后手动标记所有字符假设。不幸的是,这不仅是一个极其乏味和昂贵的任务,而且也难以保障标签的一致性。例如,应该将切分4的右半部分标记为1还是非字符?切割8的右半部分应该标记为3吗?
第五节描述的第一个解决方案是在整个字符串级别而不是字符级别上训练系统。基于梯度学习的概念可以用于此目的。系统被训练成最小化总损失函数,该函数测量错误答案的概率。第五节探讨了确保损失函数可微的各种方法,因此适合于使用基于梯度的学习方法。第五节介绍了有向无环图的使用,它的弧带有数字信息,作为一种表示替代假设的方法,并介绍了GTN的思想。
第七节描述的第二种解决方案是完全消除分割。其思想是将识别器扫过输入图像上的每个可能位置,并依赖于识别器的“字符识别”属性,即它能够正确识别输入字段中居中的字符,即使在存在除它之外的其他字符的情况下,拒绝不包含居中字符的图像时[26],[27]。通过将识别器扫过输入而获得的识别器输出序列,然后馈送到考虑语言约束的图变换器网络,最后提取最可能的解释。这种GTN与隐马尔可夫模型(HMM)有点相似,这使得该方法令人想起经典的语音识别方法[28],[29]。虽然这项技术在一般情况下是相当昂贵的,但卷积神经网络的使用使其特别具有吸引力,因为它可以显著节省计算成本。
E. 全局可训练系统
如前所述,大多数实用的模式识别系统由多个模块组成。例如,文档识别系统由提取感兴趣区域的字段定位器、将输入图像分割成候选字符图像的字段分段器、对每个候选字符进行分类和评分的识别器和上下文后处理器组成,通常基于随机文法,它从识别器生成的假设中选择语法正确的最佳答案。在大多数情况下,从一个模块传递到另一个模块的信息最好用图形表示,图形中的数字信息附着在弧上。例如,识别器模块的输出可以表示为非循环图,其中每个弧包含候选字符的标签和分数,并且每个路径表示输入字符串的另一种解释。通常,每个模块都是在其上下文之外手动优化的,或者有时是经过训练的。例如,字符识别器将在预分割字符的标记图像上进行训练。然后组装整个系统,并手动调整模块的一个子集参数,以最大限度地提高整体性能。最后这一步极其乏味、耗时,而且几乎肯定是次优的。
另一个更好的选择是以某种方式训练整个系统,以便最小化全局错误度量,例如文档级别的字符错误分类概率。理想情况下,我们希望找到这个全局损失函数相对于系统中所有参数的最小值。如果测量系统性能的损失函数E EE相对于系统的可调参数W WW是可微的,我们可以使用基于梯度的学习求出E EE的局部最小值。然而,乍一看,系统的庞大规模和复杂性似乎会使这一问题变得棘手。
为了保证全局损失函数$E^p(Z^p,W)$是可微的,将整个系统建立为由可微模块组成的前馈网络。每个模块实现的功能必须是连续的,并且几乎在任何地方都可以对模块的内部参数(例如,对于字符识别模块,神经网络字符识别器的权重)和模块的输入进行区分。如果是这样的话,一个众所周知的反向传播过程的简单推广就可以用来精确地计算损失函数相对于系统中所有参数的梯度[22]。例如,让我们考虑一个构建为模块级联的系统,每个模块实现一个函数$X_n=F_n(W_n,X_{n-1})$,其中$X_n$ 是表示模块输出的向量,$W_n$ 是模块中可调参数的向量(W的子集),$X_{n-1}$是模块的输入向量(即上一个模块的输出向量)。输入模式$Z^p$的第一个模块输入为$X_0$。如果$E^p$相对于$X_n$的偏导数已知,则$E^p$ 相对于$W_n$ 和$X_{n-1}$ 的偏导数可以使用向后递推计算
$\frac{\partial E^p}{\partial W_n}=\frac{\partial F}{\partial W}(W_n,X_{n-1})\frac{\partial E^p}{\partial X_n}\ \frac{\partial E^p}{\partial X_{n-1}}=\frac{\partial F}{\partial X}(W_n,X_{n-1})\frac{\partial E^p}{\partial X_n} (4)$
式中,$\frac{\partial F}{\partial W}(W_n,X_{n-1})$是F相对于W 在点$(W_n;X_{n-1})$处求值的雅可比,
而 $\frac{\partial F}{\partial X}(W_n,X_{n-1})$ 是F相对于X的雅可比。
向量函数的雅可比是包含所有输出相对于所有输入的偏导数的矩阵。第一个方程计算了$E^p(W)$的一些梯度项,而第二个方程产生了一个后向递推,就像众所周知的神经网络的后向传播过程一样。我们可以对训练模式上的梯度进行平均,得到完整的梯度。有趣的是,在许多情况下,不需要显式地计算雅可比矩阵。上面的公式使用了雅可比矩阵与偏导数向量的乘积,而且不需要事先计算雅可比矩阵,直接计算雅可比矩阵更容易。与一般的多层神经网络类似,除了最后一个模块外,其余的模块都称为隐层,因为它们的输出是不可从外部观察到的。与上面描述的简单模块级联相比,更复杂的情况下,偏导数表示法变得有些模棱两可和尴尬。在更一般的情况下,可以使用拉格朗日函数[20]、[21]、[22]进行完全严格的推导。
传统的多层神经网络是上述情况的一个特例,其中状态信息$X_n$ 用 固定大小的向量表示,并且模块是矩阵乘法(权值)和成分sigmoid函数(神经元)的交替层。然而,如前所述,在复杂的识别系统中,状态信息最好用带有数字信息的图形来表示。在这种情况下,每个称为图转换器的模块将一个或多个图作为输入,并生成一个图作为输出。这些模块的网络称为图变换网络(GTN)。第四节、第六节和第八节提出了GTNs的概念,并说明基于梯度的学习可以用来训练所有模块中的所有参数,从而最小化全局损失函数。当状态信息由基本上离散的对象(如图)表示时,可以计算梯度,这似乎是自相矛盾的,但正如后面所示,可以避免这种矛盾。
II. 卷积神经网络用于单个字符识别
经过梯度下降训练的多层网络能够从大量示例中学习复杂、高维、非线性映射,这使得它们成为图像识别任务的明显候选对象。在传统的模式识别模型中,手工设计的特征提取器从输入中收集相关信息并消除不相关的变量。然后,可训练的分类器将得到的特征向量分类成类。在这个方案中,标准的、完全连接的多层网络可以用作分类器。一个潜在的更有趣的方案是尽可能多地依赖特征提取器本身的学习。在字符识别的情况下,可以向网络提供几乎原始的输入(例如大小标准化的图像)。虽然这可以用一个普通的完全连接的前馈网络来完成,但在字符识别等任务上还是有一些问题。
首先,典型的图像很大,通常有几百个变量(像素)。第一个全连接层,比如说在第一层中有一百个隐藏单元,已经包含了几万个权重。如此大量的参数增加了系统的容量,因此需要更大的训练集。此外,存储这么多权重的内存要求可能会排除某些硬件实现。但是,非结构化网络对于图像或语音应用的主要决定因素是,它们对于输入的平移或局部失真没有内置的不变性。在被发送到神经网络的固定大小的输入层之前,字符图像或其他2D或1D信号必须被近似大小规格化并位于输入域的中心。不幸的是,没有这样的预处理是完美的:手写通常是在单词级别标准化的,这会导致单个字符的大小、倾斜和位置变化。这一点,再加上写作风格的可变性,将导致输入对象中不同特征的位置发生变化。原则上,一个足够大的全连通网络可以学习产生相对于这种变化不变的输出。然而,学习这样的任务可能会导致在输入中的不同位置放置具有相似权重模式的多个单元,以便在它们出现在输入上的任何地方检测出不同的特征。学习这些重量配置需要大量的训练实例来涵盖可能的变化空间。在卷积网络中,如下所述,移位不变性是通过在空间上强制复制权重配置而自动获得的。
其次,全连接架构的一个不足是完全忽略了输入的拓扑。输入变量可以以任何(固定的)顺序呈现,而不影响训练的结果。相反,图像(或语音的时频表示)具有很强的2D局部结构:空间或时间上邻近的变量(或像素)高度相关。局部相关性是在识别空间或时间对象之前提取和组合局部特征的众所周知的优点的原因,因为相邻变量的配置可以被分类成少量的类别(例如,边缘、拐角…)。卷积网络通过将隐藏单元的感受野限制在局部来强制提取局部特征。
A. 卷积网络
卷积网络结合了三种架构思想,以确保一定程度的移位、缩放和失真不变性:局部感受野、共享权重(或权重复制)以及空间或时间降采样。图2显示了一个用于识别字符的典型卷积网络,称为LeNe