1.7 在神经网络中追踪信号
每个神经元都与其前后层的每个神经元相互连接的三层神经元图片,看起来让人相当惊奇。
但是,计算信号如何经过一层一层的神经元,从输入变成输出,这个过程似乎有点令人生畏,这好像是一种非常艰苦的工作。
即使此后,我们将使用计算机做这些工作,但是我认为,这仍然是一项艰苦的工作。但是这对说明神经网络如何工作非常重要,这样我们就可以知道在神经网络内部发生了什么事情。因此,我们尝试使用只有两层、每层两个神经元的较小的神经网络,来演示神经网络如何工作,如下图所示。
让我们想象一下,两个输入值分别为1.0和0.5。这些值输入到这个较小的神经网络,如下图所示。
每个节点使用激活函数,将输入转变成输出。我们还将使用先前看到的S函数y = 1/(1 + e−x ),其中神经元输入信号的总和为x ,神经元输出为y 。
权重是什么?权重的初始值应该为多少?这是一个很好的问题。让我们使用一些随机权重:
· w 1,1 = 0.9
· w 1,2 = 0.2
· w 2,1 = 0.3
· w 2,2 = 0.8
随机初始值是个不错的主意,这也是我们在先前简单的线性分类器中选择初始斜率值时所做的事情。随着分类器学习各个样本,随机值就可以得到改进。对于神经网络链接的权重而言,这也是一样的。
在这个小型的神经网络中,由于连接每一层中两个节点的组合就只有四种连接方式,因此只有四个权重。下图标出了我们当前所知的所有数字。
让我们开始计算吧!
第一层节点是输入层,这一层不做其他事情,仅表示输入信号。也就是说,输入节点不对输入值应用激活函数。这没有什么其他奇妙的原因,自然而然地,历史就是这样规定的。神经网络的第一层是输入层,这层所做的所有事情就是表示输入,仅此而已。
第一层输入层很容易,此处,无需进行计算。
接下来的第二层,我们需要做一些计算。对于这一层的每个节点,我们需要算出组合输入。还记得S函数y = 1 /(1 + e-x )吗?这个函数中的x 表示一个节点的组合输入。此处组合的是所连接的前一层中的原始输出,但是这些输出得到了链接权重的调节。下图就是我们先前所看到的一幅图,但是现在,这幅图包括使用链接权重调节输入信号的过程。
因此,首先让我们关注第二层的节点1。第一层输入层中的两个节点连接到了这个节点。这些输入节点具有1.0和0.5的原始值。来自第一个节点的链接具有0.9的相关权重,来自第二个节点的链接具有0.3的权重。因此,组合经过了权重调节后的输入,如下所示:
x = (第一个节点的输出*链接权重)+(第二个节点的输出*链接权重)
x =(1.0 * 0.9)+(0.5 * 0.3)
x = 0.9 + 0.15
x = 1.05
我们不希望看到:不使用权重调节信号,只进行一个非常简单的信号相加1.0 + 0.5。权重是神经网络进行学习的内容,这些权重持续进行优化,得到越来越好的结果。
因此,现在,我们已经得到了x =1.05,这是第二层第一个节点的组合调节输入。最终,我们可以使用激活函数y = 1 /(1 + e -x )计算该节点的输出。你可以使用计算器来进行这个计算。答案为y = 1 /(1 + 0.3499)= 1 / 1.3499。因此,y = 0.7408。
这个工作真是太伟大了!现在,我们得到了神经网络两个输出节点中的一个的实际输出。
让我们继续计算剩余的节点,即第二层第二个节点。组合调节输入x 为:
x = (第一个节点的输出*链接权重)+(第二个节点的输出*链接权重)
x =(1.0 * 0.2)+(0.5 * 0.8)
x = 0.2 + 0.4
x = 0.6
因此,现在我们可以使用S激活函数y = 1/(1 + 0.5488) = 1/1.5488计算节点输出,得到y = 0.6457。
下图显示了我们刚刚计算得到的网络输出。
从一个非常简化的网络得到两个输出值,这个工作量相对较小。对于一个相对较大的网络,我不希望使用手工进行计算!好在计算机在进行大量计算方面表现非常出色,并且不知疲倦和厌烦。
即便如此,对于具有多于两层,每一层有4、8甚至100个节点的网络,我也不希望编写计算机指令来对这样的网络进行计算。即使只是写出所有层次和节点的计算指令,也会让我感到枯燥,让我犯错,更不用说手工进行这些计算了。
好在,即使是面对一个具有很多层、众多节点的神经网络,数学可以帮助我们以非常简洁的方式写下计算出所有输出值的指令。由于这种简洁性,指令变得非常短,执行起来也更有效率,因此这种简洁性不仅仅对人类读者有益处,对计算机而言,也一样大有裨益。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论