深入浅出地解释了BP神经网络算法的原理。

深入浅出地解释了BP神经网络算法的原理。

相信大家刚接触神经网络的时候都会遇到BP算法的问题。如何生动快速地理解BP神经网络,是我们学习的高级乐趣(画外音:好玩?你在跟我谈乐趣吗?)

这篇博文简单粗暴地帮助你快速入门BP神经网络。

BP神经网络的定义是什么?看这句话:用“误差反向传播算法”训练的多层前馈网络

BP的思想是用输出后的误差来估计输出层的上一层的误差,再用这一层的误差来估计上一层的误差,从而得到每一层的所有误差估计。这里的误差估计可以理解为一种偏导数,我们据此调整各层的连接权,然后用调整后的连接权重新计算输出误差。直到输出误差满足要求或迭代次数溢出设定值。

毕竟“误差”这个词说了很多,说明这个算法跟误差有很大关系?

是的,BP的传播对象是“误差”,传播的目的是得到各层的估计误差。

其学习规则是:利用最速下降法,通过反向传播(即逐层)不断调整网络的权值和阈值,最终使全局误差系数最小。

它的学习本质是:每个连接权重的动态调整。

拓扑如上图:输入层、隐藏层、输出层。

BP网络的优势在于无需事先指出这种数学关系,就可以学习并存储大量的输入输出关系。那么它是如何学习的呢?

BP用一个处处可导的激活函数来描述这一层的输入输出关系,经常用S型函数δ作为激活函数。

我们现在开始监督BP神经网络学习算法:

1,正向传播得到输出层误差e。

= & gt输入层输入样本= & gt每个隐藏层= & gt输出层

2、判断是否反向传播。

= & gt如果输出层的误差与期望值不匹配= & gt反向传播

3.误差反向传播

= & gt错误显示在所有级别= & gt校正每一层的权重,直到误差降低到可接受的水平。

算法解释起来比较简单,然后通过数学公式就可以知道BP的真实面目。

假设我们的网络结构是一个有n个神经元的输入层,一个有p个神经元的隐藏层和一个有q个神经元的输出层。

这些变量如下:

知道以上变量后,开始计算:

1.用(-1,1)内的随机数初始化一个误差函数,设置精度ε,最大迭代次数m。

2.随机选择第k个输入样本和相应的期望输出。

重复以下步骤,直到误差满足要求:

3、计算隐层中每个神经元的输入和输出。

4.计算误差函数e对输出层每个神经元的偏导数,根据输出层的期望输出和实际输出,输出层的输入等参数计算。

5.计算误差函数对隐层每个神经元的偏导数,根据后一层(这里是输出层)的灵敏度(灵敏度后面会介绍)δo(k),后一层的连接权值w,本层的输入值进行计算。

第六,使用第四步中的偏导数来校正输出层的连接权重。

7、利用第五步中的偏导数修正隐含层的连接权值。

八、计算全局误差(m个样本,q个类别)

介绍了比较具体的计算方法,然后用一个比较简单的数学公式大致概括了一下过程。相信看完上面的详细步骤,我会有一些了解和领悟。

假设我们的神经网络是这样的,此时有两个隐层。

我们先来了解一下什么是敏感。

请看下面的公式:

这个公式是误差对B的偏导数,这个B是什么?它是一个基数,灵敏度δ是误差对基数的变化率,也就是导数。

因为?u/?B=1,所以呢?E/?b=?E/?U=δ,也就是说偏差基础的灵敏度?E/?b =δ等于误差e对一个节点所有输入u的导数?E/?u .

也可以认为这里的灵敏度等于误差e对该层输入的导数。注意这里的输入是上图中U层的输入,也就是层和层权重计算完成后的输入。

每个隐藏层的第一层的敏感度是:

"?"这里说每个元素的乘法,不明白的可以和上面的详细公式相比。

输出图层的灵敏度计算方法不同,如下所示:

最终校正权重是灵敏度乘以该层的输入值。注意,这里的输入是没有乘以权重的输入,也就是上图中的Xi水平。

对于每个权重(W)ij,都有一个特定的学习率ηIj,该学习率由算法学习。