neuralnetworksanddeeplearning.com学习之第一章

使用神经网络来识别笔记

细想下面手写数字的顺序:

大多数人毫不费力地认出这些数字是504192。轻松都是骗人的。

在大脑的每个半球,人类有一个初级视觉皮层,也称为V1,包含1.4亿个神经元,数百亿它们之间的连接。

然而人类的视觉不仅包括V1,整个一系列的视觉皮层——V2,V3,V4和V5——它们做越来越复杂的图像处理。

我们头脑里携带一台超级计算机,调优进化了数亿年来适应并了解这个视觉世界。

识别手写的数字并不容易,只是我们人类惊人的擅长于理解我们眼睛告诉我们的世界。并且,几乎所有的工作都是在不知不觉中完成的。

所以我们通常不会意识到一个我们的视觉系统解决的问题有何艰难。

如果你试图编写一个计算机程序来识别数字(像上面一样),视觉模式识别的难度是明显的。

看似容易当我们要用程序实现,突然变得非常困难。

简单的直觉是如何识别形状的呢?比如数字9,“上面一个圆圈,右下方一根竖线”

当你试图让这些规则精确(让机器明白),你很快迷失在一大堆异常、警告和特殊情况。几近绝望。

神经网络则会以一个不同的方式处理这个问题:这个想法是保存大量的手写数字,称为训练实例(training examples)。如图:

然后开发一个系统从这些培训例子中学习。

换句话说,神经网络使用例子来自动推断识别手写数字的规则。

此外,通过增加训练实例的数量,程序可以了解更多笔迹,因此提高其准确性。虽然上面我只显示了100个训练数字,但是我们可以通过使用数千甚至数百万 或数十亿的培训示例。

 

换句话说,神经网络使用示例来自动推断用于识别手写数字的规则。 此外,通过增加培训示例的数量,网络可以更多地了解手写,从而提高其准确性。虽然我只显示了100个训练数字上面,也许我们可以通过使用数千甚至数百万 或数十亿的培训示例。
在本章中,我们将编写一个计算机程序,实现一个学习识别手写数字的神经网络。 该程序只有74行,并且不使用特殊的神经网络库。 但这个短程序可以识别数字的精度超过96%,无需人为干预。 此外,在后面的章节中,我们将开发能够将精度提高到99%以上的想法。 事实上,最好的商业神经网络现在是如此的好,他们被银行用来处理支票,并通过邮局识别地址。

 

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

 

当然,如果本章的要点只是为了写一个计算机程序来识别手写数字,那么这个章节会短得多! 但是一路上,我们将发展关于神经网络的许多关键思想,包括两种重要类型的人工神经元(感知器和S形神经元),以及用于神经网络的标准学习算法,称为随机梯度下降。 在整个过程中,我专注于解释为什么事情以他们的方式完成,并建立你的神经网络直觉。 这需要比我刚才介绍这是怎么回事的基本力学中更长的讨论,但它是值得的认识愈深,你会发现的。 当中的收益,按章结束时,我们会在适当的位置,了解深的学习是什么,以及为什么它很重要。

 

感知器

什么是神经网络? 为了开始,我将解释一种称为感知器的人工神经元。 感知器由科学家弗兰克·罗森布拉特(Frank Rosenblatt)在20世纪50年代和60年代开发,灵感来自Warren McCulloch和Walter Pitts的早期工作。 今天,使用人工神经元的其他模型更常见 - 在这本书中,在神经网络的许多现代工作中,使用的主要神经元模型是称为S型神经元的模型。 我们很快就会到达S型神经元。 但要了解S型神经元的定义方式,得先花时间首先了解感知器,这是值得的。

 

那么感知器如何工作呢? 感知器需要几个二进制输入,x1,x2,... x1,x2,...,并产生一个二进制输出:

在所示的示例中,感知器具有三个输入,x1,x2,x3。 一般来说,它可以有更多或更少的输入。 Rosenblatt提出了一个简单的规则来计算输出。 他引入权重w1,w2,...,表示相应输入对输出的重要性的实数。 神经元的输出,00或11,由加权和

是否小于或大于某个阈值来确定。 正如权重一样,阈值是一个实数,它是神经元的参数。 把它放在更精确的代数术语中:

这就是感知器如何工作的细节!

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

1、天气好吗?
2、你的男朋友或女朋友想陪你吗?
3、节日地点是否在公共交通附近? (你没有车)。

我们可以通过相应的二进制变量x1,x2和x3来表示这三个因子。例如,如果天气良好,我们将x1 = 1,如果天气不好,则x1 = 0。类似地,如果你的男朋友或女朋友想要去,x2 = 1,如果不是,x2 = 0。类似地,对于x3和公共交通。


现在,假设你绝对喜欢奶酪,所以,你很高兴去参加节日,即使你的男朋友或女朋友不感兴趣,这个节日很难得。但也许你真的很喜欢恶劣的天气,如果天气不好,你没有办法去节日。你可以使用感知器来建模这种决策。一种方法是为天气选择权重w1 = 6,对于其他条件,选择w2 = 2和w3 = 2。 w1w1的值越大表示天气对你很重要,远远超过你的男朋友或女朋友加入你,还是公共交通的临近。最后,假设您为感知器选择阈值55。通过这些选择,感知器实现期望的决策模型,每当天气好时输出11,而每当天气坏时输出00。它对输出没有什么区别,无论你的男朋友或女朋友想要去,还是公共交通附近。

 

我们可以通过相应的二进制变量x1,x2和x3来表示这三个因子。例如,如果天气良好,我们将x1 = 1,如果天气不好,则x1 = 0。类似地,如果你的男朋友或女朋友想要去,x2 = 1,如果不是,x2 = 0。类似地,对于x3和公共交通。
现在,假设你绝对喜欢奶酪,所以,你很高兴去参加节日,即使你的男朋友或女朋友不感兴趣,节日很难得到。但也许你真的很喜欢恶劣的天气,如果天气不好,没有办法你去节日。你可以使用感知器来建模这种决策。一种方法是为天气选择权重w1 = 6,对于其他条件,选择w2 = 2和w3 = 2。 w1的值越大表示天气对你很重要,远远超过你的男朋友或女朋友加入你,还是公共交通的临近。最后,假设您为感知器选择阈值55。通过这些选择,感知器实现期望的决策模型,每当天气好时输出11,而每当天气坏时输出00。它对输出没有什么区别,无论你的男朋友或女朋友想要去,还是公共交通附近。

 

通过改变权重和阈值,我们可以得到不同的决策模型。 例如,假设我们选择了一个阈值33.然后感知器会决定你应该去节日,每当天气好,或者当节日在公共交通附近,你的男朋友或女朋友愿意加入你。 换句话说,这将是一个不同的决策模式。 降低门槛意味着你更愿意去参加音乐节。

显然,感知器不是人类决策的完整模型! 但是这个例子说明了感知器如何权衡不同类型的证据以做出决定。 并且看起来似乎是可能的,一个复杂的感知器网络可以做出相当微妙的决定:

在这个网络中,第一列感知器 - 我们称之为感知器的第一层 - 通过称量输入证据做出三个非常简单的决定。 第二层的感知器怎么样? 每个感知器通过权衡第一层决策的结果做出决定。 以这种方式,第二层中的感知器可以以比第一层中的感知器更复杂和更抽象的水平做出决定。 甚至可以由第三层中的感知器做出更复杂的决定。 以这种方式,感知器的多层网络可以参与复杂的决策。

 

顺便说一句,当我定义感知器时,我说感知器只有一个输出。 在上面的网络中,感知器看起来像它们具有多个输出。 事实上,它们仍然是单输出。 多个输出箭头仅仅是指示来自感知器的输出被用作对若干其他感知器的输入的有用方式。 它比绘制一个单独的输出线然后分裂不那么笨重。

让我们简化我们描述感知器的方式。

posted @ 2021-10-28 14:05  hucat  阅读(44)  评论(0编辑  收藏  举报