ps:因为论文完全可以机翻而不需要手工翻译,所以有部分翻译不是严格按照英译中的意思而是有我自己的一定理解,请参考原论文。另外有好多地方我也没看懂,所以翻译的也不一定准确,欢迎批评指正。

目录

  • 摘要
  • 术语
  • 1. 引言
    • A. 从数据中学习
    • B. 基于梯度的学习
    • C. 梯度反向传播
    • D. 在实际手写识别系统中学习
    • E. 全局训练系统
  • 2. 用于孤立字符识别的卷积神经网络
    • A. 卷积网络
    • B. LeNet-5
    • C. 损失函数
  • 3. 结果与其它方法的比较
    • A. 数据库:修正NIST数据集
    • B. 结果
    • C. 与其他分类器的比较
    • D. 讨论
    • E. 不变性和抗噪性

摘要

摘要:用反向传播算法训练的多层神经网络建立了一个成功的基于梯度的学习技术的最佳例子。给定适当的网络体系架构,可以使用基于梯度的学习算法来合成复杂的决策面,该决策面可以以最少的预处理对高维模式(例如手写字符)进行分类。本文回顾了应用于手写字符识别的各种方法,并将它们与标准的手写数字识别任务进行了比较。专门设计用于处理二维(2-D)形状的可变性的卷积神经网络被证明性能优于所有其他技术。
  现实生活中的文档识别系统由多个模块组成,包括字段提取,分割,识别和语言建模。一种称为图变换网络(GTN)的新的学习范式,允许使用基于梯度的方法对此类多模块系统进行全局训练,从而最大程度地降低总体性能指标。
  文中描述了两种用于在线手写识别的系统,实验证明了进行全局训练的优势以及图变换网络的灵活性。
  文中还描述了用于读取银行支票的图变换网络,其使用卷积神经网络字符识别器与全局训练技术相结合,以提供商务和个人支票记录的准确性。现已进行商业部署,每天读取数百万张支票。
  关键词:神经网络,OCR,文档识别,机器学习,基于梯度的学习,卷积神经网络,图变换网络,有限状态转换机

术语

GT Graph transformer. 图变换
GTN Graph transformer network. 图变换网络
HMM Hidden Markov model. 隐藏马尔科夫模型
HOS Heuristic oversegmentation. 启发式过度分段
K-NN K-nearest neighbor. K-近邻
NN Neural network. 神经网络
OCR Optical character recognition. 光学字符识别
PCA Principal component analysis. 主成分分析
RBF Radial basis function. 径向基函数
RS-SVM Reduced-set support vector method. 约简集支持向量方法
SDNN Space displacement neural network. 空间位移神经网络
SVM Support vector method. 支持向量方法
TDNN Time delay neural network. 时延神经网络
V-SVM Virtual support vector method. 虚拟支持向量方法

1. 引言

  在过去的几年中,机器学习技术,特别是应用于神经网络中的机器学习技术在模式识别系统中起到了越来越重要的作用,事实上可以说,在最近的诸如连续语音识别和手写文字识别等模式识别的成功应用中,学习技巧的可用性一直是一个关键因素。
  本文的主要内容是更好的模式识别系统可以更多地靠自动学习的方法而更少地靠人工启发设计的方法来建立。最近的机器学习和计算机技术的进展使这成为可能。以字符识别为例,我们证明了手工制作的特征提取可以被精心设计的学习机器所取代,这些机器可以直接对像素图像进行操作。以文档理解为例,我们证明了通过加入手工设计的模块来构建识别系统的传统方法可以被一种统一且原则良好的设计模式(称为图变换网络)所取代,这种设计模式允许训练所有模块以优化全局性能标准。
  从模式识别的早期开始,人们就知道,自然数据的可变性和丰富性,无论是语音、字形还是其他类型的模式,使得完全靠手工建立一个精确的识别系统几乎是不可能的。因此,大多数模式识别系统都是结合自动学习技术和手工算法构建的。识别单个模式的常用方法是将系统分为图1中所示的两个主要模块。第一个模块,称为特征提取器,对输入模式进行转换,以使它们可以由低维向量或符号的短字符串表示,它们(a)可以轻松匹配或比较,(b)在转换过程中相对不变,并且输入模式的失真不会改变其性质。特征提取器包含大多数先验知识,并且是用于特定任务的。它也是大多数设计方法的重点,因为它通常是完全手工制作的。另一方面,分类器通常是通用的且可训练的。这种方法的主要问题之一是识别精度在很大程度上取决于设计人员提出适当的特征集的能力。事实证明这是一项艰巨的任务,而且对于每个新问题都必须重做一次。大量的模式识别文献致力于描述和比较针对特定任务的不同特征集的优缺点。

图1 传统的模式识别通过两个模块来实现,一个固定的特征提取器,一个可训练的分类器

  历史上,需要适当的特征提取器的原因是:分类器使用的学习技术仅限于具有易于分离的类的低维空间。在过去十年中,三个因素共同改变了这一情况。首先,低成本高性能的计算机器的可用性允许更多地依靠暴力“数字”方法而不是依靠算法优化;其次,针对市场和人们广泛关注的问题如手写体识别中的大量数据,设计人员能够更多地依赖真实数据而不是手工特征提取来构建识别系统,第三个也是非常重要的因素是强大的机器学习技术的可用性,通过使用大型训练数据集可以处理高维输入并生成复杂的决策函数。可以说语音和手写识别系统在准确性方面的最新进展在很大程度上归因于对学习技术和大型训练数据集的日益依赖。实际上,现代商业OCR系统中有很大一部分使用经过反向传播训练的某种形式的多层神经网络。
  在这项研究中,我们考虑了手写字符识别的任务(第一和第二部分),并在用于手写数字识别的基准数据集上比较了几种学习技术的性能(第三部分)。尽管更多的自动学习是有益的,但没有关于任务的最少先验知识,任何学习技术都无法成功。在多层神经网络的情况下,吸收知识的一种好方法是根据任务调整其体系结构。第二部分介绍的卷积神经网络是专用神经网络体系结构的一个示例,该体系结构通过使用局部连接模式并通过对权重施加约束来吸收尺寸不变的2D形状的知识。第三部分介绍了几种对手写数字识别进行分类的方法的比较。为了从识别单个字符到识别文档中的单词和句子,在第四部分中介绍了组合多个经过训练以减少总体错误的模块的想法。如果模块操作有向图,则最好使用多模块系统来识别诸如手写单词之类的可变长度对象。这导致了在第四部分中也引入了可训练图变换网络(GTN)的概念。第五部分介绍了用于识别单词或其他字符串的启发式过分分割的经典方法。第六部分介绍了基于辨别性和非辨别性梯度的技术,可在单词级别上训练识别器,而无需人工分段和标记。第七部分介绍了有前景的空间位移神经网络方法,该方法通过在输入的所有可能位置上扫描识别器,从而避免了对分割启发式算法的需求。在第八部分中,表明了可训练图变换网络可以基于通用的图形组合算法表述为多个通用的转换。本文还研究了语音识别中常用的GTN和隐马尔可夫模型之间的联系。第九部分介绍了经过全局训练的GTN系统用于识别在笔输入计算机中输入的笔迹。这个问题被称为“在线”手写识别,因为机器必须在用户书写时立即反馈结果。系统的核心是卷积神经网络。结果清楚地证明了在单词级别训练识别器的优势,而不是对它进行预先分割的,手工标记的,孤立的字符进行训练。第十部分描述了一个完整的基于GTN的系统,用于读取手写和机器打印的银行支票,该系统的核心是第二部分中描述的称为LeNet-5的卷积神经网络。该系统已在NCR公司的银行业支票识别系统中投入商业使用,每月在全美国多家银行中读取数百万张支票。

A. 从数据中学习

  有几种自动机器学习的方法,但是近年来,由神经网络社区普及的最成功的方法之一可以称为“数字”或基于梯度的学习。学习机器计算一个函数Yp=F(Zp,W)Y^p=F(Z^p,W)Yp=F(Zp,W),其中ZpZ^pZp是第p个输入的模式,W是这个系统中可调参数的集合。在一个模式识别任务中,输出YpY^pYp可以被解释为ZpZ^pZp的识别分类标签,或分数,或每一类的概率。损失函数Ep=D(Dp,F(W,Zp))E^p=D(D^p,F(W,Z^p))Ep=D(Dp,F(W,Zp))中,测量了模式ZpZ^pZp的正确的或期望的输出DpD^pDp,与系统产生的输出之间的差值。平均损失函数Etrain(W)E_{train}(W)Etrain​(W)是一组称作训练集的标注数据{(Z1,D1),...,(Zp,Dp)(Z^1,D^1),...,(Z^p,D^p)(Z1,D1),...,(Zp,Dp)}上的误差EpE^pEp的平均值。在最简单的问题中,学习问题在于找到使Etrain(W)E_{train}(W)Etrain​(W)最小的W值。实际上,系统在训练集上的性能不能说明什么,在实际中的错误率更为有用。p应通过测量与训练集分离的一组样本的准确性来评估性能,这一样本成为测试集。很多理论和经验的工作证明测试集上期望的错误率和训练集上的错误率之间的差距大致符合Etest−Etrain=k(hp)αE_{test}-E_{train}=k(\frac{h}{p})^{\alpha}Etest​−Etrain​=k(ph​)α其中p是训练样本数,h是有效容量或系统复杂度的测量值,α\alphaα是一个介于0.5和1之间的数,k是一个常数。这一差距通常随着训练数据的增大而减小。此外,随着容量h的增加,EtrainE_{train}Etrain​会减小。因此当增加了容量h后,在EtrainE_{train}Etrain​的下降和两者差距的增加之间存在一个权衡,其中容量h的最优值可以实现最低的泛化误差EtestE_{test}Etest​。大多数学习算法都试图最小化EtrainE_{train}Etrain​以及差距的估计值。这种形式的正式版本称为结构风险最小化,它基于定义容量增强的学习机序列,该序列对应于参数空间的子集序列,从而每个子集都是先前子集的超集。实际上,通过最小化Etrain+βH(W)E_{train}+\beta H(W)Etrain​+βH(W)来实现结构化风险最小化,其中函数H(W)称为正则化函数,β\betaβ是一个常数。选择H(W)以使它在属于参数空间大容量子集的参数W上取大值。p最小化H(W)限制了参数空间可访问子集的容量,从而控制了最小化训练误差与使训练误差和测试误差之间的差距最小化之间的折衷。

B. 基于梯度的学习

  寻找一组参数使函数最小化的一般问题是计算机科学中许多问题的基础。基于梯度的学习基于这样一个事实,即与离散(组合)函数相比,最小化连续可导的函数通常要容易得多。通过估计参数值的小变化对损失函数的影响可以使损耗函数最小化,这是通过损失函数相对于参数的梯度来测量的。当可以通过解析方式计算梯度向量时(相对于通过扰动进行数值计算),可以设计出有效的学习算法。这是众多具有连续值参数的基于梯度的学习算法的基础。在本文描述的过程中,参数W的集合是一个实值向量,对于该向量,E(W)连续且处处可导。在这种情况下,最简单的最小化步骤是梯度下降算法,其中W的迭代调整如下:Wk=Wk−1−ϵ∂E(W)∂WW_k=W_{k-1}-\epsilon \frac{\partial E(W)}{\partial W}Wk​=Wk−1​−ϵ∂W∂E(W)​在这个最简单的例子中,ϵ\epsilonϵ是标量常数,更复杂的方法是使用可变的参数,或使用一个对角矩阵代替它,或在牛顿或高斯牛顿法中用逆黑塞矩阵的估计,也可以使用共轭梯度法。但是附录B说明了尽管文献中有许多相反的说法,但是这些二阶方法对大型学习算法的作用非常有限。
  一个流行的方法是随机梯度下降算法,也被称作在线更新,它包括将平均梯度下降改为随机的或近似的。在最典型的例子中,W基于一个简单的公式进行更新:Wk=Wk−1−ϵ∂Epk(W)∂WW_k=W_{k-1}-\epsilon \frac{\partial E^{p_k}(W)}{\partial W}Wk​=Wk−1​−ϵ∂W∂Epk​(W)​这一方法使参数向量在一个轨迹附近波动,但通常在一个存在冗余数据的庞大的数据集上,它的收敛速度都会比标准梯度下降或二阶方法快得多,例如语音或字符识别中遇到的问题。这一原因将会在附录B中解释。这一算法在学习上的性质早在1960年代就进行了理论研究,但是有价值的成功应用直到1980年代中期才出现。

C. 梯度反向传播

  基于梯度的学习方法自从1950年代末期就开始使用,但它们大部分都限制在线性系统内。直到接下来这三件事的发生,这一简单的梯度下降算法在复杂机器学习任务中的惊人作用才被人们广泛认识。第一个事件是人们意识到,尽管有相反的警告,但损失函数中局部极小值的存在在实践中似乎不是一个主要问题。当注意到局部最小值似乎不是早期例如玻尔兹曼机等基于非线性梯度的学习技术的成功的主要障碍时,这一点就变得显而易见。第二个事件是一个简单而有效的算法–反向传播算法通过Rumelhart,Hinton和 Williams等人而广为人知,这一算法用于计算由多个处理层所组成的非线性系统的梯度。第三个事件是应用sigmoid激活单元的反向传播算法应用于多层神经网络可以解决复杂的学习任务的典型事例。反向传播的基本原理是梯度可以高效地通过从输出到输入的传播进行计算。这一想法在60年代早期的控制理论领域中进行了描述,但它在机器学习中的应用并没有被广泛认识。有趣的是,在神经网络学习的研究中,早期关于反向传播的推导并没有使用梯度,而是中间层单元的虚拟期望值或最小干扰参数。在控制理论文献中使用的拉格朗日公式可能提供了导出反向传播的最佳严格方法,以及导出反向传播到递归网络和异构模块网络的推广。第I-E部分给出了一般多层系统的简单推导。
  在多层神经网络中,局部极小值似乎并不是问题的事实成了一个理论上的谜。可以推测,如果为任务分配的网络过大(在实践中通常如此),则参数空间中“额外尺寸”的存在会降低无法到达区域的风险。反向传播是迄今为止使用最广泛的神经网络学习算法,并且可能是使用最广泛的任何形式的学习算法。

D. 在实际手写识别系统中学习

  孤立的手写字符识别已在学术领域中进行了广泛的研究,并且是神经网络早期成功的应用之一。第三部分研究了识别单个手写数字的比较实验。它们表明,使用基于梯度的学习方法训练的神经网络比在本文的同一数据上测试的所有其他方法都有更好的表现。最好的神经网络称为卷积网络,旨在学习直接从像素图像中提取相关特征(请参阅第二部分)。
  但是,手写识别中最困难的问题之一是不仅要​​识别单个字符,而且还要在单词或句子中将字符与相邻字符分开,这一过程称为分割。这项已成为“标准”的技术称为“启发式过度细分”。它包括使用启发式图像处理技术在字符之间生成大量可能的剪切,然后基于识别器为每个候选字符给出的分数,选择剪切的最佳组合。在这样的模型中,系统的准确性取决于试探法产生的剪切的质量,并且取决于识别器将正确分割的字符与字符片段,多个字符或其他不正确分割的字符区分开的能力。训练识别器以执行此任务带来了重大挑战,因为难以创建带有错误分段字符的标记数据库。最简单的解决方案包括通过分段器运行字符串图像,然后手动标记所有字符假设。不幸的是,这不仅是一项极其繁琐且昂贵的任务,而且很难一致地进行标记。例如,应将分割4的右半部分标记为1还是非字符?分割8的右半部是否应标记为3?
  第五部分中介绍的第一个解决方案是在整个字符串级别而不是在字符级别上训练系统。基于梯度学习的概念可以用于此目的。该系统经过培训,可最大程度地减少测量错误答案概率的整体损失函数。第五部分探讨了确保损失函数可微的各种方法,因此适合使用基于梯度的学习方法。第五部分介绍了有向无环图的使用,其有弧携带数字信息作为表示替代假设的一种方式,并介绍了GTN的概念。
  第七部分中描述的第二个解决方案是完全消除分割。这个想法是将识别器扫过输入图像上每个可能的位置,并依靠识别器的“字符识别”属性,即正确识别其输入字段中居中定位的字符的能力,即使它的边上有其它字符存在,并排除这些不包含居中字符的图像。然后,通过将识别器扫过输入而获得的识别器输出序列将被馈送到考虑语言限制的图变换网络,最后提取出最可能的解释。此GTN有点类似于隐马尔可夫模型(HMM),这使该方法让人联想到经典语音识别。尽管该技术在一般情况下会非常昂贵,但是卷积神经网络的使用使它特别有吸引力,因为它可以显著节省计算成本。

E. 全局训练系统

  如前所述,大多数实用的模式识别系统是由多个模块组成的。例如,文档识别系统由提取感兴趣区域的字段定位器、将输入图像切割成候选字符图像的字段分割器、对每个候选字符进行分类和评分的识别器以及通常基于随机语法的上下文后处理器组成,后者选择从识别器生成的假设中得到语法正确的最佳答案。在大多数情况下,从一个模块传递到另一个模块的信息最好用带有数字信息的图形来表示。例如,识别器模块的输出可以表示为非循环图,其中每个弧包含候选字符的标签和分数,并且其中每个路径表示输入字符串的替代解释。通常,每个模块都在其上下文之外进行手动优化,或者有时进行训练。例如,字符识别器将在预分割字符的标记图像上进行训练。然后对整个系统进行组装,并手动调整模块的一个子集参数,以最大限度地提高整体性能。这最后一步极其繁琐、耗时,而且几乎可以肯定是次优的。
  一个更好的选择是以某种方式训练整个系统,以便最小化全局错误量,例如文档级别的字符错误分类概率。理想情况下,我们希望找到这个全局损失函数相对于系统中所有参数的一个很好的最小值。如果测量性能的损失函数E相对于系统的可调参数W是可微的,我们可以使用基于梯度的学习找到E的局部最小值。然而,乍一看,该系统的庞大规模和复杂性似乎会使这一问题难以解决。
  为了确保全局损失函数Ep(Zp,W)E^p(Z^p,W)Ep(Zp,W)可微,整个系统被构建为一个由可微模块组成的前馈网络。每个模块实现的函数必须是连续的,几乎在任何与模块的内部参数有关的地方都是可微的(例如对于字符识别模块,神经网络字符识别器的权重),并且与模块的输入相关联。如果是这种情况,一个众所周知的反向传播过程的简单推广可以用来有效地计算损失函数相对于系统中所有参数的梯度。例如,让我们考虑一个由多个模块级联组成的系统,每个模块执行函数Xn=Fn(Wn,Xn−1)X_n=F_n(W_n,X_{n-1})Xn​=Fn​(Wn​,Xn−1​),其中XnX_nXn​是模块的输出向量,WnW_nWn​是模块的可调参数向量(W的一个子集),Xn−1X_{n-1}Xn−1​是模块的输入向量(也就是前一个模块的输出向量)。第一个模块的输入X0X_0X0​就是输入模式ZpZ_pZp​。如果EpE^pEp关于xnx_nxn​的偏导数已知,那么EpE^pEp关于WnW_nWn​和Xn−1X_{n-1}Xn−1​的偏导数可由下面的向后递归公式计算:∂Ep∂Wn=∂F∂W(Wn,Xn−1)∂Ep∂Xn\frac{\partial E^p}{\partial W_n}=\frac{\partial F}{\partial W}(W_n,X_{n-1})\frac{\partial E^p}{\partial X_n}∂Wn​∂Ep​=∂W∂F​(Wn​,Xn−1​)∂Xn​∂Ep​ ∂Ep∂Xn−1=∂F∂X(Wn,Xn−1)∂Ep∂Xn\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}∂Xn−1​∂Ep​=∂X∂F​(Wn​,Xn−1​)∂Xn​∂Ep​其中∂F∂W(Wn,Xn−1)\frac{\partial F}{\partial W}(W_n,X_{n-1})∂W∂F​(Wn​,Xn−1​)是F关于W在点(Wn,Xn−1)(W_n,X_{n-1})(Wn​,Xn−1​)的雅可比矩阵,∂F∂X(Wn,Xn−1)\frac{\partial F}{\partial X}(W_n,X_{n-1})∂X∂F​(Wn​,Xn−1​)是F关于X的雅可比矩阵。向量函数的雅可比矩阵是包含所有输出对所有输入的偏导数的矩阵。第一个方程计算Ep(W)E^p(W)Ep(W)的梯度的一些项,而第二个方程产生向后递归,就像众所周知的神经网络反向传播过程一样。我们可以通过平均所有训练模式的梯度来获得完整的梯度。有趣的是,在许多情况下,不需要显式计算雅可比矩阵。上面的公式使用了雅可比矩阵与偏导数向量的乘积,通常不需要事先计算雅可比矩阵,直接计算这个乘积更容易。与普通的多层神经网络类似,除了最后一个模块外,所有模块都被称为隐藏层,因为它们的输出从外部看不到。与上面描述的简单模块级联相比,偏导数表示法的情况更加复杂,变得有些模糊和不方便。在更一般的情况下,可以使用拉格朗日函数进行完全严格的推导。
  传统的多层神经网络是上述情况的特例,其中状态信息Xn用固定大小的向量表示,模块是矩阵乘法(权值)和分量sigmoid函数(神经元)的交替层。然而,如前所述,复杂识别系统中的状态信息最好用带有数字信息的图形来表示。在这种情况下,每个模块称为图形转换器,将一个或多个图形作为输入,并生成一个图形作为输出。这种模块的网络称为图变换网络(GTN)。第四部分、第六部分和第八部分提出了GTNs的概念,并说明基于梯度的学习可以用来训练所有模块中的所有参数,从而最小化全局损失函数。当状态信息由基本上离散的对象(如图形)表示时,可以计算梯度,这似乎是自相矛盾的,但这一困难可以避免,下文将会说明。

2. 用于孤立字符识别的卷积神经网络

  使用梯度下降法的多层网络可以从大量的数据中学习复杂的,高纬,非线性的映射,这使得他们成为图像识别任务的首选。在传统的模式识别的模型中,手工设计的特征提取器从图像中提取相关特征清除不相关的信息。分类器可以将这些特征进行分类。全连接的多层网络可以作为分类器。一个更有意思的模式就是尽量依赖特征提取器本身进行学习。对于字符识别,可以将图像作为行向量作为输入输入到网络中。虽然这些任务(比如字符识别)可以使用传统的前向全连接网络完成。但是还存在一些问题。
  首先,图像是非常大的,由很多像素组成。具有100个隐藏单元的全连接网络包含成千上万的权重,这么多参数提高了系统的消耗和内存占用,因此需要更大的训练集。但是没有结构的网络的主要缺点是,对于图像或者音频这些应用来说,不具备平移,局部畸变的不变性。在输入到固定大小输入的网络前,字符图像的大小必须归一化,并且放在输入的中间,不幸的是,没有哪种预处理能够达到如此完美:由于手写体以字符为归一化单位,会导致每个字符的大小,倾斜,位置存在变化,再加上书写风格的差异,将会导致特征位置的变化,原则上,足够大小的全连接网络可以对这些变化鲁棒,但是,要达到这种目的需要更多的在输入图像不同位置的神经元,这样可以检测到不同的特征,不论他们出现在图像的什么位置。学习这些权值参数需要大量的训练样本去覆盖可能的样本空间,在下面描述的卷积神经网络中,位移不变性可以通过权值共享实现。
  第二,全连接的网络的另一个缺点就是完全忽略了输入的拓扑结构。在不影响训练的结果的情况下,输入图像可以是任意(或固定)的顺序。然而,图像(或语音的时频表示)具有很强的二维局部结构:空间相邻的变量(或像素点)具有高度相关性。众所周知,局部相关性对于在在识别空间或时间对象之前提取局部特征来说具有巨大优势,因为相邻像素的权值可以分成几类。CNN通过将隐藏结点的感受野限制在局部来提取特征。

A. 卷积网络

  卷积网络通过局部感受野、权值共享和下采样来实现位移、缩放和形变的不变性。一个典型的用于字符识别的网络结构如图2所示,该网络结构称为LeNet-5。输入层输入大小归一化并且字符位于中间的字符图像。每一层的每个神经元接受上一层中一组局部邻域的神经元的输入(就是局部感受野)。将多个神经元连接为局部感受野的思想可以追溯到60年代的感知机,与Hubel和Wiesel在猫的视觉系统中发现的局部感受和方向选择的神经元几乎是同步的。局部感受野在视觉学习神经模型中使用很多次了,使用局部感受野,神经元能够提取边缘,角点等视觉特征(或音频等其它类似特征),这些特征在下一层中进行结合形成更高层的特征。之前提到,形变和位移会导致显著特征位置的变化,此外图像局部的特征检测器也可以用于整个图像。基于这个特性,我们可以将局部感受野位于图像不同位置的一组神经元设置为相同的权值。每一层中所有的神经元形成一个平面,这个平面中所有神经元共享权值,这样一个平面中所有神经元的输出称为特征图。特征图中所有单元在图像的不同位置执行相同的操作。一个完整的卷积层由多个(权重不一样的)特征图组成,这样一个位置就可以提取多种特征。一个具体的示例就是图2 LeNet-5中的第一层,第一层隐藏层中的所有单元形成6个平面,每个是一个特征图。一个特征图中的一个单元对应有25个输入,这25个输入连接到输入层的5x5区域,这个区域就是局部感受野。每个单元有25个输入,因此有25个可训练的参数加上一个偏置。由于特征图中相邻单元以前一层中连续的单元为中心,所以相邻单元的局部感受野是重叠的。比如,LeNet-5中,水平方向连续的单元的感受野存在5行4列的重叠,之前提到过,一个特征图中所有单元共享25个权值和一个偏置,所以他们在输入图像的不同位置检测相同的特征,每一层的其他特征图使用不同的一组权值和偏置,提取不同类型的局部特征。LeNet-5的例子中,每个输入位置会通过6个特征图中相同位置的6个单元提取6个不同的特征。特征图的一种实现方式就是使用一个带有感受野的单元扫描整个图像,并且将每个对应的位置的状态保存在特征图中,这种操作等价于卷积,后面加一个偏置和一个激活函数,因此取名为卷积网络,卷积核就是连接的权重。卷积层的核就是特征图中所有单元使用的一组连接权重。卷积层的一个重要特性是如果输入图像发生了位移,特征图会发生相应的位移,否则特征图保持不变。这个特性是CNN对输入的位移和形变保持鲁棒的基础。

图2 卷积神经网络LeNet-5的结构,此处用于数字识别。每个平面是一个特征图,也就是一系列权值共享的单元

  一旦计算出特征图,那么精确的位置就变得不重要了,相对于其他特征的大概位置是才是重要的。比如,我们知道左上方区域有一个水平线段的一个端点,右上方有一个角,下方接近垂直的线段有一个端点,我们就知道这个数字是7。这些特征的精确位置不仅对识别没有帮助,反而不利于识别,因为对于不同的手写体字符,位置会经常变动。在特征图中降低特征位置的精度的方式是降低特征图的空间分辨率,这个可以通过所谓下采样层达到,下采样层通过求局部平均降低特征图的分辨率,并且降低了输出对平移和形变的敏感度。LeNet-5中的第二个隐藏层就是下采样层。这个层包含了6个特征图,与前一层的6个特征图对应。每个神经元的感受野是2x2,每个神经元计算四个输入的平均,然后乘以一个可训练的系数,最后加上一个可训练的偏置,最后将值传递给一个sigmoid函数。相邻的神经元的感受野没有重叠。因此,下采样层的特征图的行和列是前一层特征图的一半。可训练系数和偏置控制着sigmoid函数的非线性程度。如果系数比较小,那么运算近似于线性运算,下采样相当于模糊图像。如果系数比较大,根据偏置的大小下采样可以被看成是有噪声的"或"运算或"与"运算。相连的卷积层和下采样层是交替出现的,这种形式形成一个双金字塔结构:每一层,特征图的分辨率逐渐减低,而特征图的数量逐渐增加。图2中第三个隐藏层的每个神经元的输入可以来自前一层的多个特征图。卷积和下采样结合的灵感来源于Hubel和Wiesel的”简单”和”复杂”细胞的概念,并在Fukushima的神经认知机中实现,尽管那时没有像反向传播的全局监督学习过程。通过逐渐增加的特征来补偿逐渐减小的空间分辨率,可以实现输入的几何变换的高度不变性。
  由于所有的权值都是通过反向传播学习的,卷积网络可以看成是一个特征提取器。权值共享技术对降低参数的数量有重要的影响,同时权值共享技术减小了系统的"容量",从而减小了测试错误率和训练错误率之间的差距。图2中的网络包含了340,908个连接,但是由于权值共享只包含了60,000个可训练的自由参数。
  固定尺寸的卷积网络已经被应用在多个领域,包括手写体识别,打印字符识别,在线手写体识别,以及人脸识别。在单个时间维度上权值共享的固定尺寸的卷积网络被称为延时神经网络(TDNNs)。TDNNs已经被用在音色识别(没有下采样)、语音单词识别(有下采样),在线的孤立手写字符识别以及签名验证。

B. LeNet-5

  这部分介绍使用了卷积神经网络的LeNet-5结构的更多细节。除了输入层外,LeNet-5由7个层组成,每一层包括可训练的参数(权重),输入是32x32的图片,这比数据集中最大的字符都大(大部分都在28x28像素的中间20x20像素),这样做的原因是希望潜在的明显特征如笔画端点或角点能够出现在最高层特征监测器感受野的中心。在LeNet-5中,最后一层卷积层的感受野的中心在32x32的输入图像的中心形成了一个20x20的区域,输入像素值被归一化了,这样背景(白色)对应-0.1,前景(黑色)对应1.175.这使得输入的均值约等于0,方差约等于1,这样能够加速学习。
  下文中,卷积层标识为Cx,下采样层标识为Sx,全连接层标识为Fx,其中x为层的索引。
  C1层是一个卷积层,由6个特征图构成。特征图中每个神经元与输入中5x5的邻域相连。特征图的大小为28x28,这样能防止输入的连接掉到边界之外。C1有156个可训练参数,共122,304个连接。
  S2层是一个下采样层,有6个14x14的特征图。特征图中的每个单元与C1中相对应特征图的2x2邻域相连接。S2层每个单元的4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid函数计算。每个单元的2x2感受野并不重叠,因此S2中每个特征图的行列分别是C1中特征图的一半。S2层有12个可训练参数和5880个连接。
  C3是一个有16个特征图的卷积层。C3层的卷积核大小为5x5,每个特征图中的每个单元与S2中的多个特征图相连,表1显示了C3中每个特征图与S2中哪些特征图相连。那为什么不把S2中的每个特征图连接到每个C3的特征图呢?原因有两方面。首先,不完全的连接机制将连接的数量保持在合理的范围内;更重要的是,它破坏了网络的对称性。不完全连接能够保证C3中不同特征图提取不同的特征(希望是互补的),因为他们的输入不同。表1中展示了一个合理的连接方式:C3的前6个特征图以S2中3个相邻的特征图为输入。接下来6个特征图以S2中4个相邻特征图为输入,下面的3个特征图以不相邻的4个特征图为输入。最后一个特征图以S2中所有特征图为输入。C3层有1516个可训练参数和151600个连接。

表1 每列表示S2中的哪个特征图由C3的特定特征图中的单元组合而成。

  S4层是一个下采样层,由16个5x5大小的特征图构成。特征图中的每个单元与C3中相应特征图的2x2邻域相连接,跟C1和S2之间的连接一样。S4层有32个可训练参数和2000个连接。
  C5层是一个卷积层,有120个特征图。每个单元与S4层的全部16个特征图的5x5邻域相连。由于S4层特征图的大小也为5x5,故C5特征图的大小为1x1:这构成了S4和C5之间的全连接。之所以仍将C5标示为卷积层而非全连接层,是因为如果LeNet-5的输入变大,而其他的保持不变,那么此时特征图的维数就会比1x1大。C5层有48120个可训练连接。
  F6层有84个单元(之所以选这个数字的原因来自于输出层的设计,下面会有说明),与C5层全相连。有10164个可训练参数。
  如同经典神经网络,F6层计算输入向量和权重向量之间的点积,再加上一个偏置。神经元i的加权和表示为aia_iai​,然后将其传递给sigmoid函数产生单元i的一个状态,表示为xix_ixi​:xi=f(ai)x_i=f(a_i)xi​=f(ai​)压缩函数是一个双曲正切函数:f(a)=Atanh(Sa)f(a)=A\ tanh(Sa)f(a)=A tanh(Sa)其中A表示函数的振幅,S决定了函数在原点处的斜率,这个函数是一个奇函数,水平渐近线为+A,-A。常量A通常取1.7159。选择该函数的理论原因见附录A。
  最后,输出层由欧氏径向基函数(RBF)单元组成,每类一个单元,每个单元有84个输入,每个RBF单元yiy_iyi​的输出按照如下方式计算:yi=∑j(xj−wij)2y_i=\sum_j{(x_j-w_{ij})^2}yi​=j∑​(xj​−wij​)2换句话说,每个输出RBF单元计算输入向量和参数向量之间的欧式距离,输入离参数向量越远,RBF输出的越大。一个RBF输出可以被理解为衡量输入模式和与RBF相关联类的一个模型的匹配程度的惩罚项。用概率术语来说,RBF输出可以被理解为F6层配置空间的高斯分布的负的log似然。给定一个输入模式,损失函数应能使得F6的配置与RBF参数向量足够接近。这些单元的参数是人工选取并保持固定的(至少初始时候如此)。这些参数向量的成分被设为-1或1。虽然这些参数可以以-1和1等概率的方式任选,或者构成一个纠错码,但是被设计成一个相应字符类的7*12大小(即84)的格式化图片。这种表示对识别单独的数字不是很有用,但是对识别可打印ASCII集中的字符串很有用。基本原理就是字符是相似的,容易混淆,比如大写的O,小写的o和数字0或者小写的lll与数字1,方括号和大写的III,会有相似的输出编码。如果一个系统与一个能够纠正此混淆的语言处理器相结合,这个就非常有用了。由于容易混淆的类别的编码是相似的,有歧义的字符的RBF输出是相似的,这个语言处理器就能够选择出合适的解释。图3给出了所有ASCII字符集的输出编码。

图3 用于识别全部ASCII集的输出RBF的初始参数

  使用这种分布编码而非更常用的“1 of N”编码(又叫位置编码或者祖母细胞编码)用于产生输出的另一个原因是,当类别比较大的时候,非分布编码的效果比较差。原因是大多数时间非分布编码的输出必须是关闭状态。这使得用sigmoid单元很难实现。另一个原因是分类器不仅用于识别字母,也用于拒绝非字母。使用分布编码的RBF更适合该目的,因为与sigmoid不同,他们在输入空间的较好得限制区域内兴奋,而非典型模式更容易落到外边。
  RBF参数向量起着F6层目标向量的角色。需要指出这些向量的成分是+1或-1,这正好在F6 sigmoid的范围内,因此可以防止sigmoid函数饱和。实际上,+1和-1是sigmoid函数的最大曲率的点。这使得F6单元运行在最大非线性范围内。必须避免sigmoid函数的饱和,因为据我们所知这将会导致损失函数较慢的收敛和病态问题。

C. 损失函数

  可用于以上网络的最简单的输出损失函数是最大似然估计准则(MLE),在我们的例子中与最小均方误差等价(MSE)。这一用于训练集的准则很简单:E(W)=1p∑p=1PyDp(Zp,W)E(W)=\frac{1}{p}\sum_{p=1}^{P}{y_{D_p}(Z^p,W)}E(W)=p1​p=1∑P​yDp​​(Zp,W)其中yDpy_{D_p}yDp​​是第DpD_pDp​个RBF神经元的输出,与输入模式ZpZ^pZp的正确的分类对应。尽管这一损失函数可用于大部分情况,但它缺少三个重要性质。首先,如果我们允许RBF的参数进行调整,那么E(W)E(W)E(W)有一个不重要但完全不可接受的解决方案。在这个解中,所有的RBF参数向量都是相等的,并且F6的状态是恒定的,并且与该参数向量相等。在这种情况下,网络愉快地忽略了输入,并且所有的RBF输出都等于零。如果不允许RBF权值自适应,则不会出现这种崩溃现象。第二个问题是类之间没有竞争。这种竞争可以通过使用一种更具辨别力的训练准则,称为MAP(最大后验)准则,类似于有时用于训练HMMs的最大互信息准则。它对应于最大化正确的类DpD_pDp​的后验概率(或最小化正确类概率的对数),假设输入图像可以来自其中一个类或来自“背景垃圾”类标签。就惩罚而言,这意味着除了像MSE标准那样降低正确类的惩罚外,这个标准还拉高了错误类的惩罚:E(W)=1p∑p=1P(yDp(Zp,W)+log(e−j+∑ie−yi(Zp,W)))E(W)=\frac{1}{p}\sum_{p=1}^{P}{(y_{D_p}(Z^p,W)+log(e^{-j}+\sum_i{e^{-y_i(Z^p,W)}}))}E(W)=p1​p=1∑P​(yDp​​(Zp,W)+log(e−j+i∑​e−yi​(Zp,W)))第二个词的否定词起着“竞争”的作用。它必然小于(或等于)第一项,因此损失函数为正。常数jjj是正的,可以防止已经非常大的类的惩罚被进一步推高。这个垃圾类别标签的后验概率是e−je^{-j}e−j和e−j+∑ie−yi(Zp,W)e^{-j}+\sum_i{e^{-y_i(Z^p,W)}}e−j+∑i​e−yi​(Zp,W)的比值。这种判别准则避免了RBF参数学习时的“崩溃效应”,因为它使RBF中心保持分离。当学习RBF参数时,该判别标准避免了前面提到的“崩溃效应”,因为它使RBF中心彼此分开。在第六部分中,我们为学习对输入中的多个对象(例如单词或文档中的字符)进行分类的系统提供了此标准的概括。
  相对于卷积网络所有层中所有权重的损失函数的梯度的计算是通过反向传播完成的。必须对标准算法进行一些修改,以考虑权重分配。一种简单的实现方法是,首先针对每个连接计算损耗函数的偏导数,就好像该网络是没有权重共享的常规多层网络一样。然后,将共享同一参数的所有连接的偏导数相加,以形成该参数的导数。
  这样的大型体系结构可以非常有效地进行训练,但是这样做需要使用附录中描述的一些技术。附录的A节描述了详细信息,例如所使用的特定S型曲线和权重初始化。B和C节描述了使用的最小化过程,它是Levenberg-Marquardt过程对角线近似的随机形式。

3. 结果与其它方法的比较

  尽管识别单个数字只是设计实用识别系统所涉及的众多问题之一,但它是比较形状识别方法的出色基准。尽管许多现有方法将手工制作的特征提取器和可训练的分类器结合在一起,但本研究集中在直接对尺寸规格化图像进行操作的自适应方法上。

A. 数据库:修正NIST数据集

  本文描述的用于训练和测试系统的数据库是由NIST的特别数据库3和特别数据库1构建的,该数据库包含手写数字的二进制图像。NIST最初将SD-3指定为训练集,将SD-1指定为测试集。但是,SD-3比SD1更干净,更容易识别。原因可以从以下事实中找到:SD-3是在人口普查局员工中收集的,而SD-1是在高中学生中收集的。从学习实验中可明显地得出,要求结果独立于完整样本集中训练集和测试的选择。因此,有必要通过混合NIST的数据集来构建新数据库。
  SD-1包含由500位不同作者编写的58,527位数字图像。与SD-3不同,在SD-3中,每个写入器的数据块顺序出现,而SD-1中的数据则被加密。SD-1的写入者身份可用,我们使用此信息来对写入者进行解读。然后,我们将SD-1分为两部分:由最初的250位作者编写的字符进入了我们的新培训集。剩下的250名作者被放置在我们的测试集中。因此,我们有两组,每组有近30,000个示例。新的训练集已完成,其中包含来自SD-3的足够示例(从模式0开始),从而形成了60,000套完整的训练模式。
同样,新的测试集以SD-3示例(模式编号为35,000)完成,从而构成了具有60,000个测试模式的全套设备。在此处描述的实验中,我们仅使用了10,000张测试图像的子集(SD-1提供了5,000张,SD-3提供了5,000张),但我们使用了60,000张完整的训练样本。生成的数据库称为ModifiedNIST或MNIST数据集。
  SD-1包含由500位不同作者编写的58,527位数字图像。与SD-3不同,在SD-3中,每个写入器的数据块顺序出现,而SD-1中的数据则被加密。SD-1的写入者身份可用,我们使用此信息来对写入者进行解读。然后,我们将SD-1分为两部分:由最初的250位作者编写的字符进入了我们的新培训集。剩下的250名作者被放置在我们的测试集中。因此,我们有两组,每组有近30,000个示例。新的训练集已完成,其中包含来自SD-3的足够示例(从模式0开始),从而形成了60,000套完整的训练模式。
同样,新的测试集以SD-3示例(模式编号为35,000)完成,从而构成了具有60,000个测试模式的全套设备。在此处描述的实验中,我们仅使用了10,000张测试图像的子集(SD-1提供了5,000张,SD-3提供了5,000张),但我们使用了60,000张完整的训练样本。生成的数据库称为Modified NIST或MNIST数据集。
  在保留20x20像素长宽比的同时,将原始黑白(双水平)图像的尺寸归一化为t。作为归一化算法使用的抗锯齿(图像插值)技术的结果,所得图像包含灰度级。使用了三个版本的数据库。在第一个版本中,通过计算像素的质心并平移图像以将该点定位在28x28域的中心,从而使图像位于28x28图像的中心。在某些情况下,此28x28视场被扩展为具有背景像素的32x32。此版本的数据库将被称为常规数据库。在数据库的第二版本中,字符图像被脱色并裁剪为20x20像素的图像。去偏斜计算像素的第二惯性矩(将前景像素计数为1,将背景像素计数为0),并通过水平移动线条以使主轴垂直而剪切图像。此版本的数据库将称为Delanted数据库。在一些早期实验中使用的数据库的第三版中,图像缩小为16x16像素。可从http://www.research.att.com/~yann/ocr/mnist获得常规数据库(60,000个训练示例,10,000个测试示例,大小标准化为20x20,并以质心为中心在28x28领域内)。图4显示了从测试集中随机选择的示例。

图4 MNIST数据集中尺寸规格化的例子

B. 结果

(暂时略)

C. 与其他分类器的比较

(暂时略)

D. 讨论

(暂时略)

E. 不变性和抗噪性

  卷积网络特别适合于识别大小、位置和方向变化很大的形状,例如现实世界中的字符串识别系统中启发式分割器通常生成的形状。
  在上述实验中,抗噪性和失真不变性的重要性并不明显。在大多数实际应用中,情况大不相同。在识别之前,通常必须将字符从上下文中切出。分割算法很少是完美的,并且经常在字符图像中留下多余的标记(噪声,下划线,相邻字符),或者有时将字符切得太多而产生不完整的字符。这些图像无法可靠地进行尺寸标准化和居中。规范不完整的字符可能非常危险。例如,一个扩大的流浪标记可能看起来像是真正的1。因此,许多系统都采取了在字段或单词级别对图像进行归一化的方法。在我们的情况下,将检测整个视场的上下轮廓(支票中的金额),并将其用于将图像规格化为固定高度。虽然这可以确保不会将杂散标记吹散到看起来像字符的图像中,但是这也会在分割后造成字符大小和垂直位置的很大差异。因此,优选使用对这种变化具有鲁棒性的识别器。图13显示了LeNet-5正确识别的一些扭曲字符示例。据估计,对于比例变化最大可达2倍的字符,可以进行准确的识别,垂直变化的正负变化大约为字符高度的一半,旋转角度最大可达正负30度。尽管对复杂形状的完全不变的识别仍然是一个遥不可及的目标,但是卷积网络似乎为几何变形的不变性或鲁棒性问题提供了部分答案。
  图13包括LeNet-5在极端嘈杂条件下的鲁棒性示例。处理这些图像会给许多方法带来无法克服的分割和特征提取问题,但是LeNet-5似乎能够从这些混乱的图像中可靠地提取出显著特征。此处显示的网络使用的训练集是添加了椒盐噪声的MNIST训练集。每个像素以0.1的概率随机倒置。有关LeNet-5的更多示例请访问:http://www.research.att.com/~yann/ocr。

图13 LeNet-5正确识别异常、失真和嘈杂字符的示例。输出标签的灰度级代表惩罚程度(灰度越浅惩罚越高)

LeNet论文全文翻译《Gradient-based learning applied to document recognition》(中)

LeNet论文全文翻译《Gradient-based learning applied to document recognition》(上)相关推荐

  1. 论文要点总结:Gradient-Based Learning Applied to Document Recognition(一)

    这篇Yann LeCun于1998年发表在Proceedings of the IEEE的论文是深度学习领域的一篇经典综述,主要内容是:以字符识别为例,证明使用基于梯度的反向传播训练的多层神经网络优于 ...

  2. 《Gradient-based learning applied to document recognition》翻译

    1 引言 2 用于孤立字符识别的卷积神经网络 3 结果与其他方法的比较 4 多模块系统和图变换网络 5 多目标识别: HOS 6 图变换网络的全局训练 7 多对象识别:空间位移神经网络(SDNN) 8 ...

  3. 论文笔记:Gradient-Based Learning Applied to Document Recognition

    Gradient-Based Learning Applied to Document Recognition:梯度学习在文档识别中的应用 摘要 用BP算法训练多层神经网络,是梯度学习技术的一个成功的 ...

  4. Gradient-Based Learning Applied to Document Recognition 部分阅读

    卷积网络        卷积网络用三种结构来确保移位.尺度和旋转不变:局部感知野.权值共享和时间或空间降采样.典型的leNet-5如下图所示: C1中每个特征图的每个单元和输入的25个点相连,这个5* ...

  5. Gradient-Based Learning Applied to Document Recognition

    对应code import torch.nn as nn from collections import OrderedDictclass LeNet5(nn.Module):"" ...

  6. LeNet论文的翻译与CNN三大核心思想的解读

    前言 入职之后,逐渐转到深度学习方向.很早就打算写深度学习相关博客了,但是由于各种原因被搁置了. 这段时间刚好有空,就把以前的笔记整理总结了一下,温故而知新,以前有些不是特别清楚的概念,通过这次的复习 ...

  7. yolov1官方论文全文翻译[附个人理解]

    前言 本博文是对yolov1的官方文献进行的翻译.并且在翻译的学习过程中加入了自己的理解.本博文主要用于自己个人学习的总结.对于借鉴的想过博文以及大佬的文献将会在博文的最后进行声明.现在开始!!! 一 ...

  8. Are Transformers Effective for Time Series Forecasting论文全文翻译

    Transformers对时间序列预测有效吗? 摘 要 最近,针对长期时间序列预测(LTSF)任务的基于Transformer的解决方案激增.尽管在过去几年中取得了越来越大的成绩,但我们对这项工作中这 ...

  9. 【LIO-SAM论文全文翻译】:LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping

    文章目录 摘要 一.引言 二.相关工作 三.基于SAM的雷达惯性里程计 A.系统概述 B. IMU预积分因子 C. 雷达里程计因子 D. GPS因子 E. 回环因子 四. 实验 A. 旋转数据集 B. ...

  10. 【LVI-SAM论文全文翻译】: LVI-SAM: Tightly-coupled Lidar-Visual-Inertial Odometry via Smoothing and Mapping

    文章目录 写在前面 摘要 一.引言 二.完整的激光视觉惯导SLAM系统 A.系统概述 B. 视觉惯导系统 C.雷达惯导系统 三.实验 A.消融研究 B. Jackal Dataset C. Handh ...

最新文章

  1. python http接口_python实现http接口测试
  2. 国防科技大学发布最新「3D点云深度学习」综述论文
  3. Mysql事务和锁原理
  4. python中不同类型的数据不能相互运算_python数据类型和运算
  5. high definition audio感叹号_【网抑云文案】你知道红色感叹号吧,我对着它聊了184天。...
  6. MySql主从数据同步的执行过程
  7. [Ext JS6]Ext.Template
  8. 分布式系统关注点(8)——99%的人都能看懂的「熔断」以及最佳实践
  9. libiconv android,iconv库 android ndk可运行
  10. java.io.IOException: Cannot run program “del“: CreateProcess error=2, 系统找不到指定的文件。
  11. macOS进化史以及历代macOS系统5K壁纸
  12. Java for Web学习笔记(十六):JSP(6)jspx
  13. Pytorch为什么总要设置随机种子
  14. C语言 本地套接字这个审核也不给我通过,老规矩base64
  15. 【蓝桥杯-筑基篇】基础入门
  16. BackTrack 5 R3 Released
  17. Associations - 关联
  18. PPT结尾页只会写“谢谢”?用这些结尾,让你惊艳全场
  19. 容错服务器怎么装系统,容错服务器安装手册.doc
  20. 哪些软件可以用于统计数据

热门文章

  1. win10安装tomcat7的安装与配置【详细教程】
  2. →箭头符号大全复制_特别符号大全,特殊符号大全
  3. 响应面matlab算法,结构可靠度分析的响应面法及其Matlab实现参考文件.pdf
  4. 使用WebStorm开发web前端 网页中文乱码问题的解决方案
  5. 怎么在Vue中使用和安装axios
  6. python图书管理实训报告总结_图书管理系统设计实训报告
  7. 图像分割法-snake
  8. 检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 8000401a 因为配置标识不正确
  9. 计算机设备没有音频,计算机上没有音频设备是什么意思?
  10. 影响你成功最重要的两种人