深入浅出地解释了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,该学习率由算法学习。