声明:本书核心内容来自于开源书《Neural Networks and Deep Learning》。Michael Nielsen 撰写,由leoay整理翻译。译者水平有限,不到之处请指教!欢迎留言,评论! 原文请戳

使用神经网络进行手写数字识别

人类的神经系统是世界的一个奇迹。
看一下下面一行手写数字:

绝大部分人都能毫不费力地认出是 504129。但是这种简单具有欺骗性。在我们大脑的每个半球,都有一个初级视觉皮层,叫做V1,它包含1.4亿的神经元,而它们之间有几十亿的连接。然而,人类的视觉不仅仅包括V1, 还包括一系列的视觉皮质 – V2、V3、V4和V5它们正做着越来越复杂的图像处理任务。我们的脑袋里装有一台超级计算机,经过数亿年的进化,我们的大脑得到了完美的调整,以适应视觉世界。识别手写数字不是那么容易。当然,我们人类惊人地擅长理解我们的眼睛向我们展示的内容。但是几乎所有的工作都是无意识的。所以我们通常不会意识到我们的视觉系统解决了一个问题。

如果你试图写一个计算机程序来识别上面的数字,那么视觉模式识别的难度就会显而易见了。看似容易,但是当我们亲自做的时候就变得相当困难了。关于怎么识别形状,简单的直觉告诉我们 – 数字”9”的上面有一个小圈圈,然后右下方有一个竖, 事实证明,这用算法很难表达。当你试图精确地制定这些规则时,你很快就会迷失在异常、警告和特殊情况的泥沼中。这看起来很无望。

而神经网络以不同的方式处理这个问题。思路就是收集大量手写数字,也就是所谓的训练样本(如下图所示),然后开发一个能够从这些训练样本中学习的系统。

换句话说,神经网络使用这些例子来自动推断识别手写数字的规则。此外,通过增加训练样本的数量,网络可以了解更多关于笔迹的知识,从而提高其准确性。所以当我在上面展示了100个训练数字的时候,也许我们可以用成千上万甚至上百万的训练例子来建立一个更好的手写识别器。

在这一章节,我们将会写一个计算机程序实现一个神经网络来学习识别手写数字。这个程序仅仅74行,而且没有使用一些神经网络库(完全从“零”写一个神经网络,目前大多数神经网络框架都帮助我们完成了基础的计算任务),但是这个小巧的程序在没有人类干预的条件下,能够达到超过96%的精确度。而且,在后续章节我将会提出一些改进思路,能将精确度提升至99%。。事实上,最好的商业神经网络现在已经很好了,它们被银行用来处理支票,通过邮局来识别地址。

我们关注于手写数字识别,因为对于学习神经网络,它是一个很好的原型问题。作为一个原型问题,它处于一个最佳位置:它具有挑战性 ———— 识别手写数字是一个不小的壮举,但是这并不难,需要一个极其复杂的解决方案,或者巨大的计算能力。此外,这是一种开发更高级技术(比如深度学习)的好方法。所以在这本书中,我会反复提及手写数字识别问题。在本书的后面一些部分,我们还将讨论这些想法如何应用于计算机视觉的其他问题,以及语音,自然语言处理,和其他领域。

当然,如果这一章的目的仅仅是写一个计算机程序来识别手写数字,那么这一章就没必要那么长的篇幅了。然而,在这个过程中,我们还会讲解许多关于神经网络的重要概念,包括两种重要的人工神经元(感知机和Sigmoid神经元),神经网络的标准学习方法 ———— 随机梯度下降(SGD)等。至始至终,我都会专注于解释为什么要这样做,或那样做,以这种方式建立你的神经网络直觉。当然,这比我仅仅描述这些内容的基本原理要花的时间长,但是我相信这是很值得的,因为你能获得更加深刻的理解。付出终有回报!学习完本章,我们将能理解什么是深度学习,以及它为什么那么重要!