利用神经网络识别手写数字
神经网络 人工智能 利用神经网络进行手写数字识别 入门2017/11/19第一章:利用神经网终识别手写数字| tensorfly2白3团团Z图820团匕团的d团8岛DS然后开发出一套从训练样本中进行学习的系统。换句话说,神经网络使用样本来自动推理出识别手写数字的规则。此外,通过增加训练样本规模,神经网终能学到于写体的更多规则从而提升它的识别精度因此在我们像上面一样只有100张训练数字同时,有可能我们能通过成千上万更多的训练样本来构建更好的手写识别算法。本章我们将编写一段计算机程序来实现一个能识别手写数字的神经网络。这个程序大概有74行,而且没有使用其他特别的神经网络库,但是这段程序能够具有96%的数字识别精度,而且没有人工干预。此外,在后面的章节中我们将改进算法达到99%以上的精度。实际上,最好的商业神经网络已经很好的应用在银行支票处理以及邮局识别地址等。我们专注在手写体识别是因为它是一个很好的学习神经网络的原型问题。做为一个原型,它刚好合适:识别手写数字是一个挑战,不是那么容易,而它也不需要一个极其复杂的方案或者巨大的计算能力。此外,它也是开发更多高级技术的好方法,比如深度学习。因此整木书我们将不断重复回到手写识别这个问题。这本书的后面,我们将讨论这些算法思想如何应用到计算机视觉的其他问题,还包括语言识别、自然语言处理和其他领域。当然,如果本章只是写一个识别手写数字的计算机程序,那么将非常短小!在编写过程中,我们将介绍很多神经网终的关键思想,包括人工神绎网络的两大类别(感知器和 Sigmoid神经元)以及神绎网络标准学习算法,即随机梯度下降。整个过程我们将关注在闻述为什么这样处理是有效的,从而让你构建起神经网络直觉。这比只陈述基础的机制更加冗长,但这对更深入理解所学到的内容是值得的。在这些收获上,本章结東你将明白深度学习是什么,且它为什么这么重要。http://www.tensorfly.cn/home/?p=803/522017/11/19第一章:利用神经网终识别手写数字| tensorfly感知器( Perceptrons)什么是神经网络?在开始之前,我将介绍一种人工的神经元,即感幻器( perceptron)。感知器是由 Frank rosenblatt在上世纪50到60年代发明的,灵感来源于 Warren Mcculloch和 Walter pitts的早期工作。今天人工神经网络使用吏加通用的其他模型,本书以及许多现代的神经网络工作中,主要的神经网络模型是 sigmoid神经元。我们将很快讨论 sigmoid神经元,但是为了更好了解它的原理,我们首先要理解感知器。那么感知器如何工作呢?一个感知器获取几个二进制输入1,2,.,并且产生个二进制数出:output在这个例子中,感知器具有三个输入1,2,x3。通常它会具有更多或更少的输入。 Rosenblatt提出了一个简单规则来计算最后数出。他引入了权 weights)1,w2,,这些实数表示各个输入对输出的重要性。这个神经元输出( output)0或者1是由这些输入的加权求和∑;vx;是否大于或者小于某一个阈值( threshold)。不像这些权重,阈值是这个神经元的实数参数。将它们放入更加精确的代数术语中:0f∑;u;x;< thresholdoutputif∑;> threshold这就是一个感知器如何工作的全部内容!这是一个基础的数学模型。你可以这么理解感知器,它是一个通过加权凭据来进行决策的设备。让我们来看这个例子,可能它不是一个真小∴日↓了工在http://www.tensorfly.cn/home/?p=804/522017/11/19第一章:利用神经网终识别手写数字| tensorfly头的例子,但非芾好理解,归曲找们付很伏进人其头的例子。假周末到了,你听说在你所在的城市将有一个奶酪芍,你很喜欢吃奶酪,并且正决定是否要去参加这个节日,你可能会通过以下三个方而来权衡你的决定1.天气好吗?2.你的男(女)朋友是否愿意陪你去?3.是否这个活动距离公共交通很近?(你自己没车)我们将这三个因素用对应的二进制变量x1,x2和x3表示。比如,当天气还不错时,我们有c1=1,天气不好时x1=0;相似的,如果男或女朋友愿意去,c2=1,否则2=0;对于公共交通3同理赋值。现在假设奶酪是你的最爱,以致于即便你的男或女朋友不感兴趣而且去那里也不太方便,你仍然非常想去参加这个节日活动。但是也许你真的讨厌坏天气,而且如果天气很糟,你也没办法去。你能使用感知器来模拟这类决策。一种决策方式是,让天气权重w1=6,其他条件权重分别为u2=2,u3=2。重1值越大表示天气影响最大,比起男或女朋友加入或者交通距离的影响都大。最后,假设你选择5做为感知器阈值,按照这种选择,这个感知器就能实现这个决策模型:当天气好时候输出1,天气不好时候输出0,无论你男或女朋友是否愿意去,或者交通是否比较近通过更改权重和阈值,我们能得到不同的决策模型。例如,我们将阈值设为3,那么感知器会在以下条件满足时决定去参加活动:如果天气很好、或者男(女)朋友愿意去并且交通很近。换句话说,它将是决策的不同模型,阈值越低,表明你越想去参加这个节日活动显然,这个感知器不是人类决策的完整模型!但是这个例子说明了个感知器如何能将各种凭据进行加权和来制定决策,而且一个复杂的感知器网络能做出非常微妙的决策:http://www.tensorfly.cn/home/?p=805/522017/11/19第一章:利用袢经网终识别手写数字| tensorflyinputsoutput在这个网络中,第一列感知器(我们称其为第一层感知器)通过加权输入凭据来做出三个非常简单的决策。那第二列感知器是什么呢?其巾每一个感知器都是通过将第一列的决策结果进行加权和来做出自己的决策。通过这种方式,第二层感知器能够比第一层感知器做出更加复杂和抽象层的决策。第三层感知器能做出更加复杂的决策,以此类推,更多层感知器能够进行更加复杂的决策顺便说一句,当我们定义感知器时,它们都只有一个输出。但上面的网络中,这些感知器看上去有多个输出。实际上,它们也仍然只有一个输出,只不过为了更好的表明这些感知器输出被其他感知器所使用,因此采用了多个输出的箭头线表小,这比起绘制一条输出线然后分裂开更好一些让我们简化描述感知器的方式。加权求和大于阈值的条件∑;3;> threshold比较麻烦,我们能用两个符号变化来简化第一个改变是将∑;0改写成点乘方式,m·2=∑1),其中u和分别是权重和输入的向量。第二个改变是将阈值放在不等式另一边,并用徧移b≡- threshold表示。通过使用偏移代替阈值感知器规则能够重写为:output=0ifn:m+b≤0ifu·x+b>0你可以将偏移想象成使感知器如何更容易输出1,或者用更加生物学术语,偏移是指衡量感知器触发的难易程度。对于一个大的偏移,感知器更容易输出1。如果偏移负值很大,那么感知器将很难输岀1。显然,引入偏移对于描述感知器改动不大,但是我们后面将看到这将简化符号描述。正因如此,本书剩下部分都将使用偏移,而不是用阈http://www.tensorfly.cn/home/?p=806/522017/11/19第一章:利用神经网终识别手写数字| tensorfly值我们已经介绍了用感知器,基于凭据( evidence)的加权求和来进行决策。感知器也能够被用米计算基本逻辑函数,像AⅦ,OR, and na№D这些通常被看做是实现计算的基础。比如说,假设我们有一个两个输入的感知器,每个输入具有权重-2,整个偏移为3,如下所示感知器123那么我们将看到输入00公产生输出1,因为(-2)*0+(2)*0+3=3是正数。这里,我们引入*符号来进行显示乘法。与此类似,输入01和10都将产生输出1。但是输入11将产生输出0,因为(-2)*1+(-2)*1+3=-1是负数。因此这个感知器实现了一个NAND门!这个NAND门例子表明我们能够使用感知器来计算简单的逻辑函数。实际上,我们能够使用感知器网络来计算任意的逻辑函数。原因是NAND门在计算中是通用的,也就是,我们能够用一些NAND门来构造任意计算。比如,我们能够用NAND门来构建两个二进制变量x1和x2的位加法电路。这需要对它们按位求和a1+x2,同时当x1和x2都是1时候进位1。进位就是x1和x2的按位乘:1sum:r1⊕x242carry bit: 1 2为了得到相冋的感知器网络,我们将NAND门用具有两个输入的感知器代替,每一个输入具有权重-2,整体具有偏移3。以下是感知器內络结果,注意我们把右下角的NAND门对应的感知器向左移动了一点,以http://www.tensorfly.cn/home/?p=807/522017/11/19第一章:利用裤经网终识别手写数字| tensorfly便绘制图表中的箭头1sum:1carry bit: 1.o值得注意的是,这个感知器网络中最左边的感知器输出被右卜角的感知器使用了两次。当我们定义感知器模型时,我们说这种双信输出到同一个感知器是不允许的。实际上,这没什么关系,如果我们不允许这种情况,只需要把这两条线合并成条线,并且将权重设置为-4即可。(如果不这么认为,那么你需要停下来并证明一下它们等同性)在这点小改变后,感知器网络如下所示,没有标签的权重为-2,所有偏移为3,唯一权重为-4的边进行了标记:1sum:1a2carry bit:122直到现在,我们将变量输入1和c2绘制到感知器网络的左边。实际上,更变的应该绘制一层额外的感知器—一输λ层( (input layer)来编码输入:1sum: 1 2carry bit: 132这个只有一个输出,没有输入的输入感知器,1http://www.tensorfly.cn/home/?p=808/522017/11/19第一章:利用神经网终识别手写数字| tensorfly是一个简写。这么看,假设我们有一个没有输入的感知器,那么权重和∑1012;将始终为0,那么如果偏差b>0,感知器将输出1,则输出0。也就是,这个感知器将简单的输出一个固定的值,而不是希望的值(如上面的例子中∞1)。更好的理解输入感知器可以将其不当作感知器,而是一个简单定义期望值1,x2,输出的特殊单元。这个加法器例子演示了感知器网络能够模拟具有许多与非门的电路并且由于与非门对于计算是通用的,因此感知器也是对计算通用的。感知器的计算通用性同时让人满意,也让人失望。它让人满意是因为感知器网络能够像其他计算装置那么强大,但是也是让人失望是因为它看起来只是一种新的与非门,不是什么大新闻!不过,情况比这个观点更好一些。它能够让我们设计学习算法,这种算法能够自动调整人工神经网络的权重和偏移。这会在响应外部刺激时候发生,而且没有程序员的直接干预。这些学习算法能让我们用种新的方式使用人工神经网终,它将与传统的逻辑门方法完全不同替代显示的摆放一个具有与非门和其他门的电路,我们的神经网络能够学会简单地解决这些问题,有些问题对于直接设计传统电路来说非常困难Sigmoid神经元学习算法听起来好极了。但是我们如何对一个神经网终设计算法。假设我们有个想通过学习来解决问题的感知器网络。比如,网络的输入可能是一些扫描来的手写数字图像原始像素数据。且我们希望这个网络能够学会调权和偏移以便正确的对它们进行数字分类。为了看到学习如何进行,假设我们在网络中改变一点权重(或者偏移)。我们希望很小的权重改变能够引起网络输出的细微改变。后面我们将看到,这个特性将使学习成为可能。以下示意图就是我们想要的(显然这个网络对于手写识别太简单!):http://www.tensorfly.cn/home/?p=809/522017/11/19第一章:利用神经冈终识别手写数字| tensorflysmall change in any weight (or bias)causes a small change in the output+△aoutput+△ output如果权重或者偏移的细小改变能够轻微影响到网络输岀,那么我们会逐步更改权重和偏移来让网终按照我们想要的方式发展。比如,假设网络错误的将数字“g”的图像识别为“8”,我们将指出如何在权重和偏移上进行细小的改动来使其更加接近于“g”。( tensorfly.cn社区原创)并且这个过程将不断重复,不断地改变权重和偏移来产生更好的输出。于是这个网络将具有学习特性。问题是在我们的感知器网络中并没有这样发生。实际上,任何一个感知器的权重或者偏移细小的改变有时都能使得感知器输出彻底翻转,从0到1。这种翻转可能导致网络剩余部分的行为以某种复杂的方式完仝改变。因此当“g”可能被正确分类后,对于其他图片,神经网络行为结果将以一种很难控制的方式被完全改变。这使得很难看出如何逐渐的调整权重和偏移以至于神经网络能够逐渐按照预期行为接近。也许对于这个问题有一些聪明的方式解决,但是日前如何让感知器网络学习还不够清楚。我们能通过引入一种新的人工神经元( sigmoid神经元)来克服这个问题。它和感知器类似,但是细微调整它的权重和偏移只会很细小地影响到输出结果。这就是让 sigmoid神经元网络学习的关键原因好的,让我们来描述下这个 sigmoid神经元。我们将用描绘感知器样来描绘它:http://www.tensorfly.cn/home/?p=8010/52
用户评论