复习一下BP主要整理了两篇博客,通过一个实际的例子来讲解优化思路,很方便理解BP算法的传播流程。两篇博客见文章末尾

1.什么是神经网络

神经网络又称为人工神经网络(Artificial Neural Network , ANN),是指一系列受生物学和神经科学启发,而构造的数学模型。下图便是一个简单的神经元模型

人工神经网络bp 人工神经网络bp原理绘图_人工神经网络bp


神经元是形成神经网络的基本单元,如上图示,激活函数决定了该神经元是否有输出值,所以激活函数在此数学模型中至关重要。因其位置的特殊性,需要有以下特点:

  • 连续可导
  • 函数及其导数尽可能简单,可提高网络计算效率
  • 值域要在合适的区间内。

综上,目前常使用的激活函数有如下几个:Sigmoid函数,ReLU函数,Swish函数,GELU函数,Maxout单元等。

神经元结构,只是神经网络的基础单元。而神经网络的组建则需要许多神经元进行协同传输。常用的网络结构有如下三种:前馈网络,记忆网络,和图网络。

人工神经网络bp 人工神经网络bp原理绘图_算法_02


2.神经元传播原理

人工神经网络bp 人工神经网络bp原理绘图_算法_03

人工神经网络bp 人工神经网络bp原理绘图_python_04

那么向前传播的路径为:输入层,隐藏层,输出层。以此顺序计算每个神经元的加权和,直到输出。
人工神经网络bp 人工神经网络bp原理绘图_python_05

此时,神经元人工神经网络bp 人工神经网络bp原理绘图_算法_06开始通过激活函数处理数据 ,并进行输出。我们这里用sigmoid函数。
人工神经网络bp 人工神经网络bp原理绘图_python_07

同理,神经元 人工神经网络bp 人工神经网络bp原理绘图_python_08的输出 人工神经网络bp 人工神经网络bp原理绘图_算法_09 也可以计算出来。 人工神经网络bp 人工神经网络bp原理绘图_深度学习_10

下面是从隐藏层到输出层 ,与上面计算类似,也是各个值乘以权重,计算得到。

人工神经网络bp 人工神经网络bp原理绘图_深度学习_11

同理,可以计算出人工神经网络bp 人工神经网络bp原理绘图_神经网络_12

到这一步,我们的前向传播结束了,我们得到了输出值 [0.75136507,0.772928465]

然而这与实际值[0.01,0.99]相差甚远,所以就需要重新想办法更新权值,重新计算输出。(所以神经网络的训练过程,也就是在不断更新权值的过程)


3.如何更新权值

这时我们就用到了BP(Error Back Propagation Training 误差反向传播)算法,从本质上讲,BP算法就是以网络误差平方为目标函数、采用梯度下降法来计算目标函数的最小值。

步骤如下:

3.1、计算总误差:

人工神经网络bp 人工神经网络bp原理绘图_python_13
因为有两个输出,所以需要计算一下 人工神经网络bp 人工神经网络bp原理绘图_算法_14 , 人工神经网络bp 人工神经网络bp原理绘图_算法_15这两个输出的误差和。
人工神经网络bp 人工神经网络bp原理绘图_神经网络_16

3.2、误差出来了,那么权重对误差到底产生了多少影响呢?这个时候就需要权重对误差求导了。以权重 人工神经网络bp 人工神经网络bp原理绘图_算法_17为例:

人工神经网络bp 人工神经网络bp原理绘图_神经网络_18


配合下图理解为什么这样写链式求导

人工神经网络bp 人工神经网络bp原理绘图_深度学习_19

3.3、下面分别对各个因子求导

计算人工神经网络bp 人工神经网络bp原理绘图_深度学习_20:

人工神经网络bp 人工神经网络bp原理绘图_python_21


计算人工神经网络bp 人工神经网络bp原理绘图_算法_22:

人工神经网络bp 人工神经网络bp原理绘图_深度学习_23


计算人工神经网络bp 人工神经网络bp原理绘图_深度学习_24:

人工神经网络bp 人工神经网络bp原理绘图_深度学习_25


上面三个计算结果相乘:

\cfrac{\varphi E_{total}}{\varphi w_5} = 0.74136507 0.1868156020.593269992

人工神经网络bp 人工神经网络bp原理绘图_python_26


样我们就计算出来整体误差相对于其中一个权重偏导数了,这里面仍需要灌输一个概念:数学只是一个度量,只是表示某种相关关系或者程度的一个度量,其实公式并没有什么实际意义。其所有意义只是人为赋予的某种规律下的总结。

我们设学习速率为 0.5 ,则有新的值

人工神经网络bp 人工神经网络bp原理绘图_深度学习_27


同理,使用同样的方式,可以更新其他权重值。

然后把新的权重值带入,重新计算,用这种方法不断迭代。直到得出满意权重。


4.输入层---->隐含层的权值更新:

方法其实与上面说的差不多,但是有个地方需要变一下,在上文计算总误差对w5的偏导时,是从out(o1)---->net(o1)---->w5,但是在隐含层之间的权值更新时,是out(h1)---->net(h1)---->w1,而out(h1)会接受E(o1)和E(o2)两个地方传来的误差,所以这个地方两个都要计算。

人工神经网络bp 人工神经网络bp原理绘图_算法_28

人工神经网络bp 人工神经网络bp原理绘图_算法_29


人工神经网络bp 人工神经网络bp原理绘图_算法_30


人工神经网络bp 人工神经网络bp原理绘图_神经网络_31


5.如何确定中间层的隐藏节点个数?

在BP神经网络中,输入层和输出层的节点个数都是确定的,而隐含层节点个数不确定,那么应该设置为多少才合适呢?实际上,隐含层节点个数的多少对神经网络的性能是有影响的,有一个经验公式可以确定隐含层节点数目,如下:

人工神经网络bp 人工神经网络bp原理绘图_python_32

其中,h 位隐含层节点数,m 为输入层节点数目,n为输出层节点数目。a为1~10之间的调节常数。

以上便是神经网络的反向传播原理。

6.参考

1.神经网络BP算法 2.神经网络的基础理解以及反向传播优化原理(BP神经网络)