机器学习算法视角(原书第2版)》 —3.3 感知器

网友投稿 548 2022-05-30

3.3 感知器

感知器无非是一个由McCulloch和Pitts的神经元组成的集合,它包含一组输入和一些把输入和神经元连接在一起的权重。网络可以在图3-2中见到,左边以浅灰色阴影表示的是输入节点。这些不是神经元,而是一个示意图,形象地表示了输入是如何提供给网络的,以及输入值的个数(这等于输入向量的维度(元素的数量))。这些几乎总是画成圆形,就像神经元一样,很容易引起混淆,所以我加上了不同深度的阴影。在图中,右边的为神经元,并且可以看到加法的部分(以圆形表示)和阈值的部分。实际上,没有人会把阈值部分分开来画,你只需要记住它是神经元的一部分。

图3-2 感知器网络,包括输入节点集(左),它们与McCulloch和Pitts的神经元通过权重连接

请注意,在感知器中,神经元彼此之间是完全独立的。对任一个神经元来说,别的神经元在做什么与它无关,它所做的只是把输入的每一个元素与相应的权重相乘,然后把所有的乘积相加,再把所得的结果与阈值相比较,以判断是否激活,而无须考虑其他神经元在做什么。甚至连每一个神经元的权重也是彼此独立的,所以它们之间唯一共享的就是输入,每一个神经元都会见到提供给网络的所有的输入。

在图3-2中,输入的个数与神经元的个数相同,但实际情况并不一定是这样,一般地,有m个输入和n个神经元。输入的个数是通过数据决定的,与之类似的还有输出的数量。由于进行的是监督学习,所以我们想要感知器学会复制一个特定的目标,即对于一个给定的输入,得到一个包含激活和不激活的神经元的模式。

在之前研究McCulloch和Pitts的神经元时,权重被标记为wi,i的取值范围是从1到输入的数量。这里,我们还要弄清楚权重是提供给哪个神经元的,所以我们把权重标记为wij,j的取值范围是从1到神经元的数量。所以,w32就是连接输入节点3和神经元2的权重。当我们具体实现神经网络的时候,可以使用二维数组来保存这些权重。

《机器学习:算法视角(原书第2版)》 —3.3 感知器

现在,计算神经元是否激活就简单了。我们设置输入节点的值为输入向量的每一个元素,然后对每一个神经元使用方程(3.1)和方程(3.2)。我们可以对每个神经元都进行这样的处理,所得的结果就是一个神经元激活与不激活的模式,看上去就像一个由0和1组成的向量。因此如果有5个神经元,就像图3-2中那样,那么一个典型的输出模式可能是(0,1,0,0,1),这表示第2个神经元和第5个神经元激活了,而其他的都没有。我们把这个模式与目标模式,即已知的由该输入得出的正确结果进行比较,可以鉴别出哪些神经元得到了正确的结果,哪些没有。

对于一个得到正确结果的神经元,我们感到满意,但是任何一个本不应该激活而激活,或是应该激活而没有激活的神经元,则需要进行权重的调整。但困难在于我们并不清楚权重本来应该是什么样的,归根结底,这也是神经网络的重点所在,所以我们想要调整权重使得神经元在下一次能够得到正确的结果。在第3章中,关于这一点我们将讨论更多的细节,现在我们将做一件很简单的事情来证明找到一个这样的解是可能的。

假设我们把一个输入向量提供给网络,其中的一个神经元得到了错误的结果(它的输出与目标不相符)。与那个神经元相连的有m个权重,每一个权重对应一个输入节点。如果我们把结果错误的那个神经元标记为k,那么我们感兴趣的权重就是wik,i的取值从1到m。这样我们就知道了哪些权重是需要调整的,但我们仍然需要弄清楚如何调整这些权重。我们首先需要了解的是,每一个权重是偏大还是偏小。这似乎是显而易见的,如果神经元本不应该激活而激活了,那么某些权重是偏大的,反之如果神经元应该激活而没有激活,则某些权重是偏小的。所以我们计算yk-tk,tk是这个神经元的目标,表示它应该得到的结果,而yk是神经元的输出,表示它已经得到的结果,该表达式是一个可行的误差函数(error function)。如果结果为正,那么该神经元本应该激活但没有激活,所以我们就把权重调大一些,反之也成立。等一下,这里输入向量的元素可能为负,这会改变整个值的符号,所以如果我们想让神经元激活,就需要让权重也为负。为了顺利应付这种情况,我们将通过把这两个值相乘来看应该如何调整权重:Δwik=-(yk-tk)×xi,并且把所得的值与旧的权重相加来得到新的权重。

注意到我们还没有提过改变神经元的阈值的事。为了说明它的重要性,假设有一个特殊的输入0。在这种情况下,如果某一个神经元的结果是错误的,那么即使改变了相应的权重也无济于事(因为任何数与0相乘还是0),因此,需要改变它的阈值。我们将在3.3.2节中讲述一种巧妙的方法。然而,在那之前,先要完成学习规则,即我们需要决定每个权重改变多少。这可以通过把上面的值与一个称为学习速率(learning rate)的参数相乘得到,学习速率通常标记为η。学习速率的值决定了网络学习的快慢。它非常重要,因此需要用一个独立的小节来讲解(下一节),但首先让我们给出权重更新的最终规则:wij←wij-η(yj-tj)·xi(3.3)另一件我们现在需要意识到的事情是,每一个训练样本都要多次提供给网络。第一次的时候可能会得到一些正确的结果和一些错误的结果,下一次的时候希望能有所进步,直到最终,停止进步。计算出整个网络训练的时间可不是一件容易的事情,我们将会在4.3.3节中看到更多的方法,但是现在,我们将预定义最大的循环次数为T。当然,如果网络能够计算到所有正确的输入,那么也会是结束的好时机。

3.3.1 学习速率η

上面的式(3.3)告诉我们如何调整权重,其中的参数η控制着权重调整的幅度。我们可以把它设为1,从而忽略掉它。如果那样做的话,每当出现一个错误的结果,权重将会进行大幅度的调整,这会导致网络不稳定(unstable),从而使权重的改变永远都不能停止。如果把学习速率设置得较小,那么在权重发生较大变化之前,需要更多次地提供输入,从而使网络要花费更多时间去学习。然而,这样将会更加稳定,而且对数据中的噪声(noise,即错误)和不精确的成分具有更好的抵抗力。因此,我们选用一个适中的学习速率,一般为0.1<η<0.4,这取决于我们预计输入中会有多少错误。

机器学习服务 机器学习 算法

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:凡代码都有权利和义务@开源软件许可类别分析
下一篇:0x7OpenResty系列:Openresty最佳案例| 第4篇:OpenResty常见的API
相关文章