Make Your Own Neural Network(五)-----神经元,自然界的计算机

Make Your Own Neural Network

构建你自己的神经网络

https://blog.csdn.net/lz0499

作者:lz0499


 

声明:

1)Make Your Own Neural Network翻译自Tariq Rashid编写的神经网络入门书籍。作者的目的是尽可能的少用术语和高深的数学知识,以图文并茂的方式讲解神经网络是如何工作的。任何拥有高中数学水平的人就能够理解神经网络的工作方式。强烈推荐初学者以这本书作为神经网络入门书籍。

2)本文仅供学术交流,非商用。翻译的初衷是一边翻译一边加深对神经网络的理解。

3)由于刚刚接触神经网络这方面的知识,翻译过程中难免有些错误。若发现错误,还请各位前辈指正。谢谢!

4)由于工作原因,我将有选择的按照原文的章节不定期的进行翻译更新。

5)此属于第一版本,若有错误,还需继续修正与增删。


目录:

第一部分:神经网络是如何工作的

一种简单的预测机

分类即是预测

训练一个简单的分类器

单个分类器似乎远不够

神经元,自然界的计算机

通过神经网络的信号

矩阵很有用

利用矩阵计算三层神经网络的输出结果

从多个节点更新权重

从多个节点中反向传递误差

多层神经网络层反向传输误差

利用矩阵乘法计算反向传输误差

实际上是如何更新权重(一)

实际上是如何更新权重(二)

神经元,自然界的计算机

我们之前说过,动物大脑的运行原理一直令科学家困惑,为什么像鸽子那样小的大脑其能力远超过由大量电子计算元件、大容量内存、运行频率高所组成的计算机呢?。

本质区别在于架构上。传统的就计算机以精确的描述指令顺序数据,每一次计算都不是模糊不清,模棱两可。而对于动物大脑来说,动物大脑运行频率低,并行处理数据,对每一次处理都是模糊不清、比较抽象的

让我们看看实际实际的生物脑的基本单元--神经元。

神经元--尽管它有很多种类型,都是将电信号从树突沿着轴突传输至终端,由此,电信号就传输至另外一个神经元。这就是人类感知光、声、力、热的工作原理。信号从特定的神经感知细胞通过神经系统传输至你的大脑,感知外部环境的种种。

下图是鸽子大脑中神经网络的素描,由西班牙神经学家于1899年完成。你可以看到神经网络中的关键部分--树突和轴突。

需要多少神经元才能处理有趣又复杂的任务呢?

我们人类大脑大概有1000亿个神经元组成。由100000神经元组成的果蝇拥能够飞行、觅食、避险以及更加复杂的能力。模拟100000个神经元是当今计算机所能达到的最大限制。尽管线虫只有302个神经元,比当今能够模拟大量神经元的计算机的神经元数量小得多,但是线虫能够处理一些传统计算机完全没能力处理的任务。

秘密究竟在哪呢?为什么生物脑运算速度慢,计算元件相比现代计算机少的多的情况下,却拥有比计算机更强大的能力呢?大脑的完整运行机制,比如意识,依旧还是一个谜。但是我们已经知道神经网络是使用一套不同于计算机的处理的方法解决问题。

让我们看看,神经元是如何工作的。神经元输入一个电信号,再输出一个电信号。就像之前做的预测器和分类器一样,也是输入一个信号,经过处理之后,输出一个信号。那么,就像之前做的一样,我们能够用线性函数替代神经元吗?想法是好的,可实际上是不可行的。生物神经元细胞并不像简单的线性函数那样,输入一个信号产生出信号。也就是说,神经元的输出信号不满足:输入=常量*输入+可能的另外一个常量。

生物学家已经观察到,只有当输入信号增长到一定数值之后才能触发神经元输出一个信号。就像水杯中的水一样,只有水盛满水杯之后,水才会溢出一样。直观的来说,神经元并不会把所有输入信号输出,只有当一定强度的信号通过时,才会输出信号。下图所示,只有拨转超过阈值的时候,才会使得电灯亮。

像这种输入一个信号,再根据一定阈值判断,输出一个信号的函数,称之为激活函数。数学上有很多函数能够实现这种功能。简单的阶梯函数就能实现这种功能。

从图中我们可以观察到,输入数值较小时,输出为0,。只有当输入超过一定阈值的时候,才猛然输入一个值。像这种类似功能的模拟神经元已经很接近实际的生物神经元了。

我们可以把阶梯函数改进为S形的阶梯函数,我们称这种S型的函数为Sigmoid函数。它比阶梯函数要平滑很多,更加自然而真实。自然界中很少出现像阶梯函数那种跳变。

后续工程中,我们将使用S型的函数实现我们的神经网络。人工智能研究者也将使用其他类型的激活函数。但是Sigmoid函数是比较简单而常用的函数,所以我们暂不考虑其他激活函数。

Sigmoid函数如下所示:


这个函数并不像它看起来这么可怕。字母e是一个数学常量2.71828......。在数学领域和物理领域常常使用到这个有趣的常量。省略号代表的是e是一个无限循环数。当是对我们来说,你可以把e看做是2.71828。

当x=0,等于1,所以整个式子为1/(1+1)=1/2。所以sigmoid函数经过y轴的1/2处。

在所有的S型激活函数中,为什么我们唯独选择Sigmoid函数作为激活函数呢?因为Sigmoid函数比起其他S型激活函数来说,更加方便进行积分运算。后续我们将讲解为什么。

让我们回到神经元主题上,并考虑我们将如何构建一个人工的神经元?

首先我们要意识到实际的神经元并不只有一个输入,它可能拥有多个输入信号。我们在布尔逻辑函数机器中已经接触到输入不仅仅只有一个输入的情况。所以现在多个输入对你来说,应该不算陌生。

我们该如何处理这些输入呢?我们只是把这些输入求和,在把和输入到Sigmoid函数中得到输出结果。这也是真实的神经元处理信号的过程。如下图所示,把所有输入求和之后再进过阈值判断,得到输出结果。

如果输入信号所求的和不够大,那么sigmoid函数将抑制输出信号,使得输出信号为0。如果输入信号的和足够大,那么sigmoid将计划神经元,输出信号。有趣的是,如果所有输入信号中只有一个信号足够大,而另外一些信号很好,这也可能激活神经元。还有可能的是,当所有输入信号大小基本一致,但是又不是非常大的时候,它们的和将足够大而超过阈值,并将激活神经元。

树突接收电信号,并把它们合成一个更强的电信号。如果这个合成后的电信号足够强以至于超过了激活函数的阈值,那么这个神经元将被激活,输出一个信号。并把该信号传输到另外一个神经元。

值得注意的一件事是,每一个神经元都能够从之前的神经元获得输入信号,并把输出信号提供给更多的神经元,如果它能被激活的话。

一种模拟生物神经元传递过程的人工神经元模型是构建许多层神经元,这些神经元与各层之前的神经元和后继的神经元相互连接。如下图所示:

图中可知,总共有三层,每一层有三个人工神经元(节点),同时你可以观察到每一个节点与它前面一层和后面一层的所有节点互相连接。

很好!但是我们如何从这个神经结构进行学习呢?

对于训练样本,我们该如何反应呢?

是否一个参数能够像之前分类直线的斜率那样进行可调呢?

显而易见的是,我们可以更改每一个连接节点之间的连接强度。对于一个节点,我们可以更改输入节点信号的和,也可以改变Sigmoid函数的阈值,但相比于改变连接节点之间的连接强度而言,其他两种方法会有一些复杂。

如果简单的方法能够实现。那么我们就实际构建下。如下图示中,我们还是画出了各层中的连接节点,但是这次我们在各个节点连接线上标注了一些权重值,代表的是节点之间的连接强度。较大的权重将放大输入信号,较小的权重将缩小输入信号。

权重符号旁边的数字很值得解释下。权重符号代表的是一层中的节点2与下一层中与它相连的节点3之间的权重值。所以代表的是节点1与下一层的节点2之间的权重,这个权重将放大或缩小节点1和下一层的节点2之间的信号。为了方便查看,我们用高亮的红色符号表示这个权重。












  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值