深入浅出BP神经网络算法的原理
Posted 深度学习科研平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入浅出BP神经网络算法的原理相关的知识,希望对你有一定的参考价值。
BP神经网络是怎样的一种定义?看这句话:一种按“误差逆传播算法训练”的多层前馈网络。
BP的思想就是:利用输出后的误差来估计输出层前一层的误差,再用这层误差来估计更前一层误差,如此获取所有各层误差估计。这里的误差估计可以理解为某种偏导数,我们就是根据这种偏导数来调整各层的连接权值,再用调整后的连接权值重新计算输出误差。直到输出的误差达到符合的要求或者迭代次数溢出设定值。
说来说去,“误差”这个词说的很多嘛,说明这个算法是不是跟误差有很大的关系?
没错,BP的传播对象就是“误差”,传播目的就是得到所有层的估计误差。
它的学习规则是:使用最速下降法,通过反向传播(就是一层一层往前传)不断调整网络的权值和阈值,最后使全局误差系数最小。
它的学习本质就是:对各连接权值的动态调整
神经网络是一种方法,既可以用来做有监督的任务,如分类、视觉识别等,也可以用作无监督的任务。首先,我们看一个简单的例子。如下图所示(这个图网上有很多人引用了,但我找不到出处,欢迎指正),如果我们想训练一个算法可以使其识别出是猫还是狗,这是很简单的一个分类任务,我们可以找一条线(模型),在这个二元坐标中进行“一刀切”,把这两组数据分开。我们知道,在解析几何中,这条直线可以用如下的公式表达:
这里的W1和W2就是两个坐标轴上的系数,可以称为权重。W0可以称作截距,也叫做偏移。新来一个数据点,也就是一组输入值(X1,X2),如果在这条线的左边,那么它就是一只狗,如果在右边就是一只猫了。这就可以用一个简单的神经网络来表示。如图2所示,X1和X2分别是输入值,Y是输出值,两条边的权重分别是W1和W2。这是一个最简单的神经网络了。这就是使用神经网络定义了一个线性分类器了。这里的一个圆形的节点就是一个神经元。我们也可以采用另一种方式,即在输入输出之间加一个中间节点S,然后增加一个输出层,包括两个节点Y1和Y2,分别对应猫和狗,
最后哪个输出节点的值大,那么这个数据就属于哪个类别(猫或者狗)。
对于简单的二分类问题这就可以解决了。但在实际情况中,有很多问题无法
简单的使用“一刀切”的方式解决,如图3所示,假设猫和狗的数据分布如
下图,那么这就无法用“一刀切”的方式来解决了,但是我们可以切两刀,
横竖各一刀,然后把相同的“块”联合起来,这样就解决了比较复杂的分类问题了。也有些问题,需要用曲线来分割。在这种情况下,我们就需要比较
复杂一点的神经网络了。以曲线为例,我们可以设计出一个三层的神经网络。
这就是用神经网络设计的一个非线性分类器。理论上讲,如何一个分类器都可以设计一个神经网络来表征,也就是说,不管实际图形如何,我们都可以
设计一个神经网络来拟合。到这里,可能有人问,每个节点的这个函数要如何选择?根据吴军老师《数学之美》第二版中的说法,为了提供人工神经网络的通用性,我们一般规定每个神经元的函数只能针对其输入的变量做一次
非线性的变换。举个例子说就是假如某个神经元Y 的输入值是X1,X2,...Xn,它们的边的权重分别为W1,W2,...Wn,那么计算Y节点的值分两步进行,第一步是计算来自输入值的线性组合:
第二步是计算y=f(G),这里的f(⋅)可以使非线性的,但因为里面的参数是一个具体的值,所以不会很复杂。这两个步骤的结合使得人工神经网络既灵活又不至于太复杂。这里的f(⋅)就是激活函数。线性模型的表达能力不够,它的作用就是来增强模型的表示能力。人工神经网络可以很多层连接在一起,因此在人工神经网络中,主要的工作就是设计结构(基层网络,每层几个节点等)和激活函数。我们常用的激活函数包括Sigmoid函数、ReLU函数、Tanh函数等等。如下图所示,这是几种简单的激活函数的示意图
BP 神经网络原理
BP(Back Propagation)神经网络的学习过程由信号的正向传播与误差的反向传播两个过程组成。正向传播时,输入样本从输入层传入,经隐层逐层处理后,传向输出层。若输出层的实际输出与期望输出不符,则转向误差的反向传播阶段。误差的反向传播是将输出误差以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。BP网络由输入层﹑输出层和隐层组成,N1N1 为输入层, NmNm为输出层,其余为隐层。BP 神经网络的结构如下:
这里介绍三层神经网络的推导(一个输入层、一个隐层和一个输出层)
BP 神经网络反向传播算法的神经元示意图图一:
上图描绘了神经元jj被它左边的一层神经元产生的一组函数信号所馈给。mm是作用于神经元jj的所有输入不包括偏置的个数。突触权值wj0(n)wj0(n)等于神经元jj的偏置bjbj。
1.前向传播过程推导
图一中,在神经元jj的激活函数输入处产生的诱导局部域vj(n)vj(n)(即神经元jj 的输入)是:
误差反向传播过程推导
在图一中,
yj(n)
其中,
dj(n)
为了使函数连续可导,这里最小化均方根差,定义神经元
j
将所有输出层神经元的误差能量相加,得到整个网络的全部瞬时误差能量:
其中,集合C 包括输出层的所有神经元。
BP 算法通过反复修正权值使式(2-5)EnEn最小化,采用梯度下降法对突触权值wji(n)wji(n)应用一个修正值Δwji(n)∆wji(n)它正比于偏导数δδE(n)/E(n)/δδwji(n)wji(n)。根据微分链式规则,把这个梯度表示为:
偏导数
δ
在式(2-5)两边对
ej(n)
在式(2-3)两边对
yj(n)
在式(2-2)两边对
vj(n)
最后在式(2-1)两边对
wji(n)
将式(2-7)——(2-10)带入式(2-6)得:
应用于
wji(n)
其中,
η
将式(2-11)带入式(2-12)得:
其中,
δj(n)
局部梯度指明了突触权值所需要的变化。
现在来考虑神经元jj所处的层。
(1) 神经元jj是输出层节点
当神经元jj位于输出层时,给它提供了一个期望响应。根据式(2-3)误差信号ej(n)=dj(n)−yj(n)ej(n)=dj(n)−yj(n)确定,通过式(2-14)得到神经元jj的局部梯度δj(n)δj(n)为:
(2) 神经元jj是隐层节点
当神经元jj位于隐层时,没有对该输入神经元的指定期望响应。隐层的误差信号要根据所有与隐层神经元直接相连的神经元的误差信号向后递归决定。
考虑神经元jj为隐层节点,隐层神经元的局部梯度δj(n)δj(n)根据式(2-14)重新定义为:
来看图二:它表示输出层神经元
k
在这里下标
j
图二中,网络的全部瞬时误差能量为:
在式(2-17)两边对函数信号
yj(n)
在图二中:
因此,
图二中,对于输出层神经元
k
求式(2-21)对
yj(n)
将式(2-20)和(2-22)带入到式(2-18)得到
将式(2-23)带入式(2-16)得隐层神经元
j
反向传播过程推导总结
因此,结合式(2-13)、(2-15)和(2-24),由神经元
i
其中:
神经元jj是输出层节点时,局部梯度δj(n)δj(n)等于倒数ϕ′j(vj(n))ϕj′(vj(n))和误差信号ej(n)=dj(n)−yj(n)ej(n)=dj(n)−yj(n)的乘积,见式(2-15);
神经元jj是隐层节点时,局部梯度δj(n)δj(n)等于倒数ϕ′j(vj(n))ϕj′(vj(n))和下一层(隐层或输出层)的δkδk与权值加权和的乘积,见式(2-24)。
以上是关于深入浅出BP神经网络算法的原理的主要内容,如果未能解决你的问题,请参考以下文章