神经网络学习(三)——BP神经网络算法

前面学习了感知器和自适应线性神经网络。

下面介绍经典的三层神经网络结构,其中每个神经元的激活函数采用Sigmoid。PS:不同的应用场景,神经网络的结构要有针对性的设计,这里仅仅是为了推导算法和计算方便才采用这个简单的结构。

训练步骤:

1.正向传播

2.反向传播(BP)

3.一次正反向传播为一次训练,迭代。

BP算法计算方法:

参数初始化:

正向传播:

隐藏层到输出层:

反向传播:

1.计算误差(欧几里得距离):

2.隐藏层到输出层的权值及偏置b的更新(以W5为例):

(白话解释:权重w的大小能直接影响输出,w不合适那么会使得输出误差。要想直到某一个w值对误差影响的程度,可以用误差对该w的变化率来表达。如果w的一点点变动,就会导致误差增大很多,说明这个w对误差影响的程度就更大,也就是说,误差对该w的变化率越高。而误差对w的变化率就是误差对w的偏导。)

看下图,总误差的大小首先受输出层神经元O1的输出影响,继续反推,O1的输出受它自己的输入的影响,而它自己的输入会受到w5的影响。这就是连锁反应,从结果找根因。

因此,得到W5的偏导:

(sigmoid求导公式:y=\frac{1}{e^{-x}+1} \,\,\,\,\,\,\,\,\,\, y^{'}=y\ast (1-y))

因此,可以得到:

同理,更新输出层偏置b:

输出层W的更新公式:

输出层b的更新公式:

3.输入层到隐藏层的权值及偏置b更新:

以更新w1为例: 仔细观察,我们在求w5的更新,误差反向传递路径输出层-->隐层,即out(O1)-->in(O1)-->w5,总误差只有一根线能传回来。但是求w1时,误差反向传递路径是隐藏层-->输入层,但是隐藏层的神经元是有2根线的,所以总误差沿着2个路径回来,也就是说,计算偏导时,要分开来算。看图:

那么,现在开始算总误差对w1的偏导:

先运算:

可以得到:

依次进行计算:

猜你喜欢

转载自blog.csdn.net/weixin_41846267/article/details/83096340