LeNet-5论文中CNN相关部分阅读
Gradient-Based Learning Applied to Document Recognition(LeNet-5)
注意事项
由于仅关注CNN相关知识,因此,在阅读这篇经典论文时,仅重点阅读了Section Ⅰ:Introduction、Section Ⅱ:Convulution Neural Networks For Isolated Character Recognition和Section Ⅲ:Results And Comparison With Other Methods这三个与CNN相关的部分。
一、问题背景
在过去若干年中,机器学习技术在模式识别系统的设计中发挥着日益重要的作用。可以说,机器学习技术的可用性是近年来连续语音识别、手写字符识别等模式识别领域应用取得重要成功的关键因素之一。但是,在过去的传统方法中,一个模式识别系统分为两个主要模块:特征提取器和可训练分类器。这种传统方法的识别准确率很大程度上取决于设计者能否设计出合适的特征集,但是,自然数据(无论是语音、图像还是其他类型的模式)具有极强的变异性和丰富性。因此,完全依靠人工为每一类自然数据都设计出合适的特征集,会是一项极具挑战性的任务。而针对这一问题,提出了本文的核心观点:通过更多依赖于自动学习,减少对人工设计启发式规则的依赖,能够构建出性能更优的模式识别系统。本文基于这一理念,设计出了卷积神经网络LeNet-5,并在孤立字符识别任务上,与其他方法进行了性能对比。结果表明,性能要优于所有其他技术。
二、网络模型学习的相关知识
2、从数据中学习
2.1 利用损失函数反向训练模型
自动机器学习存在多种方法,近年来,由神经网络领域推广、且极为成功的方法,可以被称为“基于梯度学习”或“数值型”。
网络模型的整体计算过程可以被描述为 \(Y^p=F(Z^p,W)\) ,其中 \(Z^p\)表示第 \(p\) 个输入样本, \(W\) 表示网络模型中所有可调整参数的集合, \(Y^p\) 表示第 \(p\)个输入样本的输出。在模式识别场景中(比如孤立字符识别),输出 \(Y^p\) 可以解释为 \(Z^p\) 的识别类别标签,也可表示各类别的得分或概率。
接下来,需要引入损失函数 \(E^p\) 。损失函数的计算是需要训练样本的正确标签,而本文的LeNet-5的训练方式采用的是监督学习,因此训练集中确实存在正确标签。进而,损失函数 \(E^p=D(D^p,F(W,Z^p))\) ,用于衡量“输入样本 \(Z^p\)的正确输出 \(D^p\) ”与“系统实际输出”之间的差异,其中 \(D^p\) 为第 \(p\) 个输入样本的正确输出(或期望输出)。
在正常的模型训练过程,需要选择训练的BatchSize,考虑到BatchSize过大或过小都会对模型的训练过程和质量产生不好影响,所以,在训练过程,一般会将BatchSize设置为适中大小 \(P\) 。即每个Iteration,都会输入 \(P\) 个样本,计算出每个样本的损失函数,并取平均,得到平均损失函数 \(E_{train}(W)\) 。平均损失函数 \(E_{train}(W)\) 即是 \(P\) 个训练样本组成的训练集 \(\{(Z^1,D^1),......,(Z^p,D^p)\}\)(由带标签样本组成) 上所有误差 \(E^p\) 的平均值。
在最简单场景中,学习问题的核心就是找到能够让 \(E_{train}(W)\)最小的参数集合 \(W\) 。
2.2 泛化能力的控制
正如上面所说,学习问题的核心就是找到能够让 \(E_{train}(W)\)最小的参数集合 \(W\) ,这一步基本都是在训练集上实现。但实际应用中,系统在训练集上的性能参考价值有限,更加看重的是在实际应用中的错误率——这一性能通过通过模型在测试集上的准确率来估计。
大量理论与实验已经表明,测试集错误与训练集错误率之间的差距(可以视作某种程度的泛化能力),近似满足以下公式:
其中 \(P\) 中训练总样本数量, \(h\) 是模型的“有效容量”或复杂度度量(可以用参数数量作为粗略近似,但严格复杂度应该用 VC-dim、Rademacher Complexity、Norm-Based Bounds 等描述), \(\alpha\) 取值在0.5至1.0之间, \(k\) 为常数。该差距会随着训练总样本数量 \(P\) 增加、模型复杂度度量 \(h\) 缩小而缩小;但是如果模型复杂度度量 \(h\) 过小,就会导致模型的拟合能力大大下降。此外,随着容量 \(h\) 增大, \(E_{train}\)会降低。因此,训练总样本数量 \(P\) 越多,模型的泛化能力就会越强;而容量 \(h\) 则不能无限过大或无限过小,这都会导致模型出现问题。因此,确定容量 \(h\) 时,需要在“降低 \(E_{train}\) ”与“扩大训练误差和测试误差之间的差距”之间进行权衡——存在一个最优容量 \(h\) ,可使泛化错误率 \(E_{test}\) 达到最低(这是论文中的表述,但是在现代的深度学习研究中,发现最优容量不一定存在于某个固定 \(h\) ,当模型容量 \(h\) 超过某个点时,泛化误差会先上升,然后在“过参数化”区间下降,即双下降现象。也就是说,在现代深度学习中,过大模型容量并不必然导致泛化变差,甚至可能更好)。
大多数的学习算法会同时尝试最小化 \(E_{train}\) 和误差差距的某种估计值,这一思想的形式化版本被称为“结构风险最小化“,即找到一个合适的容量 \(h\) ,使得同时兼顾”降低 \(E_{train}\)“和“保证泛化能力”。其核心是定义一系列“容量递增的网络模型 \(\{M_1,M_2,......,M_n\}\)”,对应参数空间的一系列子集(每个子集都是前一个子集的超集),即每个网络模型的一系列容量构成了一组容量集合 \(\{h_1,h_2,......,h_n\}\),集合中元素满足 \(\{h_1 \in h_2\in......\in h_n \}\)。在定义一系列“容量递增的网络模型”后,采用统一范式 \(E_{train}+ \beta H(W)\)来衡量容量 \(h\) 该选择集合中那一个值。其中 \(H(W)\) 表示对应容量 \(h\) 的参数的正则化(具体类型有 \(L_1=\sum |w_i|\) 、 \(L_2=\sum w_i^2\)),可以看出,实际上是用 \(H(W)\) 来控制模型的有效复杂度(可以从直觉上,粗略认为近似表示模型容量 \(h\) ),通过最小化 \(E_{train}+ \beta H(W)\) ,使得 \(E_{train}\) 和 容量 \(h\) 保持在合理位置,以尽可能保证模型的拟合能力和泛化能力。具体的过程是,对每一个模型 \(M_i(i\in\{1,2,......,n\})\) ,都计算出 \(E_{train}+ \beta H(W)\) ,选择计算值最小的模型作为最合适模型。
2、基于梯度的学习
“针对一组参数最小化函数”是计算机科学领域诸多问题的核心,也是深度学习中训练模型的核心,即通过找到一组参数,使得损失函数达到最小值。基于梯度的学习正是利用了一个关键特性:相比离散函数,最小化性质良好的光滑连续函数函数通常要容易得多。即可以通过求解损失函数关于模型参数W的梯度,来找到使得损失函数减小的变化方向,通过不断迭代重复,找到使得最小化损失函数的一组参数。
简要来说,参数集W是实值向量,损失函数 \(E(W)\)关于W不仅连续,且几乎处处可微。这种场景下最简单的最小化方法是梯度下降算法(即上述所说),参数通过以下公式迭代更新:
其中,
\(\epsilon\) 表示学习率,在简单情况下, \(\epsilon\) 是标量常数;更复杂的方法会采用可变的 \(\epsilon\) ,或将其替换为对角矩阵,亦或像牛顿法/拟牛顿法那样,替换为海森矩阵逆的估计值。在实际应用中, \(\frac{\partial E(W)}{\partial W}\) 一般是一个BatchSize的平均梯度 \(\frac{\partial E(W)}{\partial W}=\frac{1}{P} \sum_{p=1}^{P} \frac{\partial E^{p}(W)}{\partial W}\) 。
2.1 普通梯度下降法
上述所说的梯度下降法,其实质指普通梯度下降法,每次计算平均梯度所使用的BatchSize为整个全量样本,比如训练集中有6万样本,普通梯度下降算法每次所使用的BatchSize大小为6万。这种计算方式的特点是梯度无噪声(因为使用了整个全量样本求平均梯度),但是由于每次更新参数使用整个全量样本,一旦样本量稍大,就会导致训练时间极长,更新频率很低,适用于小样本数据。
2.2 随机梯度下降算法
下面介绍更加常用的随机梯度下降算法:利用平均梯度的带噪版本或近似版本更新参数向量,它与普通梯度下降算法的区别在于:随机梯度下降算法计算平均梯度使用的BatchSize较小,通常为1(单个样本)、16、32、64等。这种方法下,随机梯度下降的参数会围绕“平均最优轨迹”波动(因为不适用全量样本,存在噪声),但整体趋势是向最小值靠近,且这种波动反而可能帮助跳出局部最小值。因为这种方法每次仅处理小批量的样本,迭代频率远高于前者,整体收敛速度快。
在实际应用,最长采用的是16、32、64等这样的小批量随机梯度下降算法,它本质上是普通梯度下降算法和单个样本随机梯度下降算法的折中:既保留了随机梯度下降“迭代快”的优势,又通过小批量样本的平均梯度降低了噪声。
3、梯度反向传播
在反向传播算法出现前, 多层神经网络的梯度计算面临“维度灾难”——若使用数值微分的计算方式计算每层权重的梯度,需手动计算每层参数的梯度,逐层推导链式法则,过程及其繁琐且易出错。而反向传播通过“从输出层反向递推”的方式,将梯度计算过程模型快、自动化:先计算输出层损失对最后一层参数的梯度,再逐层向前传递梯度信息,最后高效得到所有层参数的梯度。
这一过程使用公式进行阐明,以n层网络结构为例,每层输出结果为 \(X_i=F_i(W_{i},X_{i-1})\) ,其中 \(X_i\) 为第i层输出结果, \(W_i\) 为第i层可调参数向量(包括权重和偏置,是W的子集), \(X_{i-1}\) 是i-1层的输出结果,第一层的输入 \(X_0\) 即为原始输入 \(Z^p\) , \(X_n\) 为最终输出结果。
若要求解损失函数对第i层参数的梯度,只需要先计算出损失函数对 \(X_n\) 的偏导数 \(\frac{\partial E^p}{\partial X_n}\) ,利用反向传播的思想,再逐级传递,直到计算出损失函数对第i层的梯度,具体如下:
首先计算出损失函数对 \(X_n\) 的偏导数 \(\frac{\partial E^p}{\partial X_n}\),利用上述公式可知,只需计算出 \(\frac{\partial F_n(W_n,X_{n-1})}{\partial W_n}\) 和 \(\frac{\partial F_n(W_n,X_{n-1})}{\partial X_{n-1}}\) ,就能得到 \(\frac{\partial E^p}{\partial W_n}\) 和 \(\frac{\partial E^p}{\partial X_{n-1}}\) ,而这两个值可以在计算损失函数对第n-1层的梯度中( \(\frac{\partial E^p}{\partial W_{n-1}}\) 和 \(\frac{\partial E^p}{\partial X_{n-2}}\) )进行复用。再往下递推,按照上述公式可知,每次只需要手动计算出 \(\frac{\partial F_i(W_i,X_{i-1})}{\partial W_i}\) 和 \(\frac{\partial F_i(W_i,X_{i-1})}{\partial X_{i-1}}\) 就能很方便的计算出对应层级的 \(\frac{\partial E^p}{\partial W_i}\) 和 \(\frac{\partial E^p}{\partial X_{i-1}}\) ,因此反向传播的计算相较于数值微分等手动计算每一层的梯度,十分方便且简单。
在手动计算每一层的 \(\frac{\partial F_i(W_i,X_{i-1})}{\partial W_i}\) 和 \(\frac{\partial F_i(W_i,X_{i-1})}{\partial X_{i-1}}\) 时,需要用到该层的 \(W_i\) 和 \(X_{i-1}\) 的值,这个值不需要每次都进行前向传播得到,而是在更新参数前,利用前向传播得到输出值 \(X_n\) 时就已经在计算机中进行记录,每次使用时,直接获取即可,这也是反向传播速度优于数值微分等方式的原因之一。
三、用于孤立字符识别的卷积神经网络
通过梯度下降训练的多层网络,具备从大量样本中学习复杂、高维非线性映射的能力,这使其成为图像识别任务的理想选择。在传统的模式识别模型中,需人工设计特征提取器,从输入中提取相关信息并排除无关变量干扰;随后可训练分类器将得到的特征向量划分为不同类别。在此框架下,标准的全连接网络可作为分类器使用。
而另一种更具潜在价值的框架是:尽可能让特征提取器自身通过学习完成特征提取。以字符识别为例,可直接向网络输入近乎原始的数据(例如尺寸归一化后的图像)。已有将全连接网络在字符识别中采用这种方式,虽然取得了一些成效,但是将全连接网络在这种方式的应用中存在着诸多问题。
首先,全连接网络在这种方式中的应用会使得可训练参数集极大。一幅典型图像的规模较大,通常包含数百个像素,假如一个多层全连接网络的第一层包含100个隐藏单元(神经元),那么仅仅第一层的参数数量就已经达到了数万个,再考虑到后续的层级,可训练参数集的数量将是一个极其庞大的数字。要想把如此庞大的参数集合训练拟合,就需要更大的训练数据集,因此,庞大训练数据集的获取就是一个问题;此外,存储这些参数所需的内存空间,可能也会使某些硬件实现方案无法落地。而卷积神经网络通过权重共享,使得参数量大大减少,避免了以上的问题。
其次,全连接网络在这种方式中的应用的另一个问题在于,其对输入的平移或局部变形不具备内置的不变性。虽然,在将字符图像或其他二维、一维信号输入神经网络的固定尺寸输入层之前,会对它们进行近似的尺寸归一化处理,并将其在输入区域内居中对齐,在一定程度上缓解平移和局部变形,但是,这类预处理无法做到尽善尽美,这就会要求神经网络对输入的平移或局部变形具备一定的不变性。理论上,一个规模足够大的全连接网络或许能够学习到对平移或局部变形等变化具有不变性的输出。但要实现这一目标,网络中很可能需要存在多个权重模式相似的单元,且这些单元需分布在输入层的不同位置,这样才能在输入图像的任意位置检测到显著特征。而要学习这样的权重配置,就需要极其庞大的训练数据集。因此,要使全连接网络学会对平移或局部变形等变化具有不变性是十分困难的,而反观卷积神经网络,通过权重共享,就能够轻松实现这种不变性。
最后,全连接网络最大的缺陷在于,它完全忽略了输入数据的拓扑结构。即使输入变量以任意顺序呈现,也不会影响训练结果。而图像(或语音的时频表示)具有显著的二维局部结构:在空间或时间上相邻的变量(或像素)之间存在高度相关性。正是这种局部相关性,使得在识别空间或时间对象之前“提取并组合局部特征”的方法具备了众所周知的极大优势——因为相邻变量构成的特征组合(如边缘、拐角等)可被归类为少数几类典型模式。全连接网络由于其完全忽略输入数据的拓扑结构,并不能提取到这种极为关键的局部相关性,而卷积神经网络则通过将隐藏单元的感受野限制在局部范围,强制实现了对局部特征的提取。
因此,卷积神经网络在识别图像的应用上,具备全连接网络等非结构化网络无可比拟的优势。
3.1 卷积网络
卷积网络结合了三种架构设计思路,以确保对平移、尺度和形变具备一定程度的不变性:1)局部感受野;2)权重共享;3)空间或时间子采样(池化)。下图展示了一个典型的字符识别卷积神经网络,名为LeNet-5。输入平面接收经过近似尺寸归一化且居中对齐的字符图像。网络中某一层的每个单元,其输入均来自前一层中一个小邻域内的单元集合。

卷积神经网络借助局部感受野,神经元能够提取基础视觉特征(如定向边缘、端点、拐角),或其他信号(如语音频谱图)中的类似特征。这些基础特征随后会被后续层组合,以检测更高阶的特征(如字符的笔画组合、整体轮廓)。
如前文所述,输入图像的形变或平移会导致显著特征的位置发生变化,即使借助局部感受野能够提取出基础视觉特征,但是如果不具备可变性,特征提取的效果也并不会好。为了解决这个问题,就可以借助权重共享来实现,强制让“感受野位于图像不同位置的一组单元”共用完全相同的的权重向量,这样就能够在图像不同位置检测提取特征,从而保持不变性。
一个卷积层应该负责提取多种特征(如定向边缘、端点、拐角等),提取不同特征的权重不应该相同,因此,一个完整的卷积层由多个用于提取不同特征的平面组成,每个平面内的所有单元共享同一组权重,这类平面被称为特征图(Feature Map),不同特征图用于在图像中提取不同特征。以图中LeNet-5的第一层为例:LeNet-5 第一个隐藏层的单元被组织成 6 个平面(即 6 个特征图);每一特征图中的单个单元都有 25 个输入,对应输入图像中 5×5 大小的区域(该区域被称为该单元的感受野),因此每个单元包含 25 个可训练系数(卷积核权重)和 1 个可训练偏置。特征图中相邻单元的感受野,会以前一层中对应相邻单元为中心 —— 这导致相邻单元的感受野存在重叠。例如在 LeNet-5 的第一个卷积层中,水平方向相邻单元的感受野重叠 4 列、5 行。
以LeNet-5第一个卷积层为例,简单介绍卷积层中每个单元如何计算。第一个卷积层的输入为32×32的原始图像,卷积核为5×5(卷积核、池化核的大小一般与当前层的局部感受野大小相同,这里需要简单介绍下局部感受野与全局感受野的差别,局部感受野是当前层与前一层的直接感受范围,本质是当前层单元为计算自身输出,直接读取的“前一层特征图的区域大小”;而全局感受野指的是当前层对原始输入的感受野,具体计算公式为 \(RF_l=(RF_{l-1}-1)×stride_l+kernel_l\) , \(RF_l\)为第l层感受野, \(stride_l\) 是第l层的步长, \(kernel_l\) 是第l层卷积核/池化核大小,初始值 \(RF_0=1\) ),同时有一个偏置。具体流程如下图所示,表格内深蓝色圆圈的格子代表输出的单元,它对周围5×5的单元利用该特征图的共享权重做特征提取,并加上一个偏置作为该输出单元的结果,之后这个5×5的橙色区域继续向左移动一个步长,再做计算提取。因此在 LeNet-5 的第一个卷积层中,水平方向相邻单元的感受野重叠 4 列、5 行。橙色区域每次计算完成,都移动一个步长,如果到达蓝色表格右侧边界,则向下移动一个步长,重新开始水平移动。最终会得到一个28×28(28×28的来源是,32-5+1=28,因此,特征图大小有规律: \(N_t=N-Kernel+1\) ,其中 \(N_t\) 为特征图大小, \(N\) 为输入的大小, \(Kernel\) 为特征图的卷积核大小)的单元集合作为特征图。LeNet-5的第一个卷积层为了提取六个不同特征,因此有六个28×28的特征图,每个特征图的计算方式都和上述一样。

一旦经过卷积层,某一特征被检测出来,其精确位置就不再重要,只有它相对于其他特征的大致位置关系才具有实际意义。这些特征的精确位置不仅对识别图案无帮助,甚至可能产生负面影响 —— 因为不同书写实例中,字符特征的位置本就存在差异。
为了降低特征图中“显著特征位置编码的精度”,可以通过减小特征图的空间分辨率来实现。这一目标可通过子采样层(池化层)实现:子采样层会对局部区域进行平均计算并执行子采样操作,既能降低特征图的分辨率,又能减少输出对输入平移和形变的敏感度。LeNet-5 的第二个隐藏层就是子采样层,该层包含 6 个特征图,与前一层(卷积层)的特征图数量一一对应。该子采样层中每个单元的感受野,是前一层对应特征图中2×2大小的区域。每个单元会先计算 4 个输入的平均值,再将结果乘以一个可训练系数、加上一个可训练偏置,最后通过 Sigmoid 激活函数输出。相邻单元的感受野为 “无重叠的连续区域”(即不存在像第一个卷积层那样的重叠,如下图所示),因此子采样层特征图的行数和列数均为前一层特征图的一半。其中,可训练系数和偏置会控制 Sigmoid 非线性激活的效果:若系数较小,单元会处于准线性工作模式,子采样层仅起到模糊输入的作用;若系数较大,根据偏置值的不同,子采样层单元可近似实现 “带噪声的或运算(noisy OR)” 或 “带噪声的与运算(noisy AND)”。

在卷积网络中,卷积层与子采样层通常会交替堆叠(后续每个卷积层和子采样层都遵循上述的计算规律,但是可能在卷积核/池化核大小上存在不同,还在计算卷积层单元时,会接受前一层多个特征图的信号,比如LeNet-5的第二个卷积层),形成 “双金字塔” 结构:随着网络层级加深,空间分辨率逐渐降低,而特征图数量(代表特征表征的丰富度)逐渐增加。通过 “逐步降低空间分辨率、同时逐步提升表征丰富度(增加特征图数量)” 的方式,卷积网络能对输入的几何变换具备高度的不变性。
3.2 LeNet-5网络架构
接下来将更加详细地介绍卷积神经网络LeNet-5架构。LeNet-5 包含 7 个层(不计输入层),所有层均包含可训练参数(权重),其输入为 32×32 像素的图像。输入像素的数值会经过归一化处理:背景(白色)对应的数值被调整为-0.1,前景(黑色)对应的数值为 1.175。这种归一化能使输入数据的均值接近 0、方差接近 1,从而加快模型的学习收敛速度。
下文将按如下规则标注网络层:卷积层标注为 \(C_x\) ,子采样层标注为 \(S_x\) ,全连接层标注为 \(F_x\) ,其中 \(x\) 代表层的序号。
3.2.1 \(C_1\) 层
\(C_1\) 层为卷积层,包含6个特征图。每个特征图中的每个单元,均与输入图像中5×5大小的邻域区域相连(即单元的局部感受野为5×5)。 \(C_1\) 层特征图的尺寸为28×28,这一尺寸设计能避免输入图像边缘的像素因无法被卷积核完全覆盖而 “脱边”(即无Padding时,32×32输入经5×5卷积后,输出尺寸为32-5+1=28,恰好匹配)。
\(C_1\) 层的可训练参数与连接数计算如下:
- 可训练参数:每个特征图对应1个5×5的卷积核(含25个权重)和1个偏置,6个特征图的总参数为(25+1)×6=156;
- 连接数:每个特征图包含28×28个单元,每个单元需与5×5个输入像素连接,6个特征图的总连接数为 28×28×25×6=122304。
3.2.2 \(S_2\) 层
\(S_2\) 层为子采样层,与 \(C_1\) 层的特征图数量一一对应,同样包含6个特征图,每个特征图的尺寸为14×14。每个特征图中的每个单元,均与 \(C_1\) 层对应特征图中2×2 大小的邻域区域相连(局部感受野为 2×2)。
\(S_2\) 层的计算流程与参数细节如下:
- 计算逻辑:单元先对 4 个输入值求和,将结果乘以 1 个可训练系数,再加上 1 个可训练偏置,最后通过 Sigmoid 激活函数输出;
- 尺寸关系:由于 S2 层单元的 2×2 感受野为无重叠设计(步长 = 2),因此 S2 层特征图的行数和列数均为 C1 层的 1/2(28÷2=14);
- 可训练参数与连接数:每个特征图对应 1 个可训练系数和 1 个可训练偏置,6 个特征图的总参数为(1+1)×6=12;每个单元需与 2×2 个 C1 层单元连接,总连接数为 14×14×4×6=5880。
3.2.3 \(C_3\) 层
\(C_3\) 层是包含 16 个10×10的特征图的卷积层。每个特征图中的每个单元,仅与 \(S_2\) 层(子采样层)部分特征图中相同位置的若干个 5×5 邻域区域相连(每个单元与 \(S_2\) 层不同特征图中的 5×5 邻域区域相连时,权重是不同的,即 6 个特征图,每个单元与之相连时,都有一组不同的 5×5 权重,在不同 5×5 的权重与对应的特征图中的 5×5 邻域做运算后,将不同特征图中的结果相加,之后再加上一个偏置)。下表展示了每个 \(C_3\) 特征图所整合的 \(S_2\) 特征图组合情况。
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | X | X | X | X | X | X | X | X | X | X | ||||||
| 1 | X | X | X | X | X | X | X | X | X | X | ||||||
| 2 | X | X | X | X | X | X | X | X | X | X | ||||||
| 3 | X | X | X | X | X | X | X | X | X | X | ||||||
| 4 | X | X | X | X | X | X | X | X | X | X | ||||||
| 5 | X | X | X | X | X | X | X | X | X | X |
不将所有 \(S_2\) 特征图与所有 \(C_3\) 特征图全连接的原因有二:其一,非全连接的设计能将连接数量控制在合理范围内;更重要的是,这一设计能打破网络的对称性:不同 \(C_3\) 特征图因接收的输入集合不同,会被迫提取不同(且有望互补)的特征。
表中连接方式的设计逻辑如下:前 6 个 \(C_3\) 特征图的输入来自 \(S_2\) 层中每一组连续的 3 个特征图;接下来 6 个 \(C_3\) 特征图的输入来自 \(S_2\) 层中每一组连续的 4 个特征图;再往后 3 个 \(C_3\) 特征图的输入来自 \(S_2\) 层中部分非连续的 4 个特征图;最后 1 个 \(C_3\) 特征图则接收 \(S_2\) 层所有特征图的输入。 \(C_3\) 层包含 1516 个可训练参数((25×3+1)×6+(25×4+1)×9+25×6+1=1516),以及 156000 个连接。
3.2.4 \(S_4\) 层
\(S_4\) 层是包含 16 个特征图的子采样层,每个特征图尺寸为 5×5。其每个特征图中的每个单元,与 \(C_3\) 层对应特征图中 2×2 邻域区域相连,连接方式与 \(C_1\) 层、 \(S_2\) 层的逻辑一致。 \(S_4\) 层包含 32 个可训练参数,以及 2000 个连接。
3.2.5 \(C_5\) 层
\(C_5\) 层是包含 120 个特征图的卷积层。该层每个单元均与 \(S_4\) 层全部 16 个特征图中相同位置的 5×5 邻域区域相连(每个单元与 \(S_4\) 层不同特征图中的 5×5 邻域区域相连时,权重是不同的,即 16 个特征图,每个单元与之相连时,都有一组不同的 5×5 权重,在不同 5×5 的权重与对应的特征图中的 5×5 邻域做运算后,将不同特征图中的结果相加,之后再加上一个偏置)。由于 \(S_4\) 层特征图的尺寸恰好为 5×5,因此 \(C_5\) 层特征图的尺寸为 1×1—— 这相当于 \(S_4\) 层与 \(C_5\) 层之间形成全连接。
\(C_5\) 层仍被标注为卷积层(而非全连接层)的原因是:若保持 LeNet-5 其他参数不变、仅增大输入图像尺寸, \(C_5\) 层特征图的维度会大于 1×1。 \(C_5\) 层包含 48120 个可训练连接((25×16+1)×120=48120)。
3.2.6 \(F_6\) 层
\(F_6\) 层包含 84 个单元(神经元),84 是为了对应字符类别在 7×12 位图上的风格化图像编码,不再分特征图,与 \(C_5\) 层完全连接。该层拥有 10164 个可训练参数((120+1)×84=10164)。与经典神经网络一致, \(F_6\) 层的所有单元,均先计算输入向量与权重向量的点积,再叠加偏置项,得到结果 \(a_i\) (单元i的结果)。该结果 \(a_i\) 再通过激活函数(缩放后的双曲正切函数),生成单元i的输出结果,记为 \(x_i\) ,公式如下:
其中, \(tanh(x)\) 为双曲正切函数, \(A\) 为函数的振幅,两者组合起来即为缩放后的双曲正切函数(激活函数)。
3.2.7 输出层
最终的输出层由欧式径向基函数(Euclidean RBF)单元构成 —— 每个类别对应一个 RBF 单元,且每个 RBF 单元接收 84 个输入。每个 RBF 单元的输出 \(y_i\) 计算方式如下:
其中, \(j\) 表示第 \(j\) 个维度,即 \(F_6\) 层的第 \(j\) 个单元, \(x_j\) 表示 \(F_6\) 层的第 \(j\) 个单元输出, \(y_i\) 表示第 \(i\) 个RBF单元的输出值, \(w_{ij}\) 表示第 \(i\) 个RBF单元的第 \(j\) 个可训练参数(特征模板值)。也就是全体 \(w_{ij}\) 是输出层的可训练参数,最初是人工设计出的固定值,后续模型会通过训练来优化 \(w_{ij}\) 。用手写数字7来具体说明 \(w_{ij}\) :
7是第7个RBF单元,其对应的一套特征模板值就是 \(w_{7j}\) , \(w_{7j}\) 最初是通过经验人工设计的,在7×12位图(1是白色,-1是灰色,从而通过颜色不同,对每个数字都构建出一套对应的模板值)上表示7的一套对应模板值,具体如下图:

那么最初的 \(w_{7j}\) 就是上图所表示的一套模板值,用表格表示:
| -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| -1 | -1 | -1 | 1 | 1 | 1 | -1 | -1 | -1 | -1 | -1 | -1 |
| -1 | -1 | -1 | -1 | -1 | 1 | -1 | -1 | -1 | -1 | -1 | -1 |
| -1 | -1 | -1 | -1 | -1 | 1 | -1 | -1 | -1 | -1 | -1 | -1 |
| -1 | -1 | -1 | -1 | -1 | 1 | -1 | -1 | -1 | -1 | -1 | -1 |
| -1 | -1 | -1 | -1 | -1 | 1 | -1 | -1 | -1 | -1 | -1 | -1 |
| -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
这一套模板值 \(w_{7j}\) 就被用于 \(y_i=\sum_{j=1}^{84}(x_j-w_{ij})^2\) 中与 \(F_6\) 层中的84个单元的输出 \(x_j\) 进行计算来得到第7个RBF单元的输出值 \(y_7\) 。从计算式 \(y_i=\sum_{j=1}^{84}(x_j-w_{ij})^2\) 中也能看出来, \(y_i\) 越小,就代表 \(F_6\) 层84个单元的输出值越接近对应类别 \(i\) ,也就表示原始输入图片越接近数字 \(i\) 。
由于0-9,共有10个RBF单元类别,因此,通过公式 \(y_i=\sum_{j=1}^{84}(x_j-w_{ij})^2\) 会得到10个输出结果 \(y_i\) ,最终找到 \(y_i\) 中最小的类别,这个类别对应的数字就被作为模型对原始输入图片识别结果。
换言之,每个输出层径向基函数(RBF)单元都会计算其输入向量与自身参数向量 \(w_{ij}\) 之间的欧氏距离:输入向量与参数向量的距离越远,RBF 单元的输出值就越大。某一 RBF 单元的输出可被解读为一个 “惩罚项”,用于衡量输入样本与该 RBF 单元对应的类别模型之间的匹配程度。
3.2.8 损失函数
可用于上述网络的最简单输出损失函数是最大似然估计准则,在本研究场景下,该准则等价于最小均方误差、。对于一组训练样本,该准则的表达式为:
其中 \(P=BatchSize\), \(y_{D^{p}}\) 表示第p个训练样本的第D个RBF单元的输出(即与输入样本 \(Z^p\)的真实类别相对应的那个RBF单元的输出)。如果模型对应输入样本的识别结果与真实类别不同,那么 \(y_{D^p}\) 就会很大,同时,这种方式也能够更好反应出识别结果与真实类别的差距有多大,比如将7识别成1时的 \(y_{D^p}\) 会远小于将8识别成1时的 \(y_{D^p}\) 。
尽管该损失函数适用于大多数场景,但它存在三个重要缺陷:
第一,若允许 RBF 单元的参数( \(w_{ij}\))自适应调整,损失函数 \(E(W)\) 会出现一个 “无意义但完全不可接受” 的解:所有 RBF 单元的参数向量( \(w_{ij}\) )趋于相等,且 F6 层的输出状态恒等于该参数向量。此时网络会完全忽略输入样本,无论输入的是0-9中的那一个值,所有 RBF 单元的输出均为 0。其实就是在训练过程中,为了使损失函数 \(E(W)=\frac{1}{P}\sum_{p=1}^{P}y_{D^{p}}(Z^{p},W)\) 最小,模型就将RBF单元的参数更新为同一套值(即所有 RBF 单元的参数向量( \(w_{ij}\) )趋于相等,也就是 \(w_{0j}=w_{1j}=......=w_{9j}\)),之后再将前面的卷积层、池化层和全连接层的参数更新到全连接层的84个单元的输出结果 \(x_j\) 恒等于 \(w_{ij}\) (即 \(x_j=w_{0j}=w{1j}=......=w_{9j}(j \in [0,83])\) ),这样,无论输入样本是什么,最终所有RBF单元的输出均为0,从而让损失函数 \(E(W)\) 达到最小值0。不过,若固定 RBF 单元的权重(不允许自适应调整),这种 “坍缩现象” 就不会发生。但是固定RBF单元的权重,在仅仅识别0-9这十个数字时够用,如果扩展到了ASCII符上,就不能再固定RBF单元的权重,此时可以通过下面的公式 \(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)}))\) 来避免坍缩现象。
第二,该损失函数未体现类别间的竞争机制。要实现类别竞争,可采用更具判别性的训练准则,即后验概率最大化(MAP)准则。MAP 准则的核心是:假设输入图像要么属于某一目标类别,要么属于一个 “背景无效类别”,在此前提下最大化真实类别 \(D_p\) 的后验概率。具体表达式为:
式中第二项起到竞争作用,也就是说该损失函数的目标不再是“只让真实类别 RBF 输出最小”,而是降低真实类别的惩罚(RBF输出 \(y_{D^p}\) 变小),同时提高所有非真实类别的惩罚(RBF输出 \(y_i\) 变大),此外还引入了“背景无效类别” \(e^{-j}\) ,避免非真实类别惩罚被无限拔高。具体讲解:
y在训练过程中,如果出现坍缩现象,所有模板开始趋近,则所有RBF单元的输出 \(y_i\) 都会很小, \(\sum_{i}e^{-y_{i}}\) 会变大,导致竞争项(第二项)变大,总损失 \(E(W)\) 升高,而模型训练为了最小化损失函数,就会让真实类别 \(y_{D^p}\) 变小(即让识别结果( \(F_6\) 层的84个单元输出值)与真实类别(对应的参数空间 \(w_{ij}\) )接近),让非真实类别 \(y_{i}\) 变大(即让识别结果( \(F_6\) 层的84个单元输出值)与真实类别(对应的参数空间 \(w_{ij}\) )远离),这样就会不同类别的RBF模板相互远离,保持差距,从根本避免坍缩;此外,还采用了背景无效类别 \(e^{-j}\) 来避免非真实类别的惩罚值被无限推高,以保护非真实类别,具体来说,j是一个超参数,由人为设计。如果没有这一项 \(e^{-j}\) ,模型为了使损失函数最小,会让真实类别 \(y_{D^p}\) 变小,让非真实类别 \(y_{i}\) 变大,极端情况下,会出现让非真实类别的 \(y_i\) 趋近于+∞(惩罚值无限大),此时非真实类别的 RBF 模板会被推到 “远离所有输入特征” 的极端位置,训练过程极易震荡、不收敛。但在加入 \(e^{-j}\) 后,当非真实类别的 \(y_{i}\) 已经很大时(比如 \(y_0=10,e^{-y_0}=e^{-10}\approx0\)),模型如果要继续增大非真实类别的 \(y_{i}\) ,由于固定值 \(e^{-j}\) 的存在,会使得竞争项(第二项)的数值也不会再发生明显变化(因为竞争项是log函数,其大小由其中的最大项决定),这就意味着:网络无需再把非真实类别的 \(y_{i}\) 推导无限大,只需要推到 \(e^{-y_{i}}<e^{-j}\) 即可,避免了非真实类别惩罚被无限推高。
四、实验结果与其他方法的对比
本文所描述系统的训练与测试均基于 NIST(美国国家标准与技术研究院)专用数据库 3(SD-3)和专用数据库 1(SD-1)构建的新的数据集MNIST。实验标明,在MNIST数据集上卷积神经网络LeNet-5的识别性能要优于所有其他技术。具体实验结果,详见:

浙公网安备 33010602011771号