[神经网络]1.1-Using neural nets to recognize handwritten digits-Perceptrons(翻译)

原文地址:http://neuralnetworksanddeeplearning.com/chap1.html

人类的视觉系统是世界的奇迹之一。考虑下面的手写数字的序列:
这里写图片描述

大多数人可以毫不费力的认识出这串数字是504192。这种安逸是骗人的。在大脑的每一个半球中,人类有一个初级视觉皮层,也称为 V1 ,包含1.4亿个神经元,数百亿它们之间的连接。然而人的视觉不仅仅有 V1 ,还有一系列的视觉皮层 V2 , V3 , V4 V5 做更复杂的图像处理。我们的大脑是一台超级计算机,他进化了数百万年,非常适应和了解视觉世界。识别手写数字并不简单。相反,我们人类是惊人的,令人惊叹的是我们擅长呈现出眼前所显示的现象。但几乎所有的工作都是在不知不觉中完成的。因此,我们通常不明白诗句系统是如何解决问题的。

如果你试图编写一个计算机程序去识别上述的数字的难度就变得很明显。看起来很简单的问题,突然变得很复杂。一个简单的直觉关于如何识别“9”?“上部有一个圈,右下有一个竖着的1”。变得不那么简单表达算法。当你试图让这些规则精确,你很快就会迷失在一大群的例外和特殊情况中。因此这样做,似乎没有希望。

神经网络以不同的方式解决了这一个困难,这个办法需要大量的手写数字,也称为训练样本,这里写图片描述
然后我们从这些训练样本得到一个系统。换句话说,神经网络用这些训练样本自动推断出识别手写数字的规则。进一步说,随着训练样本的增多,建立的网络将越来越精确的去识别手写数字。因此虽然我已经只有100位数以上的训练,也许我们可以用数千甚至数百万或数十亿的训练实例建立一个更好的手写识别器。

在这一章中,我们将编写一个计算机程序去实现一个可以识别手写数字的神经网络。程序仅仅有74行,并且没有利用特殊的库。但是在没有人为干预的情况下,这个短小的程序识别手写数字的准确性只有96%。进一步的,下一张我们将用另外一种方式,识别率能够达到99%。事实上,最好的商业神经网络现在很好,被银行用来处理支票,并通过邮局来识别地址。

我们专注于手写识别,因为它是学习神经网络的一个很好的原型问题。作为一个原型,它击中了一个甜蜜点:这是具有挑战性的-这是不小的壮举,以识别手写数字-但它并没有那么困难,需要一个非常复杂的解决方案,或巨大的计算能力。此外,它是一个伟大的方式来发展更先进的技术,如深度学习。在这本书中,我们会反复地回到手写识别问题。在这本书的后面,我们将讨论如何将这些思想应用于计算机视觉中的其他问题,以及在语言、自然语言处理和其他领域中的应用。

当然,如果这一章的重点是写一个计算机程序来识别手写体数字,那么这一章将大大缩短!但一路上我们会开发出许多神经网络的核心思想,包括2类重要类型的人工神经元(感知器和sigmoid神经元),以及神经网络的标准学习算法,称为随机梯度下降法。在整个,我专注于解释事情是这样做的方式的原因,和建立神经网络的直觉。这需要一个比我仅仅提出了怎样的基本技术冗长的讨论,但它的更深的理解,你会获得是值得的。通过本章的最后我们将能够理解深度学习是什么,以及为什么它很重要。

感知机

什么是神经网络?开始我会解释一种叫做“感知机”( Perceptron)的人工神经网络类型。在50年代和60年代,Frank Rosenblatt在Warren McCulloch与 Walter Pitts的工作中得到灵感,提出了“感知机”。如今,使用其他的人工神经元模型更为普遍。在这本书中,在许多现代神经网络的研究中,主要的神经网络模型是一种叫做sigmoid神经元的神经网络模型。我们将很快到达sigmoid神经元。但为了搞懂Sigmoid神经元的定义,应当先了解感知器,这是值得的。

那么感知机是如何工作的?感知机将输入一些二元串 x1,x2,...... ,并且产生一个单独的二元输出:
这里写图片描述

在上面的例子中,我们有3个输入 x1,x2,x3 。一般情况下,可以有更少或更多的输入。 Rosenblatt提出了一个简单的规则去计算输出。他引入了 weights , w1,w2,..., 实数表达的输入的权重。神经元的输出是0或者1,它的值取决于权重和 jwjxj 和阀值大小的关系。和 weight 一样,阀值也是神经元的参数。用更加精确的术语描述如下。

output={01ifjwjxjthreshold ifjwjxj>threshold (1)

这些就是感知机工作的方式。

这是基本的数学模型。一种你可以思考感知机的方式是,它是一种通过权衡证据来决定的。让我举个例子,这不是一个非常现实的例子,但很容易理解,我们很快就会得到更现实的例子。假设周末的到来,你听说你的城市将有一个奶酪节。你喜欢奶酪,并试图决定是否去节日。你可以通过权衡三个因素来决定你的决定:

1.天气是否好?
2.男/女朋友是否会陪你一起去?
3.公共交通到达是否方便(你没有车)?

我们将这三个参数设置为三个二元输入参数 x1,x2,x3 。例如,天气好意味着 x1=1 , x1=0 代表天气不好。同理, x2=1 代表对象陪你去, x2=0 代表不陪你去, x3 亦如此。

现在,假设你绝对喜欢奶酪,以至于不管你对象去不去以及交通是否方便,你都会乐意去参加节日。但也许你真的讨厌坏天气,又或者如果天气不好,你没有任何办法去节日。你可以使用感知器模型去做决策。一种方式去做是选择天气权重 w1=6 、其它条件的权重 w2=2 ,权重 w3=2 。这说明了天气的影响因素是最大的。最后,假定感知机的阀值是5。在这些条件下,感知机就实现了理想决策模型。天气好输出1,不好输出0。无论你的男朋友或女朋友想走,或是在附近的公共交通,这对你的输出没有什么区别。

通过调整阀值和权重,我们可以得到不同的决策模型。比如,假设我们可以选择阀值为3。然后感知机会决定你应该去参加这个节日,无论天气是好还是是不好的、你的男朋友或女朋友是否愿意。换句话说,它是一个不同的决策模型。降低阀值意味着你更愿意去节日。

显然,感知不是人类决策的一个完整模型!但是,举例说明的是如何一个感知可以衡量不同种类的证据,以作出决定。这应该是合理的,一个复杂的网络感知器可以非常微妙的决定:
这里写图片描述

在这个神经网络,第一列感知器通过输入做出第一层决策。关于第二层感知器?每个人的感知是通过权衡的结果,从决策的第一层决策。这样,在第二层感知器可以在比第一层感知器更复杂、更抽象的层次上作出决定。甚至更复杂的决定,可以由感知的第三层。这样,许多感知层网络可以从事复杂的决策。那么第二层呢?根据第一层的结果作为输入来做决定。这样,在第二层感知器可以在比第一层感知器更复杂、更抽象的层次上作出决定。甚至可以由感知的第三层做出决定。这样,一个多层的神经元网络可以可以从事复杂的决策。

顺便说一句,当我说,我定义的感知器感知器都是单输出。在网络上面的感知器看起来有多个输出。事实上,他们仍然是单一输出。多输出箭头仅仅是表明从感知器的输出作为其他几个感知器输入的有效途径。因为绘制一条输出线显得太笨拙,所以将其分裂来画。

让我们简化我们描述感知的方式。条件 jwjxj>threshold 是很笨拙的,我们简化它。第一次改变是将 jwjxj 改成 wx ,这里 w x是向量分别代表着权重和输出。另外一个改变就是将 threshold 移到不等式的另一侧,并且用偏见 b d代替,因此感知机可以重写为

output={01 if wx+b0 ifwx+b>0 (2)

你可以把这种偏见当作衡量一个感知到输出1的方法的一个衡量指标。或者把它放在更多的生物方面,这种偏见是衡量一个感知到火的容易的一个方法。对于一个真正的大偏差的感知,它是非常容易的感知到输出1。但如果偏差是非常不利的,那么很难感知输出1。显然,引入偏差是一个小的变化我们如何描述感知,但是后面我们会看到,它会导致更多的符号的简化。因为这样,在剩下的书中我们不会使用阀值,我们永远都会使用这种偏见。

我已经描述了感知器作为称重的证据决策方法,可以用另一种方式去感知计算的基本逻辑功能
另一种方式感知可以是计算潜在的逻辑功能,比如AND、OR和NAND。例如,假设我们的感知机有有两个输入,每个权重为−2以及和3的总偏差。我们的感知机如下:
这里写图片描述
然后我们发现,输入00得到输出为1。因为 (2)×0+(2)×0+3=3 是正数。同理可以发现,输入01和输入10的输出都是1,但是输入11的输出是0,因为 (2)×1+(2)×1+3=1 是负数。所以我们的感知器实现了与非门!

与非门的例子表明,可以用感知机去计算一些简单的逻辑功能。事实上,我们可以用神经网络去计算所有的逻辑功能。因为与非门是通用计算,也就是说,我们可以建立任意的计算在与非门的基础上。例如,我们可以用与非门建立电路增加2位, x1 x2 。这需要计算比特位和, x1x2 。也进位设置为1当 x1 x2 都是1时,即,进位取决于 x1 x2 的乘积:
这里写图片描述


为了得到等价的的感知机,我们用2个输入权重都为-2,和偏见都为3的神经网络代替与非门。下图展示了最后的网络。注意这里我们移除吊了那些数字,如下: 这里写图片描述
这个网络的感知机值得注意的是,从最左边的感知器的输出是使用两次输入到下面的感知器。当我定义感知模型时,我不说这种双输出是否允许相同的位置。事实上,这并没有关系。如果我们不想让这种事情发生,我们可能去简单的合并2条线成单一的连接,即用一个-4的权重而不是2个-2的权重去代替(如果你不觉得这很明显,你应该停下来,向自己证明这是等价的)。随着这些变化,网络看起来如下,所有没有标记的权重等于2,偏见等于3,和一个单权重-3。如下:
这里写图片描述
到现在为止,我一直将如 x1 x2 作为一个输入参数画在网络的左边。事实上,传统的输入层应该对输入进行编码,如下:
这里写图片描述
这个符号输入感知器,其中我们有一个输出,但是没有输入。
这里写图片描述
它实际上并不意味着一个没有输入的感知机。为了证明他,假设我们有个没有输入的感知机,且权重和 jwjxj 将一直是0,且如果 b>0 ,感知机输出1,否则感知机输出0。也就是说,感知机的输出不依赖于输入。这是更好地考虑输入感知器是不是真的被感知的一切,而是特殊单元,简单的定义为输出的期望值, x1,x2,...

加法器的例子演示了一个网络感知器如何模拟包含许多与非门的电路,因为NAND门通用的计算,因此,感知器也通用计算。

感知机的普遍性既让人欣慰也让人失望。欣慰的是,它告诉我们,感知机可以像其他计算设备一样强大。失望的是,因为它似乎只是一个新的与非门感知机。那几乎是大新闻。

然而,情况会比上面说的好。它被证明可以用来设计学习算法,可以自动调整权重和偏差的人工神经元网络。这种调整发生在响应外部刺激,不由程序员直接干预。这些学习算法使得我们使用彻底不同于传统逻辑门的人工神经元。而不是明确地铺设一个与非门电路或者其他门等,我们的神经网络可以简单地学会解决有时很难直接常规电路设计的问题。

[下一篇:笔者将翻译本章下一节]

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值