首页 > 代码库 > 闲谈神经网络--写给初学者(一)

闲谈神经网络--写给初学者(一)

  写在前面的话:保持一贯的风格,正式开始写之前,先啰嗦一番。介绍神经网络的书籍和文章简直太多了,所以我也不准备用太洋气的话去讲,尽量写的土一点,大家看完文章后,能够对神经网络有一个整体的认识,有所体会,我便达到了目的。接下来再根据自己的问题,去看看大块头的书,练习练习,就好了。如果能够跟自己的学习工作中的问题相结合,应用起来,那便是极好的。

==============正式开始写========

一、神经网络整体认识

    到底什么是神经网络呢?在陷入各种各样概念、名词、理论之前,请务必提醒自己,只有从整体上理解到底什么是神经网络,之后的深入学习才不至于迷失方向。

 请看下面三张图:

    

    图一                  图二                图三

 这三幅图跟就能很好的对神经网络进行一个整体的描述:神经网络就是一个黑箱,和人脑一样。

(1)我们给这个黑箱一些输入和输出,这个黑箱就能够自动去寻找这些输入和输出之前的关系,等以后我们再输入一些东西时,他们便能给出我们一些输出。就跟人脑一样,我们不停的输入一些人,输出对应性别,等脑子慢慢学习和长大,以后再看到一些人,就能分辨他们的性别了。

(2)对于有些输入,不一定就会有输出,而是能够找到这些输入之间的关系。就跟人脑一样,我们看人,输入各种各样的人,随着我们人脑的不停学习和训练,会自动把他们分为美、普通、丑等关系。

因此,叫做神经网络,还是很贴切的。接下来是其他几点类比:

(1)人脑有聪明的,也有笨的,所以我们以后构造的神经网络也有聪明和笨之分,只有不断的训练,不断调整合适的参数,才能让我们设计的神经网络越来越聪明。

(2)人脑都有自己适合做的事情,比如有些人适合学理科,有些人适合学文科;有些人适合搞经济,有些人适合搞政治。。同样,各种各种的神经网络模型,也有自己适合做的事情,只有搞懂神经网络的基本原理,才能够根据自己的实际需要,选择合适的网络。(突然想起前几天一个小时候的同学说的一句话:“TMD过了这么多年,我发现一点:我就根本不适合上学”)。

(3)人脑也有误判的时候,因此用神经网络,是无法做到100%准确的,因此对于要求有百分之百准确度的事情,不能用神经网络,需要建立精确的数学模型和公式来计算才行。

总之,就一句话,“神经网络就是一个神奇的黑箱”。接下来,我们就一起去打开这个黑箱,看看他里面到底是怎么回事。

二、打开黑箱

  刚刚打开黑箱,你可能惊呆了,里面都是一些什么乱七八糟的东西,完全不懂啊。不用慌张,我们一点点的去分析。

  神奇的造物主创造了人脑,于是有些人也试图去创造神经网络去模拟人脑。假如是你要设计一个神经网络,你会怎么做呢?如果你百思不得其解,那么好吧,我们一起来看看前辈门是怎么设计的吧。这里的前辈们有很多,为了使大家既能理解神经网络原理,又能够实践操作,我把前辈们分成了两类:数学家和程序员。其中数学家设计了整体的思想,而程序员用程序实现了数学家所说的功能(以Matlab为例进行演示)。

   我们看看前辈们是怎么设计的。

  我们发现这个黑箱里面有很多小圆球,如下图所示:

  这些小圆球还有一个很好听的名字,叫做“神经元”,刚开始看你可能觉得这些小圆球乱七八糟排列,实际上如果你仔细看的话,他们之间的排列是有规则的,根据他们排列规则不同,神经网络结构大概分成如下几种:

(1)前馈型

 

这些小圆球一个接一个的排列,input表示输入信号,从前到后,一直到output输出,神经元和神经元之间没有信号的传输。其中第一层是输入单元,第二层称为隐含层,第三层称为输出层(输入单元不是神经元,因此图中有2层神经元)。

例如BP神经网络和感知器神经网就是这么排列的。

 

(2)反馈型

 

顾名思义,最后的输入信号不仅输出就完事了,还会把输出信号反馈回去,因此叫做反馈型神经网络。

例如:回归BP网络就属于这一种。

(3)层内有互相结合的

前面的结构,同一层神经元之间没有联系,而层内有互相结合的结构,层内神经元会互相有信息传输。

 

怎么样,是不是很赞赏前辈们,竟然能够想到这么个办法,这些小球(神经元)互相连接,就能干很多很多复杂的事情,可是这些小球到底是个什么东西呢,接下来,就进入本文的重点,让我们深入小球内部看看是怎么个回事。

三、打开小圆球(神经元)

 每一个神经元的结构,如下图所示:(请注意,接下来就要有各种公式符号等等,始终记住,神经网络是一个黑箱,里面有很多小球(神经元)连接,他们一层一层的排列,有了各种各样的结构方式)

上面一个图就是神经元的内部结构图,虽然它不是一个球,但是你可以想象它外部是有一层圆圆的外壳,包裹着它就好。我们一点点看看他都有那些东西。

(1)输入:inputs表示的x1,x2,...,xm表示的是输入信号,这些输入信号输入进各个神经元的∑函数进行一个求和,我们看到他们并是直接相加的,而是每个输入都乘以了一个系数W之后再相加的,这些W称为权重,或者叫权值,或者叫做Weight。

(2)bias:我们看到进入∑符号的不仅有输入乘以Weight,还有一个Bias,他的输入是1,权值是W0,所以也可以看成是一个固定输入为1,权重为W0的一个输入信号。在其他一些书里面,bias的值会有bi符号表示,或者别的,总之是一个意思。还要注意的是,这个bias有很多名字,什么阈值、threshold,偏置等等都是一个意思。

(3)激活函数:前面的输入和bias经过∑求和之后,就会通过一个函数进行处理,进而输出结果,这个函数就叫做激活函数,也就Activation Function,也叫传递函数,也就Transfer Function,也叫TF,总之这些名称都是一回事。

怎么样,就是这么一个一个的神经元,就组成了一个神奇的神经网络,这个魔法的黑箱,就能干很多事情。

那么问题来了,我们可以改变那些东西,进而完成我们各种各样的问题解决呢?

我们能改动的,无非是下面几个东西:

(0)输入输出的格式和质量

(1)各个神经元的权重值W

(2)偏置bias,这个改变从广义上说,也算是改变权重W0

(3)激活函数

(4)神经网络层数

(5)每一层神经元个数

(6)神经网络的结构

那么问题又来了,这些参数怎么改变呢?

这篇太长了,留着下篇继续讲解吧,争取再讲一个例子。

 

 

============================

最近帮朋友弄了微信公众号,每天早上6点30分,发送一个60秒的语音,有兴趣的朋友不妨关注一下。

微信号:歪理邪说(wailixs)

二维码:

 

闲谈神经网络--写给初学者(一)