计算机视觉专栏(1)【LeNet】论文详解

news2024/10/27 17:08:54

请添加图片描述

Lenet 系列

  • 论文精讲部分
  • 0.摘要
  • 1.引言
  • 2.CNN
  • 3.结果分析
  • 4.总结

论文精讲部分

本专栏旨在深入解析计算机视觉模型的论文及其发展背景,并通过代码部分的实际实验来加深理解。读者可以根据自己的需要参考其中的内容。其主体为原文,笔者理解内容会采用引用格式进行标注,以展示对当前论文内容的理解。由于不同角度可能导致理解上的差异,欢迎读者通过评论或私信方式提出自己的观点或疑问。
本章节将介绍LeNet网络,其实以现阶段的视角这个网路就是单纯的多种卷积池化的堆叠。但是在那个年代这样的理论十分超前。LeNet-5 被认为是现代卷积神经网络的奠基之作,它证明了通过梯度下降训练深度学习网络在图像分类任务上的有效性。LeNet-5 的成功推动了卷积神经网络在视觉识别任务中的广泛应用,并为后续更深更复杂的神经网络结构如 AlexNet、VGG 和 ResNet 等铺平了道路。尽管现在 LeNet 在处理更复杂的图像处理任务时可能不够用,但它仍然是学习卷积神经网络基础架构的一个极好的入门模型。所以在本专栏开设的内容将,通过论文精读和实践相结合的方式对各种结束进行深度学习理解,让读者更好的入门这一领域。无他。

原文地址 https://hal.science/hal-03926082/document

原文 格式

笔者理解部分

0.摘要

多层神经网络与误差反向传播算法的结合是成功的基于梯度学习技术的最佳例证。

现阶段这就是作为深度学习的基础了。

在给定适当网络架构的情况下,基于梯度的学习算法可以用来合成一个复杂的决策面。

这句话说的就很SVM,当然这些都是进化演变的产物,从最优化算法到现阶段的梯度下降。优化神经网络参数,满满的时代感的文字

这个决策面能够对高维模式(如手写字符)进行分类,而且预处理工作很少。

无需过多的数据预处理

本文回顾了应用于手写字符识别的各种方法,并在一个标准的手写数字识别任务上进行了比较。专门设计用于处理二维(2-D)形状可变性的卷积神经网络在性能上超过了所有其他技术。

这里主要说下本文的主要任务,手写字体数据集,分类将使用Lenet进行分类,而传统的方式,则要了解众多方法,所以其在下面介绍了一下

现实生活中的文件识别系统由多个模块组成,包括字段提取、分割、识别和语言建模。一种新的学习范式,

将这种统一的行为被称为范式,固定的规范形式

称为图变换网络(GTN), 允许这种多模块系统通过基于梯度的方法进行全局训练,以最小化总体性能度量。

描述了两个在线手写识别系统。实验展示了全局训练的优势,以及图转换网络的灵活性。

还描述了一个用于阅读银行支票的图转换网络。它结合了卷积神经网络字符识别器和全局训练技术,为商业和个人支票提供了创纪录的准确率。它已被商业化部署,并且每天读取数百万张支票。

关键词—卷积神经网络,文档识别,有限状态转换器,基于梯度的学习,图转换网络,机器学习,神经网络,光学字符识别(OCR)。

术语表

  • GT: 图变换
  • GTN: 图变换网络
  • HMM: 隐马尔可夫模型
  • HOS: 启发式过分割
  • KNN: 近邻算法
  • NN: 神经网络
  • OCR: 光学字符识别
  • PCA: 主成分分析
  • RBF: 径向基函数
  • RSSVM: 缩减集支持向量方法
  • SDNN: 空间位移神经网络
  • SVM: 支持向量方法
  • TDNN: 时间延迟神经网络
  • VSVM: 虚拟支持向量方法

作者任职于AT&T实验室的语音与图像处理服务研究实验室,地址:Schulz Drive, Red Bank, NJ。电子邮件:fyannleonbyoshuahanerg研究@att.com。Yoshua Bengio还任职于蒙特利尔大学计算机与运筹学系,地址:CP Succ Centre-Ville, Chemin de la Tour, 蒙特利尔, 魁北克。

1.引言

在过去的几年里,机器学习技术,特别是在应用于神经网络时,在模式识别系统的设计中扮演了越来越重要的角色。事实上,可以说学习技术的可用性是近期模式识别应用成功的关键因素,如连续语音识别和手写识别。

现阶段大家都很少用模式这个词出现在论文中了,主要是技术的发展迭代过快,导致之前的很多概念观点无法直观表述今天的技术,所以大家对这个模式这一翻译可能存在陌生。

我在这里解释下:

对于某一类特定的数据,如果某种行为能够表现出一致的特征,我们就可以抽象出这种行为的特性,并称之为“模式”。

详细解释:

当我们谈论模式时,我们指的是数据中共性的特征或规律,这些特征能够使我们识别或分类数据。例如:

  • 在图像处理中,识别手写数字的行为:手写数字图像中的某些像素排列和形状可以被抽象为“手写数字”的模式。

  • 在语音处理中,识别语音中的单词或短语的行为:音频信号中的频率特征和时长变化可以被抽象为“语音词汇”或“语音命令”的模式。

  • 在自然语言处理中,识别文本中的情感或意图的行为:句子的结构、词汇的分布或使用的特定短语可以被抽象为“情感表达”或“意图识别”的模式。

  • 在生物识别中,识别个人身份的行为:指纹、面部特征、虹膜图案等可以被抽象为“生物特征识别”的模式。

模式是特定类型数据的抽象特征,它们捕捉到了数据中稳定且可辨别的行为特征。模式识别系统的目标就是通过学习和识别这些模式,来实现对新数据的准确分类或识别。

本文的主要观点是,通过更多依靠自动学习,减少手工设计的启发式方法,可以构建更好的模式识别系统。

在上面解释了模式这一定义,模式识别指的是对某种数据的共性进行识别。例如,数字图片具备一些共性,因为它们都是由某种形态的数字组成的图片。然而,要在这些共性中进一步区分出具体的数字(如 1 到 9),我们需要找到每个数字独特的特性。这就要求我们在有共性的数据中识别出其独特的模式。
因此,模式识别系统的关键在于先识别数据的共性(如所有数字图片的通用特征),然后在这些共性中找出特定类别的独特特征,从而实现对具体类别的准确分类和识别。
器中还提到了,减少自动学习和手工设计
可以看到之前的大多数机器学习都是认为的对各种各样的模块进行设计分工,才能够完成具体的某一类任务。

这得益于机器学习和计算机技术的最新进展。以字符识别为例 ,我们展示了手工特征提取可以被直接在像素图像上运行的精心设计的学习机器所替代。 以文档理解为例,我们展示了由手工集成单独设计的模块构建识别系统的传统方法,可以被称为图变换网络(GTN)的统一且原理良好的设计范式所取代,这种范式允许所有模块的训练以优化整体性能指标。

在之前的工作中我还查到资料各种NLP任务还需要专家的摄入对数据进行各种预处理然后在送入机器学习算法,可以看到现阶段还是轻松了不少。

自模式识别领域的早期以来,人们就知道自然数据(如语音、字形或其他类型的模式)的多样性和丰富性,使得完全手工构建一个准确的识别系统几乎不可能。因此,大多数模式识别系统都是通过组合自动学习技术和手工算法来构建的。常见的识别单个模式的方法包括将系统分为两个主要模块,

请添加图片描述

如图所示。==第一个模块称为特征提取器,将输入模式转换为低维向量或符号串,使其可以容易地匹配或比较,并且相对于不会改变其本质的输入模式的变换和扭曲具有相对不变性。==特征提取器包含了大部分先验知识,并且相当针对特定任务。这也是设计工作的大头,因为它通常是完全手工制作的。而分类器则通常是通用且可训练的。这种方法的一个主要问题是识别准确性在很大程度上取决于设计师能否提出一组合适的特征。这是一项艰难的任务,而且不幸的是,每个新问题都必须重新完成。大量的模式识别文献致力于描述和比较特定任务的不同特征集的优劣。

在NLP领域这个问题确实是很大的难点,对于非专业领域的专家是不能很好的将文本进行分类的首先就是看不懂,所以计算机的人才并不能覆盖全领域,所以需要构建分类器可以使用计算机技术,但是单纯的拿到特征这个不是专家人工普通人做不来,这就是机器学习的瓶颈botten neck。

从历史上看,合适的特征提取器的需求源于分类器所使用的学习技术仅限于易于分离类的低维空间。

传统的方法,主要是在一定的环境下产生的。传统方法分类性能的好坏来源于特征,并且其亮着还要具备一定的匹配特性,才能发挥出更好的性能。即之前的数据都是处于低维度的数据还是比较简单的任务。

但是,过去十年中三种因素改变了这种看法。

环境发生变化了,所以技术也在迭代。哪三种变化呢,首先是计算机性能上去了之前之所以这样一方面来源于其计算性能有限,只能处理少量运算给计算机。比如人工提取特征,数据维度比较低。这都是为了迁就计算器的性能。然现在三种因素改变了这样设计算法的格局。

首先,低成本的具有快速运算单元的电脑的可用性使得我们可以更多地依赖蛮力数值方法,

首先是家用电脑的普及,计算机性能上去了价钱下来了,调参数机器学习算法,不太需要优化算法寻找,咱就是暴力破解也有能力了。从没打过这么富裕的仗。但是咱就是说,大家都一窝蜂的不在乎节省算力了,忽视了优化算法,那是他们只看到机器学习的那几个简单的参数。而神经网络大量的参数都是依赖于优化算法推动的,属于是饿太久了,给点好东西就是只顾吃饱,没想着做着更好吃,饿久了。当然还有一种语言含义就是其性能上去了就不爱就阶段算法效率问题。

而不是算法优化。 其次,大型数据库的可用性(如手写识别这一具有重要市场和广泛关注的问题)使得设计师可以更多地依赖真实数据,而不是手工制作的特征提取来构建识别系统。

数据存储能力上升。这个还是要结合优化算法,以及机器学习技术也起来了

第三个也是非常重要的因素是,强大的机器学习技术能够处理高维输入,

技术的进步,处理高维度数据也是考验算力问题。同样具备这样的理论也同样重要,理论和实际能力都达到了,

并在这些大型数据集上生成复杂的决策函数

大量的数据集训练能拟合高维度数据集的函数,需要依赖于好的算力支撑理论支持硬件服务

可以说,最近语音和手写识别系统准确性进展很大程度上归功于对学习技术和大型训练数据集的更多依赖。作为这一事实的证据,现代商业光学字符识别(OCR)系统中的很大一部分使用某种形式的多层神经网络,通过反向传播进行训练

1998的论文你敢信,就在神经网络
开始说文章主体架构了,文章太长了直接看主体架构吧

在这项研究中,我们考虑了手写字符识别任务(第I和II节),并在手写数字识别的基准数据集上比较了几种学习技术的性能(第III节)。虽然更多的自动学习是有益的,但没有最低限度的任务先验知识,任何学习技术都无法成功。在多层神经网络的情况下,一个好的方法是根据任务调整其架构。卷积神经网络(第II节中介绍)是包含二维形状不变性知识的专门神经网络架构的一个例子,通过使用局部连接模式并对权重施加约束来实现。在第III节中,我们对几种孤立的手写数字识别方法进行了比较。要从单个字符的识别扩展到文档中单词和句子的识别,需要引入通过减少整体误差来训练多个模块的思想,详见第IV节。使用多模块系统识别可变长度对象(如手写单词)最好的方法是模块操作有向图,这引出了可训练的图变换网络(GTN)的概念,也在第IV节中介绍。第V节描述了经典的启发式过分割方法以识别单词或其他字符串。在第VI节中,介绍了无须手动分割和标注的词级别识别器的判别和非判别梯度学习技术。第VII节介绍了消除分割启发式需求的有前途的空间位移神经网络方法,通过在输入的所有可能位置扫描一个识别器。在第VIII节中,展示了可训练的图变换网络可以被形式化为基于通用图组成算法的多个广义转换。还讨论了GTN与语音识别中常用的隐马尔可夫模型(HMM)之间的联系。第IX节描述了一个用于识别在笔记本电脑中输入的手写(称为在线手写识别)的全局训练的GTN系统。由于机器必须在用户书写时立即产生反馈,该问题被称为在线手写识别。系统核心是一个卷积神经网络。结果清楚地展示了在词级别训练识别器的优势,而不是在预先分割的手工标注的孤立字符上进行训练。第X节描述了一个完整的基于GTN的系统,用于读取手写和机器打印的银行支票。系统核心是第II节中描述的卷积神经网络LeNet。该系统已在商业上应用于NCR公司的一系列银行支票识别系统,每月在美国的几家银行中读取数百万张支票。

我们考虑了手写字符识别任务(第I和II节),先看第一节吧
数据学习

有几种方法可以实现自动机器学习,但最近由神经网络社区推广的最成功的方法之一可以称为基于数值或梯度的学习。这种学习机器计算一个函数 Y p = F ( Z p , W ) Y_p = F(Z_p, W) Yp=F(Zp,W),其中 Z p Z_p Zp 是第 p p p 个输入模式,而 W W W 代表系统中可调参数的集合。在模式识别设置中,输出 Y p Y_p Yp 可以解释为模式 Z p Z_p Zp 的识别类别标签,或者是与每个类别相关的分数或概率。

一个损失函数 E p = D ( D p , F ( Z p , W ) ) E_p = D(D_p, F(Z_p, W)) Ep=D(Dp,F(Zp,W)) 测量了模式 Z p Z_p Zp 的正确或期望输出 D p D_p Dp 与系统产生的输出之间的差异。平均损失函数 E train ( W ) E_{\text{train}}(W) Etrain(W) 是一组称为训练集的标记样本上误差 E p E_p Ep 的平均值。在最简单的设置中,学习问题在于找到能最小化 E train ( W ) E_{\text{train}}(W) Etrain(W) W W W 值。

实际上,系统在训练集上的性能并不是重点,更相关的衡量标准是系统在实际使用中的错误率,这是通过在与训练集不相交的一组样本(称为测试集)上测量准确率来估计的。大量理论和实验工作表明,测试集上的预期错误率 E test E_{\text{test}} Etest 和训练集上的错误率 E train E_{\text{train}} Etrain 之间的差距随着训练样本数量的增加而减小,近似为:

E test − E train = k h P α E_{\text{test}} - E_{\text{train}} = k \frac{h}{P^{\alpha}} EtestEtrain=kPαh

其中 P P P 是训练样本的数量, h h h 是机器的有效容量或复杂度的度量, α \alpha α 是介于 0.5 和 1 之间的数, k k k 是常数。这个差距在训练样本数量增加时总是会减小。此外,随着容量 h h h 的增加, E train E_{\text{train}} Etrain 减少

就是在的目标函数和损失函数,先讲了一下函数的构架,下面就开始计算梯度了的优化算法了

基于梯度的学习

使函数相对于一组参数最小化的一般问题是计算机科学中许多问题的根源。基于梯度的学习利用了这样一个事实:相比离散的(组合的)函数,使一个合理平滑、连续的函数最小化要容易得多。通过估计参数值的微小变化对损失函数的影响,可以最小化损失函数。这是通过损失函数相对于参数的梯度来测量的。当梯度向量可以通过解析方法(而不是数值扰动)计算时,可以设计出高效的学习算法。这是多种具有连续值参数的基于梯度学习算法的基础。

在本文描述的过程里,参数集 W W W是一个实数值向量, E ( W ) E(W) E(W)相对于 W W W是连续的,并且几乎到处可微。在这种设置中,最简单的最小化过程是梯度下降算法,其中 W W W迭代调整如下:

W k + 1 = W k − η ∂ E ( W ) ∂ W W_{k+1}=W_k-\eta \frac{\partial E(W)}{\partial W} Wk+1=WkηWE(W)

在最简单的情况下, η \eta η是一个标量常数。更复杂的程序使用可变的 η \eta η,或者把它替换为对角矩阵,或者像牛顿或拟牛顿方法那样替换为逆海森矩阵的估计。共轭梯度法也可以使用。

然而,附录B显示,尽管文献中有许多相反的声明,这些二阶方法对大型学习机器的实用性非常有限。一种流行的最小化程序是随机梯度算法,也称为在线更新。它包括使用平均梯度的噪声或近似版本来更新参数向量。在最常见的实例中, W W W基于单个样本来更新:

W k + 1 = W k − η ∂ E p k ( W ) ∂ W W_{k+1}=W_k-\eta \frac{\partial E_{pk}(W)}{\partial W} Wk+1=WkηWEpk(W)

通过这个过程,参数向量在平均轨迹周围波动,但通常比常规梯度下降和二阶方法在具有冗余样本的大型训练集上收敛得快得多(如在语音或字符识别中遇到的那些)。附录B解释了这其中的原因。

自20世纪六七十年代以来,应用于学习的这一类算法的性质就得到了理论研究,但对于非平凡任务的实际成功直到80年代中期才出现。

梯度反向传播 上面讲解了梯度更新

自20世纪六七十年代以来,基于梯度的学习程序已经被使用,但它们主要限于线性系统。

没有非线性函数仅能拟合线性函数

对于复杂机器学习任务,简单的梯度下降技术的惊人实用性并没有被广泛认识,直到以下三个事件发生:

第一个事件是认识到,尽管早期有相反的警告,损失函数中局部最小值的存在在实践中似乎并不是一个大问题。当注意到局部最小值似乎并不是早期非线性基于梯度学习技术(如玻尔兹曼机)成功的主要障碍时,这一点变得显而易见。

说这是局部最优解的锅?

第二个事件是由Rumelhart、Hinton和Williams等人推广了一种简单且高效的程序,即反向传播算法,用于计算由多个处理层组成的非线性系统中的梯度。

快速计算梯度方法了,不用一步一步的计算了

第三个事件是反向传播过程应用于具有S形单元的多层神经网络可以解决复杂学习任务的证明。

非线性能力来了,多层和激活函数。大局已定神经网络出击

反向传播的基本思想是,梯度可以通过从输出到输入的传播高效计算。这个想法在20世纪60年代早期的控制理论文献中已描述,但当时没有广泛应用于机器学习。有趣的是,早期在神经网络学习背景下的反向传播推导并没有使用梯度,而是使用中间层单元的虚拟目标或最小扰动论点。

控制理论文献中使用的拉格朗日形式主义可能是推导反向传播以及推导反向传播到递归网络和异质模块网络的推广的最佳严格方法。对于一般多层系统的简单推导见IE部分。

多层神经网络中局部最小值似乎不是问题,这在理论上有些神秘。有人猜测,如果网络尺寸超出了任务(在实践中通常是这种情况),参数空间中的额外维度的存在减小了无法达到的区域的风险。反向传播是迄今为止最广泛使用的神经网络学习算法,可能是任何形式的最广泛使用的学习算法。

手写识别系统中的学习

孤立的手写字符识别在文献中已经被广泛研究(参见相关评论),并且是神经网络早期成功的应用之一。 关于单个手写数字识别的比较实验在第三节中报告,结果显示,用基于梯度学习训练的神经网络在相同数据上表现优于其他所有测试方法。最好的神经网络叫做卷积网络,其设计目的是直接从像素图像中学习提取相关特征(参见第二节)。

卷积神经网络最适合图结构,还和传统的神经网路进行了对比

下面就是说还涉及到一个目标检测在分类的技术,本节不讨论具体的分割技术,而且过于老旧非专业读者可自行选择观看。本文就不再翻译

然而,手写体识别中最困难的问题之一不仅是识别单个字符,还包括将字符与单词或句子中的邻字符分开,这个过程称为分割。进行这项工作的技术已经成为标准,被称为启发式过分割 (Heuristic OverSegmentation)。它包括使用启发式图像处理技术生成大量潜在的字符间切割,然后根据识别器为每个候选字符给出的分数选择最佳的切割组合。在这种模型中,系统的准确性取决于启发式生成的切割的质量,以及识别器区分正确分割的字符与碎片字符、多个字符或其他错误分割字符的能力。为训练一个能执行此任务的识别器带来重大挑战,因为创建一个标记有错误分割字符的数据库非常困难。最简单的解决方案是将字符串图像通过分割器,并手动标记所有字符假设。不幸的是,这不仅是一项极其繁琐和昂贵的任务,而且在进行标记时保持一致性非常困难。例如,应该如何标记一个被切割的字符的右半部分。
第一种解决方案在第 V 节中描述,是在整个字符串级别而不是字符级别训练系统。基于梯度的学习的概念可用于此目的。该系统经过训练以最小化度量整体错误答案的损失函数。第 V 节探讨了确保损失函数是可微的各种方法,从而适合使用基于梯度的学习方法。第 V 节引入了使用有向无环图 (directed acyclic graphs),其中边携带数字信息来表示备选假设,同时介绍了 GTN 的概念。
第二种解决方案,描述在第 VII 节中,是完全消除分割的想法。其思想是在输入图像的每个可能位置上扫描识别器,并依靠识别器的 “字符识别特性”,即其能够在其输入字段中正确识别对齐良好的字符,即使在其旁边还有其他字符时,同时拒绝包含没有对齐字符的图像。
扫描识别器在输入上获得的一系列输出然后传输到一个考虑语言约束的图变换网络,最终提取出最可能的解释。这种 GTN 与隐马尔可夫模型(HMM)有些相似,使得这种方法让人想起了经典语音识别。
尽管在一般情况下,这种技术会非常昂贵,但利用卷积神经网络使其特别具有吸引力,因为它可以在计算成本上实现显著的节省。

2.CNN

通过梯度下降训练的多层网络具有学习复杂、高维、非线性映射的能力,使它们成为图像识别任务的有力候选者。

在传统的模式识别模型中,手动设计的特征提取器从输入中收集相关信息并消除不相关的变化。然后,一个可训练的分类器将生成的特征向量进行分类。在这种方案中,标准的全连接多层网络可以用作分类器。这里讲的就是人工提取特征,然后将得到的特征送入网络进行分类

一个更有趣的方案是尽可能地依赖于特征提取器本身的学习。在字符识别的情况下,网络可以接收几乎原始的输入(如尺寸标准化的图像)。尽管使用普通的全连接前馈网络在一些任务(如字符识别)上取得了一定的成功,但仍存在问题。这部分就是将图像单纯的进行标准化,然后送入全连接网络,当然图要送进去就要拉伸成向量

论问中下面就开始将这样直接把图归一化送入网络所带来的困难和缺点

首先,典型的图像往往较大,通常包含数百个变量(像素)。一个包含一百个隐藏单元的全连接网络的第一层已经包含数万个权重。

100个输入100个输出,全连接1万个参数。第一个缺点这样会导致参数过多,

如此大量的参数增加了系统的容量,因此需要更大的训练集。

第二个缺点,在这样的难度下,训练参数所需要的数据也在直线攀升,有没有这么多的数据给你训练呢?存参数都变成问题, 退一步将也没有这么大的数据用来训练模型啊。再者说存能跑这个模型都费劲

此外,存储这么多权重所需的内存可能会排除某些硬件实现。

第三个缺点,存训练用的参数对闪存的要求开始增加,可能有些硬件无法完成这样的训练模型。

然而,面向图像或语音应用的非结构化网络主要缺陷在于它们对于平移或局部扭曲的输入没有内置的不变性。

第四个缺点。训练好了网络,如果图片分类内容发生了位置的变换,模型就要重新训练。参数都是一一对应区域的

在被发送到神经网络的固定大小输入层之前,字符图像或其他二维或三维信号必须进行大致尺寸标准化和居中处理。

第五个缺点,神经网络的对图片的处理手段都有些复杂,归一化,图像剧中大小裁剪啥的。要不然怕网络不好用,真正处理结算结果的参数没用上。

不幸的是,没有完美的预处理方法;上述缺陷就是CNN的优势他都进行了解决

人家说没这么完美的预处理手段啊。你要不就接受模型变笨,要不就让你的模型变聪明吧。预处理就像是用代码做无人驾驶,穷举的行为本身就看起来不健全。

手写通常是在单词级别标准化的,这可能导致个别字符的尺寸、倾斜和位置变化。这与书写风格的变化结合在一起,会导致输入对象的显著特征的位置存在变化。

话又说回来,手写字体的特殊性还和其他的不一样,他不能很好的保证数据图的位置居中,这又增加了用神经网络做图分类的难度

原则上,一个足够大的全连接网络可以学习生成对这些变化不变的输出。然而,学习这样的任务可能会导致多个具有相似权重模式的单元分布在输入的各个位置,以便在输入的任何位置检测显著特征。

传统网络全连接神经网络理论肯定是可行,但是这也不是很实用,多个具有相似权重模式的单元分布在输入的各个位置,相同功能的参数组合多次存在于同一层下各种各样位置。这样做是为了应对可能在某些位置出现的数据。其实这个有点像几个人干活,每个人都是什么都会一点,比不上每个人仅仅专精自己的领域大家组成团队才厉害。

学习这些权重配置需要大量的训练实例来覆盖可能变化的空间。

需要大量的数据来训练,应对各种变化才能训练好这模型。

下文描述的卷积网络中,通过强制在空间上对权重配置进行复制,自动获得位移不变性。

暗戳戳的q了下解决的问题

其次,全连接架构的一个缺陷是完全忽略了输入的拓扑结构。输入变量可以以任何固定顺序呈现,不会影响训练结果。

图像数据实际上具备者结构信息,不是传统表数据这样离散的,所以传统的神经网络可以处理离散的表格数据进行拟合,但是讲图进行拉伸就会丢失其结构信息,所以可以理解一部分参数在训练过程中会尽力的去修复这些结构信息,但是当图的结构发生了变化这些参数就失效了。具体的可以参考我其他深度学习的博文我解释过这个结构问题。

相反,图像或语音的时频表示具有强烈的三维局部结构,空间上或时间上相邻的变量(或像素)高度相关。局部相关性是提取和组合局部特征以识别空间或时间对象的众所周知优势的原因,因为邻近变量的配置可以被归类为少量的类别,如边缘或拐角。卷积神经网络通过限制隐藏单元的接受域为局部,强制提取局部特征。

上面这一小段都是在反复说全连接作用到图像领域的问题

卷积网络登场

卷积网络结合了三种架构思想,以确保在一定程度上具有平移、尺度和形变的不变性:

1.局部接收域、
2.共享权重(或权重复制)和
3.空间或时间子采样

上述说明卷积神经网络的全部优点特性。明牌了

一个典型的用于识别字符的卷积网络,被称为LeNet-5,展示在图中。

预告一下,下一个小节中主要就是实现这个网络并进行分类效果展示。在上面反复讲了传统神经网络在图分类领域的弱点后,开始引入CNN。lenet

请添加图片描述
输入平面接收大小近似标准化并居中的字符图像。
请添加图片描述

首先人家说了模型对输入有要求,输入是一个标准化的输出图,就是归一化的一个图,并且其要分类的内容居中,即途中的主体内容是居中的。如上图所示。

层中的每个单元从前一层的小邻域中的一组单元接收输入。

在这里插入图片描述

这个还是很好理解的,新生成的六个图中的每一个像素数值,都是由上一层中特征图的一个区域计算得到的,很简单的CNN尝试,不会的可以点这里补一下。讲的很清楚欢迎大家补习

**将单元连接到输入的局部接受域的概念可以追溯到20世纪50年代的感知器,**并几乎与Hubel和Wiesel在猫的视觉系统中发现局部敏感的定向选择性神经元的时间相符。这种局部连接已在视觉学习的神经模型中多次使用。

这部分就是在讨论局部感受域计算下一层计算结果的方式已经在之前的研究中被验证‘

通过局部接受域,神经元能够提取如定向边缘、端点、角落等基本视觉特征(或在其他信号中的类似特征,如语音频谱)。然后通过随后的层组合这些特征以检测更高阶的特征。

如前所述,输入的失真或偏移可能导致显著特征位置的变动。

就是输入数据的位置或者分辨率下降都会导致特征信息发生变化。

此外,对图像某一部分有用的基本特征检测器可能对整个图像同样有用。通过强制一组单元(其接受域位于图像上不同位置)拥有相同的权重向量,可以应用这一知识。

这里主要讨论就是应对 或偏移可能导致显著特征位置的变动。,这个问题,上文中说到局部的特征提取器很好用,并且这个基本的特征提取器对全图都很有用。所以可不可以将这个提取器作用到全图呢??

每层中的单元被组织在平面内,每个平面的单元共享同一套权重。

这就是人家给出的解决方案,一个图用一个卷积核,权重共享的概念出来了。

这样的平面中的单元输出被称为特征图。

引入卷积计算的结果被称为特征图

特征图中的单元都被限制在图像的不同部分执行相同的操作。

不同部分的特征图,被相同的卷积核进行计算

一个完整的卷积层包含多个具有不同权重向量的特征图

这部分实际上在阐述生成了多个特征图,就是采用了多个卷积核。

因此可以在每个位置提取多种特征。

多个卷积核提取多种特征,每一个卷积核只能提取固定特征。

LeNet-5的第一层就是一个具体的例子。

开始讲人家是如何设计的模型了请添加图片描述
LeNet-5的第一个隐藏层中的单元被组织在多个平面中,每个平面是一个特征图。

这里通常使用的传统神经网络中的说法,就是用隐藏层的单元来表示被卷积的计算结果。称呼下图的为隐藏层的单元,这种叫法在神经网络中比较流行,计算结果个数是等于神经网络隐藏层的节点个数的,所以这样称呼,这也是最初的叫法现阶段还没成型。

请添加图片描述

特征图中的一个单元通过其感受域(连接到输入的一个小区域)连接到输入。因此每个单元都有多个输入,

再次解释卷积行为。

并因此有多个可训练的系数加上一个可训练的偏差。

一组卷积核中多个参数和偏置

特征图中相邻单元的接受域在前一层中是相邻的,因此彼此的接受域会有重叠。

实际就是卷积的步长和卷积行为构建的原因,所以会存在重叠的现象。

例如,在LeNet-5的第一个隐藏层中,水平相邻的单元的接受域在列和行上重叠。如前所述,一张特征图中的所有单元共享同一套权重和相同的偏置,因此它们在输入的所有可能位置上都检测相同的特征。

使用相同的卷积核提取的特征就是相同啊。

该层中的其他特征图使用不同的权重和偏置集。

其他特征图是使用不同卷积核提取的

从而提取不同类型的局部特征。

在LeNet-5的情况下,每个输入位置由六个特征图中相同位置的六个单元提取六种不同类型的特征。

多个卷积核在相同位置提取多种特征。

特征图的顺序实现将通过具有局部接受域的单个单元扫描输入图像,然后在特征图中相应的位置存储该单元的状态。

说起来就是 特征图的顺序实现 的意思就是特征图中的数值是按顺序生成的即使第一行第一列的数值然后是第一行第二列这样,然后这里面说每个单元生成具备一个局部的局部接受域,这个的意思就是说特征图的每个单元都是输入图像一部分的数据生成的。每次生成一个特征图的单元数值就被称这样的行为为卷积操作。

此操作等同于一次卷积,随后是一个加性偏置和压缩函数,因此得名卷积网络。

后面就跟着激活函数和偏置项

卷积的核心是特征图中单元使用的连接权重集。

这里就是卷积操作权重共享导致的其对特征图的位置不敏感。计算结果也仅仅是移动一下而已。

卷积层的一个有趣属性是,如果输入图像移位,特征图的输出将以相同的量移位,但除此之外不会改变。这一属性是卷积网络对输入的平移和扭曲具有鲁棒性的基础。

一旦检测到一个特征,它的确切位置变得不那么重要,只有相对于其他特征的大致位置是相关的。

这里面讲的主要是提取到特征只要是在图上的相对关系没有被破坏就可以了,实际上确定的位置就变的不再重要,这一点可以看成对图马赛克画你还能分辨出其主要特征就可以了,其实就能够实现图像的分辨那么就可以说你对特征提取完了,但是这个新生成的马赛克图上对特征信息的位置信息可能发生了些偏移但是其相对位置是没变的。其实就是在为池化层做铺垫,抛弃一些相对不重要的特征。

例如,一旦我们知道输入图像包含一个大致水平线段的端点在左上区域,一个角在右上区域,以及一个大致垂直线段的端点在图像下部,我们就可以说输入图像是一个.7…。。

一个图的大体特征知道了,不需要知道那么多的细节就能分辨一个图的类别,而且引入过多的特征就会造成噪声的增加相反会降低模型的分类性能。

这些特征的精确位置不仅对于识别模式无关紧要,而且可能是有害的,因为这些位置可能因为不同字符实例的不同而有所变化。

== 将显著特征的位置编码精度减少到特征图中==,可以通过降低特征图的空间分辨率来实现。

就是下采样吗。池化层

这可以通过称为子采样层的层来实现,该层执行本地平均和子采样,从而降低特征图的分辨率,减少输出对于平移和扭曲的敏感性。LeNet的第二个隐藏层是一个子采样层,该层包括六个特征映射,对应前一层中的每一个特征映射。每个单元的接受域是前一层相应特征映射中的一个4x4区域。每个单元计算其四个输入的平均值,乘以一个可训练系数,加上一个可训练偏差,然后通过sigmoid函数传递结果。

提出的卷积层确实很厉害,同样这里又阐述了一个观点,就是使用卷积层和池化层的堆叠。现阶段至今也是这样的,卷积层提取特征实现特征的聚合,池化层下采样降低参数。提取主要特征。创新就是架构卷积后池化。,上文中提到了这里使用的是均值池化操作,一个4*4的池化操作。这里还使用了一个权重,和偏置再次激活。

连续的单元具有相邻且不重叠的接受域。因此,子采样层的特征图比前一层的特征图少一半的行和列。

可以看到这里说的是相邻但是不重叠的接受域和上文卷积的重叠接受域是不相通的,所以生成的特征图会显著的变层一半,这里感兴趣的同学可以自行的理解理解。

可训练系数和偏差控制sigmoid非线性的效果。如果系数较小,则单元以准线性模式运行,子采样层只是模糊输入。如果系数较大,则子采样单元可以被视为执行“有噪声的或”或“有噪声的与”功能,具体取决于偏差值。通常会交替进行卷积和子采样的连续层,导致每一层都有一个双金字塔结构,随着空间分辨率的降低,特征图的数量会增加。

现阶段已经阐述明确了整体的lenet5的结构就是一个金子它的结构一开始是一个大图,在后续的过程中会逐渐的变小,不断的卷积核池化操作的记过,这也是构建了经典的架构,后续无非就是在这样的结构进行反复的修改调整。当然也可以看到随着图的大小在变小但是其特征图的个数增加了。

请添加图片描述
第三隐藏层中的每个单元可能有来自前一层中多个特征映射的输入连接。

由于其卷积核本质上是高维的所以,其接受的是多个特征图生成一张特征图,所以这里会说是多个特征映射的输入链接。

受Hubel和Wiesel的简单细胞和复杂细胞概念启发,卷积-子采样组合是受到Fukushima的Neocognitron中的灵感。当时还没有像反向传播这样的全局监督学习程序。通过逐渐减小空间分辨率,并逐渐增加表示的丰富性来补偿,可以实现对输入几何变换的高度不变性。

这里主要是讨论器卷积池化后特征图变小了,那么是不是特征丢失很严重呢,所以采用其增加特征图的数量的方式来补偿这种丰富度的流失。简单的理解就是一开始的输入就是44的图像后面卷积卷着卷着就变成了116的向量用来分类,通过卷积核个数增加来达到这样的效果,补偿特征图缩小下表达能力不足的特性。

这种渐进降低空间分辨率并逐渐增加表示的方法,能够在一定程度上提高对几何变换的不变性

上面主要是对网路主体架构的讲解,后面则是对细节的解释
LeNet5

本节更详细地描述了LeNet-5的架构,这是实验中使用的卷积神经网络。LeNet-5由7个层组成,不包括输入层,所有层都含有可训练的参数(权重)。**输入是一个32x32像素的图像。**这显著大于数据库中最大的字符(最大20x20像素,位于28x28区域中心)。之所以这样设计,是为了让潜在的独特特征,如笔画端点或角落,能够出现在最高级别特征检测器的感受野中心。

这实际上的意思就是说,一个手写字体实际上占用的像素位置不需要这么大的32x32为什么还要设置这么大呢,坐着的目的可能是看到更多的写作习惯,将这种写作习惯的特征看成高级特征也能呗看到,所以在裁剪的时候选择了更大的特征图。

在LeNet-5中,最后一个卷积层(C3,上图)的感受野中心形成了一个20x20的区域,在32x32输入的中心。输入像素的值被规范化,使得背景级别(白色)对应于-0.1,前景(黑色)对应于1.175。这使得输入的平均值大约为0,方差大约为1,从而加速了学习。

这段话在描述LeNet-5卷积神经网络模型中特定层(最后一个卷积层,即C3层)的构造和输入数据处理方式。

  1. 感受野中心形成一个区域:在LeNet-5中,最后一个卷积层(C3)的设计使得其感受野(即每个神经元观察输入数据的区域)的中心在输入图像上形成了一个20x20像素的区域。这个区域位于整个输入图像(尺寸为32x32像素)的中心位置。感受野中心聚集在输入中心的意义在于它可以捕捉到图像中心周围的关键特征,这对于诸如图像识别等任务常常是关键区域。就是这个卷积核仅仅关注图的中心为位置

  2. 输入像素的值被规范化:对于神经网络的输入数据,为了使模型训练效果更好,通常需要将输入数据进行规范化处理。在这里,输入像素的白色背景被规范化为-0.1,黑色前景被规范化为1.175。这种规范化处理使得输入数据的平均值约为0,方差约为1。这是一种常见的数据预处理方式,称为标准化,目的是减少数据中的偏差和规模差异,帮助加速学习过程,因为它能帮助神经网络更快地调整权重,从而更快地收敛。

总结来说,这段话强调了在LeNet-5中,通过精心设计的卷积层和数据预处理策略,优化了模型对图像中心关键信息的捕捉能力和学习效率。

在接下来的卷积层中,被标记为Cx,子采样层被标记为Sx,全连接层被标记为Fx,其中x是层的索引。C1层是一个卷积层,有6个特征图。每个特征图中的每个单元都与输入中的5x5邻域相连。特征图的尺寸为28x28,这阻止了输入连接越过边界。C1包含156个可训练参数和122304个连接。

S2层是一个子采样层,拥有6个大小为14x14的特征图。每个特征图中的每个单元都与C1中相应特征图的2x2邻域相连。S2中单元的四个输入被相加,然后乘以一个可训练的系数,并加上一个可训练的偏差。结果通过一个S形函数传递。2x2的感受野是不重叠的,因此S2中的特征图拥有一半的行数和列数,与C1中的特征图相比。S2层有12个可训练参数和5880个连接。

C3层是一个具有16个特征图的卷积层。每个特征图中的每个单元连接到S2层特征图子集中的几个相同位置的5x5邻域。表I显示了每个C3特征图组合的S2特征图集。为什么不将每个S2特征图连接到每个C3特征图呢?

下面解释为什么仅仅使用了为什么不用全部特征图构造下一个卷积层的特征图。

请添加图片描述

上面这个表什么意思呢???每一列指示了在 S2 中哪些特征图被组合在一起,用于 C3 中某个特定特征图的单元。我在下图中画出了C3的位置,可以额淡道C3一共是16个特征图,所以上面的列坐标全部是16列,注意S2特征图是6个所以行坐标为6。那么这个图就是描述了卷积前后特征图之间的关系。可以S2中的第0张特征图影响了,C3中0号特征图生成使用了S2特征图中的0,1,2.。C3中1号特征图生成使用了了S2特征图中的1,2,3。这样的反复循环组合生成了C3中的多张特征图。注意生成6个特征图后会增加一个图就是第七个特征图采用了4个生成

在这里插入图片描述

原因有两个。首先,非完全连接方案保持连接数在合理范围内。更重要的是,它迫使网络中的对称性被打破。不同的特征图被迫提取不同的(希望是互补的)特征,因为它们获得了不同的输入集。表I中连接方案背后的逻辑如下。前六个C3特征图从S2的每个相邻的三个特征图子集中获取输入。接下来的六个从每个相邻的四个特征图子集中获取输入。接下来的三个从四个非连续的特征图子集中获取输入。最后一个从所有S2特征图中获取输入。C3层有1516个可训练参数和151600个连接。

感觉主要还是算力受限,不过这样的方式还是挺有趣的,这样还不用通道重排了

S4层是一个具有16个特征图的子采样层,每个特征图大小为5x5。每个特征图中的每个单元以类似于C1和S2的方式连接到C3中相应特征图的2x2邻域。S4层有32个可训练参数和2000个连接。

C5层是一个具有120个特征图的卷积层。每个单元连接到所有16个S4层特征图中的5x5邻域。由于S4的大小也是5x5,因此C5层特征图的大小为1x1:这相当于S4与C5之间的完全连接。因为如果LeNet-5的输入大小增加,而其他条件保持不变,特征图维度将大于1x1,所以将C5标记为卷积层而非全连接层。C5层具有48120个可训练连接。

F6层包含84个单元(这个数字的原因将在下文解释输出层的设计时给出),并且与C5完全连接。它有10164个可训练参数。

上面就是不断的介绍使用的参数量了。

在经典神经网络中,直到F6层的神经元计算它们的输入向量与它们的权重向量之间的点积,并额外加上一个偏置。

这里指的就是传统的就是加权求和

这个加权和,表示为第i个单元的 a i a_i ai,然后通过一个sigmoid压缩函数进行处理,以产生第 i i i个单元的状态,表示为 x i x_i xi x i = f ( a i ) x_i = f(a_i) xi=f(ai)

然接一个 f f f激活

这里的压缩函数是一个缩放的双曲正切函数: f ( a ) = A tanh ⁡ ( S ⋅ a ) f(a) = A \tanh(S \cdot a) f(a)=Atanh(Sa)其中A是函数的振幅,S决定了其在原点处的斜率。函 f f f是一个奇函数,其水平渐近线在 + A +A +A − A -A A。常数A被选为1.7159。选择此种压缩函数的原理在附录A中有详细解释。

激活函数被设计过的,和现阶段用的sigmoide函数类似,这里解释下:

在这个上下文中,“压缩函数”(squashing function)指的是激活函数,它将每个神经元的输入值映射到一个有界输出区间。这里使用的是一个缩放的双曲正切函数 f ( a ) = A tanh ⁡ ( S ⋅ a ) f(a) = A \tanh(S \cdot a) f(a)=Atanh(Sa) 作为激活函数。

这个激活函数与常见的Sigmoid函数类似,都是用来对输入的连续值进行非线性映射,但有以下几个关键区别:

  1. 函数形态:缩放的双曲正切函数属于双曲函数,而标准的Sigmoid函数 σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1+e^{-x}} σ(x)=1+ex1 形状类似,但却是逻辑函数。尽管两者都是S形函数(S-shaped),
    但双曲正切具有更快的收敛性和更陡峭的斜率。

  2. 输出范围

    • 双曲正切函数的输出范围通常是 ( − 1 , 1 ) (-1, 1) (1,1),但这里通过系数 A A A进行缩放,使得输出范围为 ( − A , A ) (-A, A) (A,A),在本例中是 ( − 1.7159 , 1.7159 ) (-1.7159, 1.7159) (1.7159,1.7159)
    • Sigmoid函数的输出范围是 ( 0 , 1 ) (0, 1) (0,1)
  3. 斜率和调节参数

    • S S S 在这里控制函数在原点的斜率,使激活函数的敏感度可以调节。 S S S 的增加会使函数在零点附近变得更加陡峭,对输入的小变化更敏感。
    • Sigmoid函数的斜率在中心点可以通过调节其公式中的变量来修改,但更常见的是使用标准形式。
  4. 奇偶性

    • 缩放的双曲正切函数是一个奇函数,这意味着它关于原点对称,能够输出正值和负值。
    • 标准的Sigmoid函数则是非奇非偶函数,且只能输出正值。

选择缩放的双曲正切作为激活函数而不是Sigmoid,主要是由于它在神经网络中常常能提供更好的收敛性能,尤其是在处理消失的梯度问题时比Sigmoid表现得更为有效。此外,由于其输出值的对称性和更宽的输出范围,它能更好地处理具有正负方向的输入数据。选择此激活函数的具体理由和优势通常会在网络设计的详细文档或附录中说明。

最终的输出层由欧几里得径向基函数(Radial Basis Function, RBF)单元组成,每个类别对应一个RBF单元,每个RBF单元处理84个输入。每个RBF单元 y i y_i yi的输出计算如下:
y i = ∑ j ( x j − w i j ) y_i = \sum_{j}(x_j - w_{ij}) yi=j(xjwij)换句话说,每个输出的RBF单元计算其输入向量与其参数向量之间的欧式距离。输入与参数向量的距离越远,RBF的输出就越大。特定RBF的输出可以被解释为一个惩罚项,用于衡量输入模式与RBF相关联的类模型之间的拟合度。在概率术语中,RBF输出可以理解为在F6层的配置空间内,高斯分布的未归一化负对数似然。

可以近似看成在计算每个输出类别在和一个可训练的向量计算欧氏距离了。现阶段还是很少见的这种目标函数,其目的就是训练一组这样的 w i j w_{ij} wij来优化最终的输出结果。

参数向量的选择是手动完成,并且至少最初是固定的。这些参数向量的分量设置为-1或+1。虽然理论上这些参数可以随机选择,具有对-1和+1的等概率,或者甚至可以选择形成错误纠正码(如文献所示),

初始化不是完全随机的好收敛

但实际上,它们被设计为在7x12位图上绘制对应分类的风格化图像(因此数字84)。这种表示法对于识别独立数字并不特别有用,但对于识别来自完整可打印ASCII集的字符串非常有用。其原理是,相似的字符因此容易混淆,如大写’O’、小写’o’和’0’,或小写’l’、数字’1’、方括号和大写’I’,将具有相似的输出代码。如果系统与能够纠正此类混淆的语言后处理器组合使用,则尤其有用。因为混淆类的代码相似,对于具有模糊特征的字符,相应RBF的输出将是相似的,后处理器将能够选择合适的解释。

损失函数
在神经网络的设计中,最简单可用于上述网络的输出损失函数是最大似然估计(MLE)准则,这在我们的例子中等价于最小均方误差(MSE)。对一组训练样本的标准只是简单地:

E ( W ) = ∑ p ( y D p − Z p ) 2 E(W) = \sum_p (y_{Dp} - Z_p)^2 E(W)=p(yDpZp)2

其中 y D p y_{Dp} yDp 是第 D p Dp Dp 个 RBF 单元的输出,即对应于输入模式 Z p Z_p Zp 的正确类别。

就是模型的预测值和真实数值做差,平方的目的是便于求导

尽管这个成本函数在大多数情况下是适当的,它缺少三个重要的特性。

缺少一定的约束问题,优化目标需要修正所以增加了一个后缀

首先,如果我们允许 RBF 的参数自适应, E ( W ) E(W) E(W)将有一个简单但完全不可接受的解:所有 RBF 参数向量相等,并且 F6 的状态是常量,与那些参数向量相等。在这种情况下,网络完全忽略了输入,并且所有 RBF 的输出都等于零。这种崩溃现象不会发生,如果不允许 RBF 权重自适应。第二个问题是,类间没有竞争。这种竞争可以通过使用一个更具辨别性的训练标准来实现,称为最大后验概率(MAP)准则,类似于有时用来训练隐马尔可夫模型(HMMs)的最大互信息标准。

这对应于最大化正确类 D p Dp Dp的后验概率(或最小化正确类别的概率的对数),假设输入图像可能来自某个类别,或来自一个背景“垃圾”类别标签。在惩罚项意义上,这意味着除了像 MSE 标准那样降低正确类别的惩罚外,此标准还会提高错误类别的惩罚:

E ( W ) = ∑ p ( y D p − Z p ) 2 − log ⁡ ( e j + ∑ i e y i ( Z p , W ) ) E(W) = \sum_p (y_{Dp} - Z_p)^2 - \log(e^j + \sum_i e^{y_i(Z_p, W)}) E(W)=p(yDpZp)2log(ej+ieyi(Zp,W))

第二项的负面作用扮演了一个“竞争性”角色。这必然是小于(或等于)第一项的,因此这个损失函数是正的。常数 j j j 是正的,防止已经很大的类的惩罚进一步增加。这个歧视性标准预防了前面提到的在学习 RBF 参数时的“崩溃效应”,因为它保持 RBF 中心相互分离。在第六节中,我们将介绍这个准则的一个泛化,适用于学习在输入中分类多个对象的系统(例如,文档中的字符或单词)。

其实这里就是很接近限现阶段的常见的损失函数,真实数值和预测数值之间存在这样的一个差作为最终模型计算的损失项目,为了制约模型的训练过程中出现的问题,加入了一个约束项确保模型能够朝向一个正常的范围。

描述中的损失函数基本上是一个度量真实值和预测值之间差距的传统损失函数,但它通过引入额外的竞争性和约束条件来确保模型的鲁棒性和有效性。

基本损失函数结构

  • 传统的最小均方误差(MSE)损失函数,形式上是 ∑ p ( y D p − Z p ) 2 \sum_p (y_{Dp} - Z_p)^2 p(yDpZp)2,这个部分直接衡量了预测值 y D p y_{Dp} yDp 和真实值 Z p Z_p Zp 之间的差异。

额外的竞争性和约束

  • 加入一个对数项,这个对数项包含一个“竞争性”成分,即 − log ⁡ ( e j + ∑ i e y i ( Z p , W ) ) -\log(e^j + \sum_i e^{y_i(Z_p, W)}) log(ej+ieyi(Zp,W))。这部分的设计不仅仅是惩罚错误的预测,而且还通过提升错误类别的惩罚,增加了各个类别之间的竞争。这样的设计可以有效防止所有类别向量趋同于同一个点(也称为“崩溃效应”),因为这种趋同会使模型失去区分不同类别的能力。

目的和效果

  • 这种设计的目的是使得模型在学习参数时,不仅要尽量接近正确的标签,还要明显区分错误的标签,从而增强模型对类别的辨识度。
  • 在实际应用中,特别是在有多个类别和复杂数据结构的任务中,这种方法能够有效地提高分类效果,尤其是在类别之间有较大交叉或相似性的情形。

总之,这种损失函数的设计使得学习过程不仅关注单一的标签正确性,还关注整体的类别鉴别能力,这对于提高复杂任务中的泛化能力和准确度非常有助益。

3.结果分析

在设计实用的识别系统中,虽然识别单个数字只是众多问题中的一个,但它是比较形状识别方法的绝佳基准。尽管许多现有方法结合了手工制作的特征提取器和可训练的分类器,但本研究专注于直接在大小规范化的图像上操作的自适应方法。

A. 数据库:修改后的NIST集 ,这就是现在深度学习入门必跑的MNIST

用于训练和测试本文描述的系统的数据库是从NIST的特殊数据库3和特殊数据库1构建的,包含手写数字的二进制图像。NIST最初指定SD-3作为他们的训练集,SD-1作为他们的测试集。然而,SD-3比SD-1更干净、更易于识别。这种现象的原因在于SD-3是在人口普查局员工中收集的,而SD-1则是在高中学生中收集的。从学习实验中得出合理的结论要求结果独立于训练集和测试集的选择以及全部样本集。因此,有必要通过混合NIST的数据集来构建一个新的数据库。

SD-1包含58527个由500个不同作者书写的数字图像。与SD-3中的数据块按作者顺序出现不同,SD-1中的数据是混乱的。SD-1的作者身份是已知的,我们利用这些信息来对作者进行重新排序。然后我们将SD-1分为两部分:前250位作者写的字符进入我们的新训练集。剩下的250位作者被放置在我们的测试集中。因此,我们有了两个几乎包含30000个样本的集合。新的训练集用SD-3的足够例子从模式#0开始补充,以形成一个完整的60000个训练模式的集合。同样,新的测试集用从模式#35000开始的SD-3示例补充,以形成一个完整的60000个测试模式的集合。在这里描述的实验中我们只使用了10000个测试图像的子集(5000来自SD-1和5000来自SD-3),但我们使用了全部的60000个训练样本。结果数据库被称为修改后的NIST或MNIST数据集。

原始的黑白(两级)图像经过大小规范化,以适应20x20像素箱,同时保持它们的纵横比。结果图像由于归一化算法使用的抗锯齿(图像插值)技术而包含灰度级。数据库使用了三个版本。在第一个版本中,图像通过计算像素的质心并将图像平移以使此点位于28x28场的中心来居中。在某些情况下,这个28x28场被扩展到32x32,并带有背景像素。这个版本的数据库被称为常规数据库。

在数据库的第二个版本中,字符图像被去斜并裁剪到20x20像素的图像。去斜计算像素的二阶惯性矩(将前景像素计为1,背景像素计为0),并通过水平移动线条使主轴垂直。这个数据库版本被称为去斜数据库。在第三个版本中,一些早期实验中使用的图像被缩减到16x16像素。常规数据库(60000训练例子,10000测试例子,大小规范化到20x20,并通过质量中心在28x28场中居中)可以在以下网址获得:http://www.research.att.com/yann/ocr/mnist。
请添加图片描述

图4展示了从测试集中随机挑选的例子。

B. 结果

在常规的MNIST数据库上训练了几个版本的LeNet-5模型。在每次会话中,对整个训练数据执行了20次迭代。总体学习率η(见附录C中的方程21)按以下计划逐步减小:前两轮使用0.0005,接下来三轮使用0.0002,之后三轮使用0.0001,接下来四轮使用0.00005,之后所有迭代使用0.00001。在每次迭代之前,如附录C中所描述,都会在500个样本上重新评估对角Hessian近似,并在整个迭代过程中保持不变。参数μ设为0.02。在第一轮迭代中,有效学习率在参数集上大约在7×10^(-5)到0.016之间变化。测试错误率在经过训练集大约10次迭代后稳定在0.95%。训练集上的错误率在19次迭代后达到0.35%。许多作者报告了在训练神经网络或其他自适应算法时观察到的过度训练常见现象。当过度训练发生时,训练错误会随着时间的推移而持续减少,但测试错误会在一定数量的迭代后达到最小值并开始增加。虽然这一现象非常普遍,但在我们的案例中并未观察到,如图5中的学习曲线所示。一个可能的原因是学习率保持相对较大。这样做的效果是权重永远不会在局部最小值中稳定下来,而是会随机振荡。因为这些波动,平均成本将在一个更广泛的最小值中降低。因此,随机梯度将具有类似于正则化项的效果,该项更倾向于更广泛的最小值。更广泛的最小值对应于具有大熵的参数分布的解决方案,这有利于泛化误差。

通过训练网络15000,30000和60000个样本来衡量训练集大小的影响。得到的训练误差和测试误差如图6所示。很明显,即使对于像LeNet-5这样的专门架构,更多的训练数据也会提高准确性。

为了验证这一假设,我们通过随机扭曲原始训练图像人工生成了更多的训练样本。增加的训练集由60000个原始样本加上540000个采用随机挑选的扭曲参数生成的扭曲样本组成。扭曲是以下平面仿射变换的组合:水平和垂直平移、缩放、挤压(同时进行水平压缩和垂直拉伸,或者相反)、以及水平剪切。图7显示了用于训练的扭曲样本例子。当使用扭曲数据进行训练时,测试错误率下降到0.8%(从未变形的0.95%)。使用的训练参数与未发生变形时相同。训练会话的总长度保持不变(20次过60000个样本的迭代)。有趣的是,在这20次迭代的过程中,网络实际上只会看到每个单独样本两次。

图8显示了所有82个被LeNet-5误分类的测试样本。其中一些样本确实存在歧义,但有几个样本是完全可被人类识别的,尽管它们使用的是在训练集中表述不多的风格。这表明随着训练数据的增加,可以预期有进一步的改善。

4.总结

作为深度学习领域的开山之作,本文确实为我们详细解释了卷积操作的各种基础知识。LeNet-5 作为系统的一个重要组成部分,其详细描述与实验内容非常丰富,由于篇幅原因,本章不再进行赘述。感兴趣的读者可以参考原始文献以获得更深入的理解。本节将专注于解释LeNet-5网络的具体细节。如果您在理解过程中有任何疑问,欢迎通过私信或评论与我交流,我非常期待收到您的宝贵意见。

同时,作为计算机视觉专栏的首篇文章,下一节我们将详细介绍LeNet的实现过程。如果您对此感兴趣,敬请继续关注。非常荣幸您能读到这里,希望我们能共同进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2224816.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一站式学习 Shell 脚本语法与编程技巧,踏出自动化的第一步

文章目录 1. 初识 Shell 解释器1.1 Shell 类型1.2 Shell 的父子关系 2. 编写第一个 Shell 脚本3. Shell 脚本语法3.1 脚本格式3.2 注释3.2.1 单行注释3.2.2 多行注释 3.3 Shell 变量3.3.1 系统预定义变量(环境变量)printenv 查看所有环境变量set 查看所有…

HTML3D旋转相册

文章目录 序号目录1HTML满屏跳动的爱心(可写字)2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4HTML情人节快乐

[Ansible实践笔记]自动化运维工具Ansible(一):初探ansibleansible的点对点模式

文章目录 Ansible介绍核心组件任务执行方式 实验前的准备更新拓展安装包仓库在ansible主机上配置ip与主机名的对应关系生成密钥对将公钥发送到被管理端,实现免密登录测试一下是否实现免密登录 常用工具ansibleansible—docansible—playbook 主要配置文件 Ansible 模…

centeros7 编译ffmpeg

使用yum安装的路似乎已经堵住了,请求的镜像全是404或503 1.打开终端并使用yum安装EPEL存储库(Extra Packages for Enterprise Linux):sudo yum install epel-release2.接下来,使用以下命令来安装FFmpeg:sudo yum install ffmpeg …

uniApp 加载google地图 并规划路线

uniApp 加载google地图 并规划路线 备注:核心代码实例 备注: 打开谷歌地图失败的话 参考google开发文档 https://developers.google.com/maps/documentation/urls/ios-urlscheme?hlzh-cn#swift核心代码 mounted() {this.loadGoogleMapsScript(); }, methods: {//加载loadGo…

使用 Docker 管理完整项目:Java、Vue、Redis 和 Nginx 的一站式部署

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119@qq.com] 📱个人微信:15279484656 🌐个人导航网站:www.forff.top 💡座右铭:总有人要赢。为什么不能是我呢? 专栏导…

完美解决phpstudy安装后mysql无法启动

phpstudy数据库无法启动有以下几个原因。 一、自己在电脑上安装了MySQL数据库,MySQL的服务名为MySQL,这会与phpstudy的数据库的服务名发生冲突,从而造成phpstudy中的数据库无法启动,这时我们只需要将自己安装的MySQL的服务名改掉就行。 但是&#xff0…

使用 NumPy 和 Matplotlib 进行高级数据可视化:实践指南

使用 NumPy 和 Matplotlib 进行高级数据可视化:实践指南 数据科学和工程实践中,NumPy 和 Matplotlib 是强大的组合工具。本文将进一步展示如何借助这两个库进行更复杂的可视化任务,例如创建多曲线、叠加图、动态可视化等场景。 一、环境准备…

模型训练识别手写数字(三)

1. 使用卷积神经网络(CNN)来构建模型训练 import numpy as np from keras import Sequential from keras.api.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout, BatchNormalization from keras.src.legacy.preprocessing.image import Im…

Date工具类详细汇总-Date日期相关方法

# 1024程序员节 | 征文 # 目录 简介 Date工具类单元测试 Date工具类 简介 本文章是个人总结实际工作中常用到的Date工具类,主要包含Java-jdk8以下版本的Date相关使用方法,可以方便的在工作中灵活的应用,在个人工作期间频繁使用这些时间的格…

力扣 中等 740.删除并获得点数

文章目录 题目介绍题解 题目介绍 题解 由题意可知,在选择了数组中元素 a 后,该元素以及所有等于 a−1 和 a1 的元素都会从数组中删去,并获得 a 的点数。若还有多个值为 a的元素,由于所有等于 a−1 或 a1 的元素已经被删除&#x…

Linux相关概念和易错知识点(16)(Shell原理、进程属性和环境变量表的联系)

Shell原理及其模拟实现 在认识进程exec系列函数、命令行参数列表、环境变量之后,我们可以尝试理解一下Shell的原理,将各方知识串联起来,让Shell跑起来才能真正理解这些概念。我会以模拟Shell执行的原理模拟一个Shell。途中配上相关讲解。 1…

信息安全工程师(72)网络安全风险评估概述

前言 网络安全风险评估是一项重要的技术任务,它涉及对网络系统、信息系统和网络基础设施的全面评估,以确定存在的安全风险和威胁,并量化其潜在影响以及可能的发生频率。 一、定义与目的 网络安全风险评估是指对网络系统中存在的潜在威胁和风险…

《Python游戏编程入门》注-第3章3

《Python游戏编程入门》的“3.2.4 Mad Lib”中介绍了一个名为“Mad Lib”游戏的编写方法。 1 游戏玩法 “Mad Lib”游戏由玩家根据提示输入一些信息,例如男人姓名、女人姓名、喜欢的食物以及太空船的名字等。游戏根据玩家输入的信息编写出一个故事,如图…

基于SSM的汽车客运站管理系统【附源码】

基于SSM的汽车客运站管理系统(源码L文说明文档) 目录 4 系统设计 4.1 设计原则 4.2 功能结构设计 4.3 数据库设计 4.3.1 数据库概念设计 4.3.2 数据库物理设计 5 系统实现 5.1 管理员功能实现 5.1.1 管理员信息 5.1.2 车…

详细解读Movie Gen(2):个性化视频训练

Diffusion Models专栏文章汇总:入门与实战 前言:Meta最近重磅发布了视频生成30B的基础模型Movie Gen,长达93页的技术报告中干货满满,博主将详细解读Movie Gen的核心网络结构、个性化视频微调方法、视频编辑等方面。虽然大部分人没有直接预训练30B模型的机会,但是可以从中获…

C++游戏开发中的多线程处理是否真的能够显著提高游戏性能?如果多个线程同时访问同一资源,会发生什么?如何避免数据竞争?|多线程|游戏开发|性能优化

目录 1. 多线程处理的基本概念 1.1 多线程的定义 1.2 线程的创建与管理 2. 多线程在游戏开发中的应用 2.1 渲染与物理计算 3. 多线程处理的性能提升 3.1 性能评估 3.2 任务分配策略 4. 多线程中的数据竞争 4.1 数据竞争的定义 4.2 多线程访问同一资源的后果 4.3 避…

视频剪辑新手必备:四款热门电脑视频剪辑软件评测

现在真的是一个视频流量的时代,不得不说,我都已经开始刷视频小说了!如果你和我一样,是个对电脑视频剪辑充满好奇的新手,那么你一定想知道哪款软件最适合我们这些初学者。今天,我就来和大家分享一下我使用过…

gin入门教程(10):实现jwt认证

使用 github.com/golang-jwt/jwt 实现 JWT(JSON Web Token)可以有效地进行用户身份验证,这个功能往往在接口前后端分离的应用中经常用到。以下是一个基本的示例,演示如何在 Gin 框架中实现 JWT 认证。 目录结构 /hello-gin │ ├── cmd/ …

医院信息化与智能化系统(10)

医院信息化与智能化系统(10) 这里只描述对应过程,和可能遇到的问题及解决办法以及对应的参考链接,并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图,可以试试PlantUML,告诉GPT你的文件结构,让他给你对应…