英语原文共 13 页,剩余内容已隐藏,支付完成后下载完整资料
人类的视觉系统是世界的一大奇迹。
大多数人可以不费力地认出数字“504192”。这种容易却是具有欺骗性的。在我们人类大脑的每个半球里,都有一个主视皮层,也称为v1,里面含有1.4亿神经元,在他们之间有数百亿的连接。但是人类视觉不仅涉及v1,而是涉及整个系列的视觉皮层—v2,v3,v4和v5—逐渐更复杂图像处理。我们的大脑就像一个超级计算机,经过数亿年的调整演进,已经能够非常适应了解视觉世界。识别手写数字并不简单。然而,我们人类是伟大的,在弄清楚我们看到的事物方面惊人的擅长。但几乎所有的工作是在不知不觉中完成的,所以我们通常不会感受到我们的视觉系统是如何艰难的解决一个问题。
如果你试图写一个计算机程序来识别如上所述的数字,视觉模式识别的困难程度就显而易见了。看起来很容易的事情,当我们开始做的时候就会变得非常困难。关于我们如何识别形状的简单直觉 :“9在顶部有一个循环,在右下角有一个垂直的笔触”看来,用算法表示并不是那么的简单。当你试图让这些规则变得精确,你很快就会迷失在一个例外、告诫和特殊情况造成的混乱之中。这看起来毫无希望。
神经网络用不同的方法来处理这个问题。这个方法是用被称为训练样本的大量手写数字,形成一个可以从这些训练样本中学习的系统。换句话说,神经网络用样本来自动推断识别手写数字的规则。此外,通过增加训练样本的数量,神经网络可以更好的学习,从而提高其准确性。所以尽管上面我只显示了100个用于训练的数字,但也许我们可以通过使用数千甚至数十亿的训练样本来构建一个更好的手写识别器。
在本章中,我们将编写一个实现神经网络的计算机程序来学习识别手写数字。该程序只有74行,并没有使用特殊的神经网络库。但这个小程序可以识别数字的精度超过96%,无需人为干预。此外,在后面的章节中,我们将提出能够将精度提高到99%以上的方法。事实上,最好的商业神经网络现在是如此之好以至于他们被银行用来处理支票、通过邮局来识别地址。
我们将注意力集中在手写识别,因为它是一个能够大致了解神经网络的不错的原型问题。作为一个原型,它有一个不错的点:它是具有挑战性的——它不是只需要几步就可以识别手写数字——但获得一个非常复杂的解决方案或巨大的计算能力,它又不是那么困难。此外,开发更先进的技术,如深度学习是一个不错的想法。因此在整本书中,我们将反复回到手写识别的问题。在本书的后面,我们讨论如何将这些方法应用到计算机视觉中的其他方面,以及语音、自然语言处理和其他领域。
感知器
什么是神经网络?为了开始,我将解释一种被称为感知器的人工神经元。感知器由科学家Frank Rosenblatt在20世纪50年代和60年代开发,其灵感来自Warren McCulloch和Walter Pitts的早期工作。今天,常见的是使用人工神经元的其他模型——在这本书中,以及在神经网络的许多现代工作中,使用的主要神经元模型是被称为sigmoid神经元的模型。我们可以很快得到sigmoid神经元。但为了了解什么是sigmoid神经元,所以值得我们花些时间来首先理解感知器。
感知器是如何工作的呢?一个感知器由几个输入x1、x2hellip;hellip;,产生单个输出:
在所示的示例中,感知器具有三个输入,x1、x2、x3。通常它可以具有更多或更少的输入。 Rosenblatt提出了一个简单的规则来计算输出,他引入权重w1、w2、w3hellip;hellip;,表示相应输入对输出的重要性的实数。通过加权和与某个阈值的关系来确定神经元的输出为0或1。就像权重一样,阈值是作为神经元参数的实数。用数学来表达为:
上面就是感知器如何工作的!
这是基本的数学模型。你可以想象感知器的一种方式是,它是一个通过权衡证据做出决定的设备。举个例子,它不是一个非常实际的例子,但它很容易理解,我们将很快得到更实际的例子。假设周末即将到来,你听说你所在的城市将会举办一个奶酪节。你喜欢奶酪,并试图决定是否去参加这个节日。你可以通过权衡三个因素来做出决定:
1 天气好吗?
2 你的男朋友或者女朋友是否会陪你去呢?
3 举办这个节日的附近是否有公交站?(你没有自己的车子)
我们可以通过相应的二进制变量x1,x2和x3来表示这个三个因子。例如,如果天气良好,则x1=1;如果天气不好,则x1=0。 x2、x3分别表示男朋友或女朋友陪你去、附近是否有公交站,其表示方法同x1。
现在,假设你特别喜欢奶酪,所以,你很高兴去参加这个节日,即使你的男朋友或女朋友不感兴趣,节日的地点很难到达。但也许你讨厌恶劣的天气,如果天气不好,你没有办法去参加节日。你可以使用感知器来构建这个决策模型。第一步是为天气设置权重:w1 = 6,对于其他条件,选择w2 = 2和w3 = 3。 w1的值越大表示天气对你很重要,远远超过你的男朋友或女朋友是否陪同你,还是公交站的远近。最后,假设您为感知器设置阈值为5。通过这些设置,感知器完成了预想的决策模型,当天气良好时输出1,当天气恶劣时输出0。而无论你的男朋友或女朋友是否陪你去,还是公交站的远近,都对输出没有影响。
通过改变权重和阈值,我们可以得到不同的决策模型。例如,假如我们设置阈值为3,当天气好,或者节日地点在公交站附近,你的男朋友或者女朋友愿意陪你,感知器会判定你应该去参加节日。换句话说,它将是一个不同的决策模型。降低阈值意味着你更愿意去参加节日。
很明显,感知机不是一个很复杂的决策模型!但是这个例子却说明感知器如何权衡不同类型的证据来做出决策,并且一个复杂的感知器网络可以做出相当微妙的决策,这似乎是合理的:
在这个网络中,第一列感知机——我们称之为第一层感知机——通过权衡输入变量来做出三个简单的决定。那第二层感知机呢?每个感知机通过权衡来自第一层决策的结果做出决定。这样看来,第二层中的感知机会以一种比第一层更复杂、更抽象的方式来做出决策,并且可以通过第三层的感知机来做出更复杂的决策。这样看来,感知机的多层网络可以参与复杂的决策模型。
另外,当我定义感知机时,我说感知机只有一个输出。在上面的网络中,感知机看起来有多个输出。而事实上,它们仍然是单输出。多个输出箭头仅仅是指示来自感知机的输出被用作其他感知机输入的一种有效方式。这样比绘制单个输出线然后分裂更便利。
让我们简化我们描述感知机的方式。条件有些麻烦,我们可以做两个符号的变形来简化它。第一个变形是将写为点积,,其中w和x分别是权重和输入的向量。第二个变形是将阈值移动到不等式的另一侧,并且用感知机偏差来替换它,即。用偏差代替阈值,感知机规则可以重写为:
你可以认为偏差是衡量感知机输出1的一种很容易的量度,或者从更生物学的角度考虑,偏差是衡量感知机激发的容易程度。对于一个具有很大偏差的感知机来说,,感知机输出1很容易。但是如果偏差很小,则很难输出1。显然,引入偏差仅仅是我们描述感知机的一个小的变化,但我们在后面会看到它导致的进一步的符号简化。因此,在本书的其余部分,我们不使用阈值,我们总使用偏差。
我已经将感知机作为一种衡量证据来做决策的方法。另外一种可以被使用的感知机是计算通常作为底层计算的基本逻辑函数,如AND,OR和NAND函数。例如,假设我们有一个感知机,有两个输入,每个输入的权重均为-2,总偏差为3,则我们的感知机为:
我们可以看到输入00,输出为1,因为(-2)*0 (-2)*0 3=3是正数。这里,符号*是使乘法。类似的计算表明,输入01和10,输出为0,因为(-2)*1 (-2)*1 3=-1是负的。所以我们的感知机实现了一个NAND门。
NAND示例表明,我们可以使用感知机来计算简单的逻辑函数。事实上,我们可以使用感知机网络来计算任何逻辑函数。因为NAND门对计算是通用的,也就是说,我们可以从NAND门中建立任何计算。例如,我们可以在NAND门中建立一个添加两个位,x1和x2的电路。要求计算逐位和,并且当x1和x2都为1时,将进位设置为1,即进位只是x1x2的乘积:
为了得到感知机的等效网络,我们用两个输入的感知机来替换所有的NAND门,每个输入的权重为-2,总偏差为3,得到了替换后的网络。注意,我移动了右下方感知机对应的NAND门,仅仅为了更容易绘制图上的箭头:
这个感知机值得注意的一点是,在左边的感知机的输出两次被用作最底部感知机的输入。当我在定义感知机模型的时候,我并没有说是否允许这种双输出到同一个地方。实际上,它并没有太大的影响。如果我们不想允许此事件的发生,可以将两条线简单的合并成一个权重为-4的单个连接,而不是两个权重为-2的连接。(如果你不明白这一点,你应该停下来并且证明这种方法是等价的)完成变化之后,网络如下图所示,所有未标记的权重为-2,偏移为3,以及单个权重为-4,如下:
到目前为止,我一直在描述输入x1和x2,其作为变量在感知机网络的左侧。事实上,绘制一个额外的感知层——输入层——编码是很常规的:
这种有一个输出,但没有输入的,我们称其为输入感知机的符号是一种速记法。
实际上,并不意味着它是一个没有输入的感知机。为了明白这一点,我们假设有一个没有输入的感知机,加权和恒为0。因此当bgt;0时,感知机输出为1;当blt;=0时,输出为0。也就是说,感知机只是简单的输出固定值而不是期望值(上例中的x1)。最好将输入感知机认为不是真正的感知机,而是简单的定义为输出期望值x1,x2hellip;hellip;的特殊单元。
加法器实例演示了如何使用感知机网络来模拟包含许多NAND门的电路,由于NAND门对计算是通用的,所以感知机对计算也是通用的。
感知机的计算普遍性既令人放心又让人失望。令人放心的是,它告诉我们感知机网络可以像其他计算设备一样强大;令人失望的是,似乎感知机只是一种新型的NAND门。这不是大发现!
然而,情况比这个观点更好。事实证明,我们可以设计学习算法,它可以自动调整外部的刺激响应,不直接由程序员干涉。这些学习算法使我们能够以与传统逻辑门完全不同的方式使用人工神经网络。不是明确的布置NAND和其他门电路,我们的神经网络可以简单的学习解决问题,因为有时候直接计算常规电路是非常困难的问题。
Sigmoid神经元
学习算法听起来很了不起,但是我们如何为神经网络设计这样的算法呢?假设我们有一个感知机网络,我们想用它来学习解决一些问题。例如,网络的输入可以是经过扫描的手写数字图像的原始像素数据,我们希望网络可以学习权重和偏差,以便网络的输出可以正确的对数字进行分类。为了明白学习是如何进行的,假设我们将网络中的一些权重(或偏差)做一个小的变化,我们想要的是,对于权重的这个小变化,仅仅导致对应网络输出中的小的变化。正如我们将在稍后看到的,这个属性将会使学习成为可能。这是我们想要的示意图(显然这个网络太简单,不能进行手写识别):
如果一个权重(或偏差)的一个小变化只导致输出的一个小变化,我们就可以按照这种情况来修改权重和偏差,以使我们的网络以我们想要的方式来展现。例如,假设网络将本应该是“9”的图像错误的分类为“8”,我们可以弄清楚如何对权重和偏差做小的改变来使网络能够几乎将图像分类为“9”。之后,我们重复一遍,重复改变权重偏差来产生越来越好的输出。网络正在学习。
问题是当我们的网络包含感知机时会发生什么。事实上,网络中任何单个感知机的小变化有时可以使该感知机的输出完全翻转,例如从0到1。这个翻转可能导致网络中其余行为以一些非常复杂的方式完全改变。尽管你的“9”现在已经正确分类,但是其他所有图像的网络行为可能以一种难以控制的方式完全改变,使得网络离期望值更近时,我们很难看到权重和偏差是如何改变的。也许有一些聪明的方法可以解决这个问题,但是我们的感知机网络是如何学习的并不显而易见。
我们可以引入一种被称为sigmoid神经元的新型人工神经元来克服这个问题。Sigmoid神经元类似于感知器,但是可以被修改成当权重和偏差的小变化时,引起输出的小变化。让sigmoid神经元去学习是问题的关键。
好吧,让我来介绍sigmoid神经元。我们将以我们介绍感知机相同的方式介绍sigmoid神经元:
就像一个感知机,sigmoid神经元有输入,x1,x2,hellip;hellip;,但是不仅仅是0或1,这些输入还可以取0和1之间的任何值。例如,0.638是sigmoid神经元的有效输入。也像感知机一样,sigmoid神经元对于每个输入都有权重w1,w2,hellip;hellip;和总偏差b,但输出不是0或1,而是,其中sigma;被称为sigmoid函数,它的定义为:
为了更明确的说明这一点,sigmoid神经元的输出是与输入x1,x2,hellip;,权重w1,w2,hellip;,和偏差b有关的:
乍一看,sigmoid神经元看起来与感知机非常不同。如果你不熟悉sigmoid函数的话,它的数学表达式可能看起来不那么明了。事实上,感知机和sigmoid神经元之间存在很多相似之处,并且sigmoid函数的代数形式更多的是一个技术细节,而不是理解的障碍。
为了弄清楚它和感知机模型的相似之处,我们假设是一个很大的正数。所以,。换句话说,当是一个很大的正数时,sigmoid神经元的输出就趋向于1,就像感知机一样。换种假设,假设是负无穷,则,。所以当是负无穷时,sigmoid神经元也很像感知机的输出结果。只有当取中间值时,sigmoid神经元才和感知机模型有很大不同。
那sigma;的代数形式呢?我们该如何理解呢?事实上,sigma;的确切形式是不重要的,重要的是函数的绘制图像。其图像如下:
这个形状是步进函数的一种平滑情况。
如果sigma;是一个步进函数,那么sigmoid神经元就是一个感知机,因为输出会根据是正数或负数而取1或
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[138982],资料为PDF文档或Word文档,PDF文档可免费转换为Word
课题毕业论文、外文翻译、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。