目录:
2.4.2 初步理解blob,layer,net以及solver
正文:
本章分为四个部分,整体秉承的是先讲理论再讲实践的原则。
首先,本章向大家展示一个曾经较为流行的问题:手写体数字的识别,这个问题在深度学习还没发展之前颇有难度。提出问题,肯定要解决,于是我们来到“神经网络”这个神秘事物的门口,这一节,我们初步认识神经网络,目的是要在脑中对它形成一个大体的概念。当然,仅仅知道大体的概念是不够的,我们还要更加深入,也就是这节要讲的经典网络模型:LeNet。讲完这个模型,是时候尝试实践了,我们将在最后一节中展示训练网络和测试数据的方法。
那么大体过程浏览了一遍,我们要开始进入正题。
2.1 问题定义
在人们开始学习编程时,大多数会选择从如何输出“HelloWorld”开始。同理,当我们作为新手面对深度学习这个陌生的领域时,第一个需要熟悉的就是手写体数字这个概念,以及它伴随的种种亟待解决的问题。
手写体数字识别一直是文字识别中的一个研究难题。为了便于研究,Mnist数据集被建立起来,它是由Yann LeCun主持创建的一个大型的数据库,保存着上万张的手写数字图片。这些数字图片已经进行了尺寸的标准化,并且图像均为黑底白字,其格式具有高度一致性。
如图2-1,我们可以看到Mnist数据集中的图片多种多样,这导致了对于机器来说较低的可识别性[1]。
图2-1 Mnist的部分数据
那么如此,我们便引入了一个难题——如何能够高效率、高准确率、低损耗地把这些龙飞凤舞的手写体识别出来呢?对于这个问题,人们已经发展出了很多种方法,比如基于笔划特征的算法、基于模板匹配的算法等。其中,基于笔划特征的算法是典型匹配算法的一种,包括笔迹分割和笔画匹配等步骤;基于模板匹配的算法要求于已存在的基础上建立起的标准的字符模板库,该算法将需要识别字符的特征表与已建立的模板库中的标准字符的特征表逐个比较。但这些早期的算法都需要人工设计特征提取器和分类器,也即匹配预测之前需要大量的人为设定,这导致泛化能力不够强,结果,对各类手写体的数字识别效果仍然不够理想。
在长期的进化过程中,深度学习的方法被提出,这给识别领域开辟了一个新的道路——利用神经网络原理达到目的。也就是说,在基于深度学习的概念上,我们把特征提取、预测判别这些步骤,更智能、更高度脱离人的提前设定,让机器自己琢磨出一套方法去识别图像。
那么,在以下的章节里,我们会详细介绍关于神经网络的基础知识,展现解决该问题的更高效方法。
【1】http://blog.youkuaiyun.com/simple_the_best/article/details/75267863
当人们在网上查询资料时会发现,利用深度学习知识,一张图片可以非常快速得到良好的预测效果,这个过程就像一个黑盒子,我们知道输入是图片、任务是分类、输出是预测结果,但是我们看不到里面发生了什么,也不知道那个黑盒子是什么,不要着急,后面会慢慢深入,我们先来一步步了解什么叫做神经网络。
人脑的神经细胞利用电化学过程交换信号。如图2-2所示,对于一个神经元,其它的一些神经细胞向这个神经元输入信号,当该神经元的兴奋状态基于某种规则被激发后,它会输出信号,发送到另一些神经细胞。这个过程,是信息传递里基本的单元,实际上人脑里的神经细胞的连接是复杂到不可想象的,是由高数量级的单元错综复杂地联结在一起的。
图2-2 人脑的神经系统
仿照神经元,我们直接提取出一个最简单的模型,如图2-3所示,输入信息经过神经元,被激活或者经过其它未知的处理后,输出新形式的信息。当然以下的模型肯定不能处理更加复杂的任务,所以我们要扩展模型的深度和宽度。
图2-3 提取简单的模型
理解前馈过程是理解神经网络体系的第一步。那么什么是前馈过程?把上节所说的基本处理单元“神经元”一层一层地连结在一起,形成层级结构,先理解成网络;网络的每一层神经细胞的输出都向前馈送到了它们的下一层,直到获得整个网络的输出为止,这一种类型的过程就叫前馈过程。其中,我们要着重理解到这些层级结构之间存在的联系,也即,每一层之间都有不同程度的连接,以便进行不同重要程度的信息交换。如下图2-4所示,图引自[1]
图2-4 前馈过程
一旦神经网络体系创建成功后,它必须接受训练来认出数字“1”,这个该怎么做呢?
很显然一开始这个黑盒子没有任何前期的经验积累,一次前馈过程后,预测结果会出错,说明这个模型不好,于是我们引出评估模型的说法,所使用的方法就是计算(真实值和预测值的)误差。
算得误差之后呢?别忘了我们的目标是——让网络正确的判断数字。
此时就要思考怎么让网络有更好的能力去识别图像,当然,我们有著名的反向传播来解决这点。通俗解释就是,把正确的画拿给最后一个人看(求取误差),然后最后一个人就会告诉前面的人下次描述时需要注意哪里(权值修正)。层层往回调整。当然,还是会有分类错误的情况,继续输入另一幅画,再来回一轮调整,直到最后网络输出满意为止。如下图2-5所示,引自[1]。
如此,我们就经历了一个最简单的网络形成过程,但是仅仅是知道大致概念还不行,下面我们将通过引入一个典型的深度卷积神经网络(Convolutional Nerual Network,也称CNN)模型来进行更细节的解剖。
图2-5 反馈过程
[1] http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML16.html
我们来到了CNN的结构剖析部分,在本节会全面介绍网络结构以及其中重点的知识解释,以便于以后更好的理解模型和使用模型解决问题。
如图2-6所示,这个网络结构是很早出现的,在神经认知机的概念提出后,LeNet横空出世,掀起一代深度学习浪潮。虽说网络结构的设计是很早之前,但其仍具有典型意义。图中我们可以看到这个网络中有两种层重复出现,一般形式为卷积层叠加下采样,这样的一套流程用于提取更高维特征。
经过两次卷积与下采样的处理后,输出的高维表达在两个全连接层里进行的整合,最后输出一个一维向量,表达预测结果。
图2-6是它的大概流程,下面来看每一层的具体情况,图引自[1]。
图2-6 卷积神经网络示例
首先,我们来看一下卷积网络中最重要的一种处理单元,卷积层。在理解卷积层之前,我们还需要知晓一些必要的基础知识。
如图2-7所示,对于数字图像中的像素表达,一般