人类的视觉习惯是一个神奇的世界。考虑下面的手写数字:
大部分人可以轻松认出这些数字是504192。这种轻松是虚假的。在我们大脑的每一个半球,人类拥有一个初级视觉皮层,被称为V1,包含1亿4千万个神经元,它们之间有10亿多个连接。然则人类的视觉系统不仅包含V1,它有一整套体系的视觉皮层——V2,V3,V4和V5——逐渐做越来越复杂的图像处理工作。我们脑袋里装了一台超级计算机,经过几百亿年进化的调整,现在已经非常适应去理解视觉世界。识别手写数字不简单,当然,我们人类是伟大的,令人惊奇地擅长搞清眼睛看到东西的意思。但是几乎所有这些工作是无意识的。因此我们通常不会赞赏我们的视觉系统解决了多么困难的问题。
如果你尝试写一个程序去识别像上面那样的数字时,你会发现视觉模式识别是如此困难。看上去很简单,但当我们自己去做的时候突然发现如此困难。我们识别图形的简单直觉——“9上面有一个圆圈,下面有一个靠右的竖线”——最后的结果是无法如此简单的表达算法。当我们尝试去使用实践这些规则时,你将马上掉进异常、警告和特例的大坑里。看上去简直绝望。
神经网络使用不同的方式对待此问题。这种方法是获取大量手写数字,称之为训练样本,
然后再开发一个能从训练样本里学习的系统。也就是说,神经网络使用样本自动推断出识别手写数字的规则。此外,通过增加训练样本的数量,网络可以学习更多的手写体,并提高其准确率。所以上面我们只是展示了100个训练数字,或许我们可以通过使用成千上万甚至亿计的训练样本构建更好的手写识别器。
这一章我们将编写程序实现一个学习识别手写数字的神经网络。这个程序只有74行,不使用特殊的神经网络库。但这个简短的程序在无人监督的情况下,识别数字的准确率超过96%。此外,下一章我们将开发能使准确率提高到超过99%的方法。实际上,现在商业神经网络已经被用于银行的支票处理和邮局的地址识别。
我们关注手写识别是因为通常它被认为是学习神经网络非常好的原型问题。做为原型它具备以下几个特点:有挑战性——识别手写数字是一个不小的成就——但没有难到需要非常复杂的解决方案或者巨大的计算力。此外,它还可以拓展到更先进的技术,像深度学习。因此手写识别问题将在整本书中多次重复提到。后面,我们将讨论这些方法如何应用于计算机视觉、讲话、自然语言处理和其他领域。
当然,如果这一章只是写一个识别手写数字的程序,那么这一章将非常短!所以我们顺便说一下关于神经网络的几个关键问题,包括两种重要的人工神经元(感知机和sigmoid神经元【Sigmoid神经元】),还有神经网络的标准学习算法——随机剃度下降算法。贯穿全书,我将着重解释为什么事情使用这样的方法来处理,并建立你对神经网络的直观理解。这比只讲一些基础理论然后自行研究要花费更多的讨论,但相对于深入理解后的收获这将是值得的。通过不懈努力,我们将在本章的最后指出深度学习是什么,它为何如此重要。