前向神经网络算法原理

转载 2016年10月18日 12:00:18

总体上来讲,神经网络的算法是比较复杂的,后面有非常精妙的数学原理,而且对这些数学方法,还需要证明其具有收敛性,所以很多神经网络的书籍,绝大部分都是一些数学模型介绍、推导和证明,对于非数学专业的我们来说,感沉像看天书一样。其实神经网络的精髓是将现实中的问题进行抽象,建立适合神经网络表示的模型,然后应用神经网络进行处理,不断调整优化网络结构和参数,直到最终达到满意的效果。所以成功应用神经网络,不需要太过高深的数学基础。但是如果可以适当掌握神经网络背后的数学原理,对于我们理解参数的含义,选择合适的网络结构等都具有重要的意义。

所以在本篇文章中,我们就对最简单的前向网络(BP)网络进行一下数学上的描述,这基本上是神经网络最础的算法模型,对于理解其他深度学习算法,具有非常重要的基础作用,如果立志于深度学习领域的研发工作,理解BP网络是必须的。

我们首先从最简单的感知器模型说起,所谓感知器就是一个具有N维输入的神经元,同时具有一个偏移量bias,其处理是先对输入信号进行求合,然后进行一个非线性运算(神经元的激活函数),得出的值既为该神经元的输出,如下图所示:


神经元首先对输入信号进行求合运算:

 式7.1

然后经过非线性运算(神经元的激活函数),通常为Sigmal函数或Tanh函数,这里以Sigmal函数为例,但是实际应用中,经验表明双曲正切作为激活函数可能收敛更快,具有更好的性能。

 式7.2

该函数的图形为:


如上图所示,其值域为(0, 1),可以代表事件的出现概率等概念。

在这里,我们以讨论在线学习算法为主,即每经过一个学习样本,就对权值进行一次调整。与此对应的是,可以进行离线学习,就将所有训练样本都运行一次,然后统一调整一次权值。以及近代为了提高算法效率和适应性,采用了批量处理方式,既以某个批量如100个训练样本,运行一次,根据汇总误差,调整权值,然后进行下一个批次的学习,综合了在线学习和离线学习各自的优点。但是无论是在线学习、离线学习还是批量学习,算法框架都是一样的,所不同的只是对误差处理方式的不同。所以我们以最简单的在线学习为例进行讲解。

对于某个特定的训练样本n,输入到神经网络之后,会产生一个输出,而训练样本正确的输出应该为就是神经网络对第n个训练样本产生的误差,假设我们定义学习率为ℇ,则我们可以根据误差对相应的权值进行调整,可以将权值调整公式定义为:

 式7.3

上面的公式可以用于在线学习时权值调整公式,但是如果对每个训练样本都进行权值调整,可能出现由于不同样本的误差不同,而权值调整出现震荡的情况,使学习收敛速度变慢,因此实际中通常使用的是批量学习,下面我们来讨论批量学习。

如果我们定义所有训练样本数目为D,或者批量学习中批量的大小为D,则我们可以定义误差为:

 式7.4

如果对于激活函数为线性函数的神经元,例如只是原封不动地将输入信息之合输出,则很容易求出权值调整公式:

 式7.5

根据上面的误差定义公式,可以得到如下结论:

 式7.6


所以对于线性神经元来说,其权值调整计算公式为:

    式7.6.1

 式7.7

但是目前主流神经网络中,神经元都不是线性的,例如其为Sigmal函数,所以其权值求导公式需要用到链式求导公式,对式7.6而言,由于神经元激活函数不是线性的,所以式中就不等于了,我们只能根据链式求导公式:

 式7.8

由于式7.1 可知:

 式7.9

由于式7.2,则可以推导出:

 式7.10

代入7.6公式,可以得到如下公式:

 式7.11

 式7.12

以上就是感知器模型算法的推导过程,可以看出,只是简单的感知器模型,后面的数学原理也是非常复杂的。

我们在有了这些基础知识之后,我们就可以开始着手理解多层网络的BP算法了,在下一篇博文中,我们将具体讨论BP算法的推导过程。需要注意的是,我们在这里推导这些算法,并不意味着我们在实际算法实现中,要按照这些算法来编程序。因为我们如果按照这些理论来编程,我们自己无法对矩阵等算法进行优化,同时也无法利用GPU,总之我们自己的算法效率与Theano或TensorFlow相比,在效率上要低很多,所以我们还是要采用Theano来进行具体的算法实现。

深度学习(Deep Learning)读书思考二:前向神经网络

概述 深度学习也是机器学习的一种,是由前向神经网络或者多层感知机算法演化而来,由于计算资源和可计算数据增加,神经网络的效果逐渐浮现出来,从而迎来了蓬勃发展。本节主要介绍深度学习中基础网络结构前...
  • fangqingan_java
  • fangqingan_java
  • 2016年11月20日 11:25
  • 1968

神经网络中的前向和后向算法

最近深度学习的研究在学界火的一塌糊涂,大老板终于也下定决心组织实验室开展相关研究了,何况实验室的主流方向是做成像的,不做点这方面的研究感觉说不过去。研究生小朋友们刚进来还得看视觉方面的东西,博三博四的...
  • cc514981717
  • cc514981717
  • 2017年06月28日 11:00
  • 2178

前向型神经网络之BPNN(附源码)

神经网络 静态神经网络 BP算法 前向型神经网络 BPNN 人工神经网络 误差反向传播算法 Back Propagation 数据挖掘 机器学习...
  • heyongluoyao8
  • heyongluoyao8
  • 2015年09月04日 20:57
  • 25699

C++从零实现深度神经网络之二——前向传播和反向传播

本文由@星沉阁冰不语出品,转载请注明作者和出处。文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/53674544微博:http:/...
  • xingchenbingbuyu
  • xingchenbingbuyu
  • 2016年12月15日 23:55
  • 5045

深度学习:神经网络中的前向传播和反向传播算法推导

1. 神经网络这是一个常见的神经网络的图:这是一个常见的三层神经网络的基本构成,Layer L1是输入层,Layer L2是隐含层...
  • raintungli
  • raintungli
  • 2017年08月08日 16:53
  • 22630

Hinton Neural Networks课程笔记2a:三种主要的神经网络框架之前向网络、循环神经网络和对称网络

这一节主要是介绍了三种主要的神经网络模型:前向网络、循环神经网络和对称网络前向网络 Feed-forward Neural Networks如果把神经元看做节点,把神经元的输出到另一个神经元的输入看做...
  • silent56_th
  • silent56_th
  • 2017年07月23日 14:56
  • 562

神经网络中的前向和后向算法

看了一段时间的深度网络模型,也在tf和theano上都跑了一些模型,但是感觉没有潜下去,对很多东西的理解都只停留在“这个是干什么的”层次上面。昨天在和小老师一起看一篇文章的时候,就被问到RNN里面的后...
  • sinat_33718563
  • sinat_33718563
  • 2017年12月21日 16:24
  • 41

神经网络(前向传播和反向传导)

谓神经网络就是将许多个单一“神经元”(图1)联结在一起,这样,一个“神经元”的输出就可以是另一个“神经元”的输入,如图2所示。...
  • dcxhun3
  • dcxhun3
  • 2015年07月08日 14:57
  • 2283

使用keras实现简单的前向全连接神经网络

转载的原博客地址如下: http://machinelearningmastery.com/tutorial-first-neural-network-python-keras/ 下面是对该博...
  • lujiandong1
  • lujiandong1
  • 2017年02月03日 15:23
  • 2384

神经网络-前向传播

转载请标明出处:小帆的帆的专栏特点方向:从左往右 作用:由最左边的输入,计算出最右边的输出记号下面的推导和实践中会用到这些记号X: 泛指数据集,不明确说明是用于,训练、验证还是测试 y: 泛指数据...
  • wo334499
  • wo334499
  • 2016年09月29日 10:45
  • 1142
收藏助手
不良信息举报
您举报文章:前向神经网络算法原理
举报原因:
原因补充:

(最多只允许输入30个字)