Make Your Own Neural Network(六)-----通过神经网络的信号
Make Your Own Neural Network
构建你自己的神经网络
作者:lz0499
声明:
1)Make Your Own Neural Network翻译自Tariq Rashid编写的神经网络入门书籍。作者的目的是尽可能的少用术语和高深的数学知识,以图文并茂的方式讲解神经网络是如何工作的。任何拥有高中数学水平的人就能够理解神经网络的工作方式。强烈推荐初学者以这本书作为神经网络入门书籍。
2)本文仅供学术交流,非商用。翻译的初衷是一边翻译一边加深对神经网络的理解。
3)由于刚刚接触神经网络这方面的知识,翻译过程中难免有些错误。若发现错误,还请各位前辈指正。谢谢!
4)由于工作原因,我将有选择的按照原文的章节不定期的进行翻译更新。
5)此属于第一版本,若有错误,还需继续修正与增删。
目录:
第一部分:神经网络是如何工作的
通过神经网络的信号
三层神经网络中,每一层的节点与它前一层的所有节点和后一层的所有节点相连,看起来比较复杂。
从输入层到输出层计算信号如何被处理的看起来比较复杂。
确实是一项艰巨的任务。但是解释神经网络如何工作同样重要,这将有助于我们理解神经网络内部实际发生了什么,即使今后我们将利用计算机帮助我们计算。所以,我们从比较简单的两层神经网络开始,阐述神经网络将是如何工作的。两层神经网络如下图所示:
让我们假设输入信号分别是1.0和0.5。下图中描述了这两个信号输入到两层较小神经网络的过程。
就像之前讨论的,每一个节点把输入信号的和输入到**函数进行,最后输出一个结果。我们将使sigmoid函数作为**函数。其中x是节点中所有输入信号的和,y为输出节点的输出值。
哪么权重改如何设置呢?这是衣蛾很好的问题。权重值应该从哪个之开始呢?就像我们之前计算预测器和分类器直线一样,我们把权重值先设置为随机值。
从随机值开始并不是一个很糟糕的想法。如下图所示:这个两层神经网络有四个权重值。每一层的节点相互连接。
权重已经有了,让我们开始计算吧!
第一层节点为输入层,这些节点仅仅表示输入信号,不做其他任何事情。就是说,这些输入节点不会输入到**函数中处理。神经网络的第一层是输入层,这一层的节点仅仅表示输入信号。
第一层节点不做任何处理。但是第二次节点我们需要做些相关计算。对这一层的每个节点我们需要处理该节点的输入信号和。还记得sigmoid函数,x表示的是节点中所有输入信号的组合,这些组合是前一层各个相连节点经过加权之后的数值。下图表示输入信号加权的过程。
让我们从第二层的节点1开始计算。第一层的所有节点都与它相连,第一层的输入节点值分别为1.0和0.5。第一层的第一个节点以0.9的权重与它相连;第一层的第二个节点以0.3的权重与它相连。因此,其加权和为:
X=(第一层的第一个节点*相对应的权重)+(第一层的第二个节点*相对应的权重)
=(1.0*0.9+0.5*0.3)
=1.05
所以,第一层的各个节点输入到第二层的第一个节点的加权和为1.05。现在我们把x=1.05带入到**函数,可得y=1/(1+0.3499)=1/1.3499=0.7408。
相当不错,我们已经计算出了第二层第一个节点的输出信号值了。让我们继续计算剩下的节点输出信号值大小。
X=(第一层的第一个节点*相对应的权重)+(第一层的第二个节点*相对应的权重)
=(1.0*0.2+(0.5*0.8)
=0.6
同理,将x带入到**函数中,得到y=1/(1+0.5488)=1/1.5488=0.6457.
下图表示刚刚神经网络经过计算的值。
这个对于简单的两层神经网络来说,计算还算是简单。但是,对于有100 10000甚至更大的大型神经网络来说,用手算是多么可怕呀!那么,有没有一种比较简洁的方法计算其输出信号值呢?
虽然计算机可以帮助我们计算其输出信号值。但是我依旧不是很想写出计算机计算2层或是4层甚至100层的神经网络输出信号值。因为,我可能会写错指令也可能写错权重值等,发生一些不可避免的错误。
幸好,数学上我们有一种比较简洁的书写方式,帮助我们理解。同时,这种方式也能够被计算机所理解,因此能够用较短的计算机代码快速的进行计算。
这种书写方式就是矩阵。我们下一小节会详细讲解其原理。