| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jopen
9年前发布

人工神经网络关键核心知识点

神经网络里面主要就是单层神经网络学习和多层神经网络学习,涉及到知识点主要就是感知器,线性分割,影藏层,权重校正,误差的平方和等知识点。

感知器:是神经网络最简单的形式,单层双输入感知器的结构如下:


感知器的作用是将输入分类,超平面有线性分割函数定义:


下图是感知器的线性分割:两输入感知器和三输入感知器的情形。


感知器如何学习分类任务

感知器通过细微的调节权值来减少感知器的期望输出和实际输出之间的差别可以完成这一任务。

下面我们来介绍下感知器分类任务的训练算法

设Y(p)为实际输出,Yd(p)为期望输出,e(p)为误差,

则:


如果e(p)为+,就需要增加感知器的输出Y(p),如果为负,就减少感知器的的输出Y(p),因此可以建立下面的感知器的学习规则:


算法1:

步骤一:初始化。

设置权重w1,w2,...Wn和阈值o的初值,取值范围为[-0.5,+0.5]。

步骤二:激活。

通过用输入 以及期望输入Yd(p)来激活感知器,在迭代p=1上计算实际输出


其中n为感知器输入的数量,step为阶跃激活函数。

步骤三:权重训练。

修改感知器的权重。



其中为迭代p上的权重校正。

通过delta规则计算权重校正:


步骤四:迭代。

迭代p加1,回到步骤二,重复以上过程直至收敛。(完)


可以训练感知器执行类似AND(a),OR(b),,但是不能通过训练执行异或逻辑操作(c):



四个常用的激活函数------阶跃、符号、线性、s形函数如下图:


单感知器仅仅能分类线性分割模式,要处理非线性的问题就只能通过多层网络来解决。


多层神经网络:多感知器是有一个或者多个隐藏层的前馈网络,如下图有两个隐藏层的多层感知器:



为什么需要隐藏层?

多层神经网络的每一个层都有特定的功能,输入层接受来自外部世界的输入信号,重新将信号发送给隐藏层的所有神经元,

利用一个隐藏层,我们可以表示输入信号的任何连续函数,利用两个隐藏层甚至可以表示不连续的函数。

隐藏层到底隐藏了什么?

隐藏层隐藏期望的输出值,隐藏层的神经元不能通过网络的输入和输出行为来分析,换句话说就是隐藏层的期望输出由层自己决定。

多层网络如何学习?

后向传送方法。

学习算法有两个阶段:

1、将训练输入模式提供给网络的输入端,输入模式在网络中一层一层的传送,直到输出层产生输出模式为止。

2、从网络的输出端后向的传送到输入端,在传送误差是调整权重的值。


后向传送方法和感知器的类似,只是在后向传送方法中神经元使用的是S形的激活函数:



后向传送方法的算法:

步骤一:初始化。

用很小的范围均匀分布的随机数设置网络的权重和阈值


其中Fi是网络中神经与的输入的总数。

步骤二:激活。

通过应用输入和期望的输出来激活后向传送神经网络。

(1)计算隐藏层神经网络的实际输出:


其中n是隐藏层神经元j输入的个数。

(2)计算输出层神经元的实际输出:


其中m为输出层神经元k的输入个数。

步骤三:训练权重。

     修改后向传送网络的权重

(1)计算输出层神经元的误差斜率:


其中:


计算权重的校正:


更新输出层的权重:


(2)计算隐藏层神经元的误差斜率:


计算权重的校正:


更新隐藏层神经元的权重:


步骤四:迭代。

迭代p加1,回到步骤二,重复以上过程直至满足误差的平方和满足要求为止。(完)

来自: http://blog.csdn.net//u011067360/article/details/22804175

 本文由用户 jopen 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!
 本文地址:https://www.open-open.com/lib/view/open1453126669339.html
机器学习