算法总结3—神经网络

生物神经网络:

     在生物的神经网络中的基本单位是神经元,神经元与神经元之间是由突触的相互联系来传递信息的,在静止息状态时,神经元的膜的内外电压保持一种稳定状态(膜内电压低于膜外电压),当神经元受到刺激后,在被刺激的部分周围,这种平衡状态会被打破,电压改变,与没有受到刺激的部分形成电流传递信息,电流的强弱取决于受刺激部位电压的改变量。

     前一个神经元的轴突末梢作用于下一个神经元的胞体、树突或轴突等处组成突触。不同的轴突末梢可以释放不同的化学物质对下一个神经元产生不同的影响。也就是说会使下一个神经元的受刺激部分产生不同的电压,也就导致了不同程度的电流,最终也就传递了完全不同的信息。

     一个神经元可以通过轴突作用于成千上万的神经元,也可以通过树突从成千上万的神经元接受信息。当多个神经元同时对一个神经元产生作用时,结果这些神经元的作用强度共同决定。

     神经系统按功能可大致分为传入神经(感觉神经)、中间神经(脑:延脑、脑桥、小脑、中脑、间脑、大脑脊髓)与传出神经(运动神经)三类。

     感受神经的作用是接受外界信息(输入),中间神经则起到了信息传递与计算分析的作用,最用,传出神经会负责对外界信息作出相应的反应(输出)。

     模仿这一过程,我们就可以建立人工神经网络。

 

人工神经网络:

     人工神经网络的基本单位是人工神经元(以下简称神经元)。一个神经元可以有多个输入,每个输入有一个相应权值。

图示如下:

人工神经元

a1~an为神经元的输入值

w1~wn为神经元各个的输入所拥有的权值

b为偏移量

sum对各个输入与其权值的积求和(含偏移量)。

f为传递函数,接受sum的输出,通过一个函数变换,输出t

t为神经元输出

数学表示 t=f(WA'+b)

W为权向量

A为输入向量,A'为A向量的转置

b为偏移量

f为传递函数

在人工神经网络中,神经元之间相互连接,在连接点将前者的输出作为后者的输出,形成错综复杂的网状结构,进行信息的传递与计算。

我们这里要介绍的是其中比较简单的一种模型,称为“多层感知机(MLP)”网络。

为了简化模型,我们假设偏移量b=0.

多层感知机网络由3部分组成:

输入层:功能类似感受神经,每个节点接受外界的直接输入。这里的模型中,每个节点接受单一输入,权值为1。

输出层:功能类似运动神经,该层输出就是神经网络的输出。

隐藏层:是输入层和输出层之间的多层神经网络,可以有1或多层。

因此,MLP网络中至少有3个层次。

 

这些层次中,每层的每个神经元的输出都会作为下一层的每个神经元的输入,因此当我们对输入层进行输入后,该信息会一层层传递下去,最终从输出层输出。

神经网络建立后,我们需要设法确定每个神经元的各个输入的权重w,并选择合适的函数f对输入进行变换,只有完成以上工作后,我们才能使用神经网络完成相应的工作。

我们一般会选择过关于源点对称的S形函数作为函数f,该种函数特点是:输入接近0时,函数对输入的变化有敏感的反应,这一敏感度将随输入绝对值的增大而下降,最终趋于0。

 

权重的获取:

选择合适的函数后,我们就要去确定各权重w了,权重的选择取决于我们想要神经网络完成的任务,我们首先会给每个输入一个初始化的默认值,该值可任意选取。

完成初始化后,我们就要开始训练神经网络了,即给神经网络大量的已知的正确的输入及其对应的输出,神经网络会将自己得到到的输出与正确输出向比较,然后根据某一算法调整自身的权重,使自身输出更接近正确答案。

我们这里要介绍的调整算法称为反向传播法,因为该算法是沿网络反向调整权值的。

这一算法中,我们会分析输出与正确答案,并将将输出向正确答案推进,为了了解如何推进,我们需要一个函数来计算函数f的斜率,设该函数为g。根据该函数,我们可以计算sum因改变的值。

整个算法如下:

从后向前对输出层和所有隐含层:

1)  计算节点当前输出与期望结果的差值d。(期望结果t – 实际输出 y)

对输出层: t在输入训练数据时一同输入。

对隐含层: t = sum ( 前一层的每个节点的差值di * 这两个节点间连线的权值 )

2)  利用函数g确定函数f在节点输出值y处的改变速率v。v=g(y)

3)  改变每个输入链接的权值,其改变量与链接的当前输入强度与学习速率rate(自己定义的属于(0,1)的常量)成正比。

(每个wi的改变量为(v*d*rate*输入ai))

这样一层层的从后向前反推,最终完成对一个训练样本的学习。

当对所有样本完成训练后,我们就可以使用这个神经网络了。

比如,我们想用神经网络模拟一个数学函数,我们先向网络提供大量的正确的输入输出进行训练,然后就可以用神经网络作模拟这个函数进行计算了。

优点:

神经网络可以处理复杂的非线性函数,发现不同输入的隐含关系。

神经网络也允许增量式训练,并且不需要大量的空间保存数据模型。

缺点:

神经网络只能接受数值输入输出,因此我们在处理非数值数据时,必须以一种方法把其每个取值映射到一个数值上。

神经网络是一种黑盒方法,这使得我们无法得知其处理输入和输出的方法与原因,尤其是较大的神经网络有数百的节点和上千的连接,更是如此。

在训练神经网络时,在选择训练数据的比例及与问题相适应的网络规模方面,没有明确的 规则。如果训练数据比率太大,可能导致网络对噪音数据产生过度归纳,而训练比率太低,网络就不够精准。

原文地址:https://www.cnblogs.com/luosha/p/2571549.html