BP 算法

预备知识

在开始之前,首先需要补充一点预备知识。

1. 激活函数sigmoid函数:

sigmoid 函数是人工智能神经网络中最常使用的一类激活函数,其数学表达式为:

bp 神经网络 表达式 bp神经网络的函数_权重


sigmoid函数有一个重要的性质:f’(x) = f(x)[1-f(x)],这个性质在我们求导的过程中起了很大的作用。

2. 梯度下降策略

bp 神经网络 表达式 bp神经网络的函数_机器学习_02


其中,学习率一塔我们设定为0.5

接下来我们进入正题,BP算法总共分为两个部分,第一个部分是FP(前馈计算计算误差)过程,我们用来计算误差;第二个部分是BP(反馈计算更新权重),我们用来更新权重W;

一、 FP过程

bp 神经网络 表达式 bp神经网络的函数_神经网络_03


想必大家都已经了解到神经网络的结构,这里我就不做过多的解释了,其中l1, l2是这个神经网络的输入层,h1,h2,h3是这里的隐藏层,O1,O2是我这个神经网络的输出层,其中w表示权重,b表示偏置项(b可以理解为一次函数中的y = kx + b 中的常数项,在这里我们取b1 = 0.35, b2 = 0.65,其实 b1, b2 我们可以取任意值,在此不影响结论)。为了方便更直观的解释,我们来设定一下权重值和偏置项的值:

bp 神经网络 表达式 bp神经网络的函数_迭代_04

下面我们就来进行前馈计算:
首先我们以h1为例:

在此,我要补充一个知识:

一个神经元节点,它分为两个部分,如图所示:

bp 神经网络 表达式 bp神经网络的函数_权重_05

左边一部分是我们的输入值,我们称之为net(h1),net(h1)经过sigmoid函数激活之后,我们可以得到Out(h1)这就是我们隐藏层的一个输出结果。

下面我们来进行计算h1的误差:

net(h1) = w1 * l1 + w2 * l2 + b1=2.35

(你可以发现, h1是由w1和w2 连接而成的)
然后,经过sigmoid函数激活之后我们可以得到,

Out(h1) = sigmoid(net(h1))=0.912934

同理,可得:

Out(h2) = 0.979164
Out(h3) = 0.995275

有了这三个数值,我们可以算出输出层O1,O2的误差:

net(O1)= W7 * Outh1 + W9 * Outh1 + W11 * Outh3 + b2 = 2.1019206
经过sigmoid函数激活之后,我们可以得到:

Outh1 = sigmoid(neth1) = 0.891090

同理,可得:

Out h2 = 0.904330

然后,我们可以得到总误差,这里我们记作Etotal(这里我们将Out h1, Out h2 简称为 O1, O2):

bp 神经网络 表达式 bp神经网络的函数_机器学习_06

这里的1/2是为了后面反馈计算方便而添加的。
到此为止,我们已经完成了前馈计算,并且算出了总误差值。

二、 BP过程

(1).更新(hidden layer ----- Output layer)

这里的BP过程,我们是用来更新W的值,使预测结果更加精确。在此,我们以W7为例。

这里我们需要用到高等数学里的链式法则,W7与下列因素相关:

bp 神经网络 表达式 bp神经网络的函数_权重_07


根据链式法则,我们可得:

bp 神经网络 表达式 bp神经网络的函数_神经网络_08

其中,等式右边第一项等于:

bp 神经网络 表达式 bp神经网络的函数_迭代_09


第二项等于:

bp 神经网络 表达式 bp神经网络的函数_迭代_10


第三项等于:

bp 神经网络 表达式 bp神经网络的函数_权重_11

所以,我们可以得到总式:

bp 神经网络 表达式 bp神经网络的函数_迭代_12

最后,我们求得w7的更新结果:

bp 神经网络 表达式 bp神经网络的函数_迭代_13

同理,我们可得:

bp 神经网络 表达式 bp神经网络的函数_神经网络_14


(w1-w6 求解方法见下)

(2).更新(Input layer ----hidden layer)

这里我们以w1 为例:

这里还是应用高等数学里的链式法则,w1与下列因素有关:

bp 神经网络 表达式 bp神经网络的函数_权重_15


bp 神经网络 表达式 bp神经网络的函数_bp 神经网络 表达式_16

所以,我们得到求导公式:

bp 神经网络 表达式 bp神经网络的函数_bp 神经网络 表达式_17


这里以Eo1对Outh1的求导为例:

bp 神经网络 表达式 bp神经网络的函数_迭代_18

同理可得Eo2对h1的求导公式:

bp 神经网络 表达式 bp神经网络的函数_bp 神经网络 表达式_19

所以我们求得更新后的w1的值:

bp 神经网络 表达式 bp神经网络的函数_bp 神经网络 表达式_20

同理可得(w1 - w6):

bp 神经网络 表达式 bp神经网络的函数_迭代_21

至此,w的权重值已完成一次迭代周期。事实上,要想预估的更准确,我们需要上百次甚至上千次的迭代,直至我们权重最终的更新值图像对于实际值收敛。

代码实现:

bp 神经网络 表达式 bp神经网络的函数_神经网络_22

总结:

bp算法在我们现实中有很多应用,比如,根据某一商店的去年的销量,我们可以来预测今年的销量······我这里只做了简单的算法的数学推算,有许多不足之处,希望大家指正。