神经网络 误差逆传播算法推导 BP算法

??误差逆传播算法是迄今最成功的神经网络学习算法,现实任务中使用神经网络时,大多使用BP算法进行训练。

??给定训练集\(D={(x_1,y_1),(x_2,y_2),......(x_m,y_m)},x_i \in R^d,y_i \in R^l\),即输入示例由\(d\)个属性描述,输出\(l\)个结果。如图所示,是一个典型的单隐层前馈网络,它拥有\(d\)个输入神经元、\(l\)个输出神经元、\(q\)个隐层神经元,其中,\(\theta_j\)表示第\(j\)个神经元的阈值,\(\gamma_h\)表示隐层第\(h\)个神经元的阈值,输入层第\(i\)个神经元与隐层第\(h\)个神经元连接的权值是\(v_{ih}\),隐层第\(h\)个神经元与输出层第\(j\)个神经元连接的权值是\(w_{hj}\)。

??于是,按照神经网络的传输法则,隐层第\(h\)个神经元接收到的输入\(\alpha_h=\sum_{i=1}^dv_{ih}x_i\),输出\(b_h=f(\alpha_h-\gamma_h)\),输出层\(j\)第个神经元的输入\(\beta_j=\sum_{h=1}^qw_{hj}b_h\),输出\(\widehat{y}_j^k=f(\beta_j-\theta_j)\),其中函数是“激活函数”,\(\gamma_h\)和\(\theta_j\)分别是隐藏层和输出层的阈值,选择Sigmoid函数\(f(x)=\frac{1}{1+e^{-x}}\)作为激活函数。

??对训练样例\((x_k,y_k)\),通过神经网络后的输出是\(\widehat{y}_k=(\widehat{y}_1^k,\widehat{y}_2^k,......,\widehat{y}_l^k)\),则其均方误差为\[E_k=\frac{1}{2}\sum_{j=1}^{l}(\widehat{y}_j^k-y_j^k)^2\tag{1}\]

为了使输出的均方误差最小,我们以均方误差对权值的负梯度方向进行调整,给定学习率\(\eta\),\[\Delta w_{ij}=-\eta\frac{\partial E_k}{\partial w_{ij}}\tag{2}\]这里为什么是取负梯度方向呢?因为我们是要是均方误差最小,而\(w\)的更新估计式为\[w=w+\Delta w\tag{3}\]如果,\(\frac{\partial E_k}{\partial w_{ij}}>0\),则表明减小\(w\)才能减小均方误差,所以\(\Delta w\)应该小于零,反之,如果\(\frac{\partial E_k}{\partial w_{ij}}<0\),则表明增大\(w\)的值可以减小均方误差,所以所以\(\Delta w\)应该大于零,所以在这里取负的偏导,以保证权值的改变是朝着减小均方误差的方向进行。

??在这个神经网络中,\(E_k\)是有关\(\widehat{y}_j^k\)的函数,\(\widehat{y}_j^k\)是有关\(\beta_j\)的函数,而\(\beta_j\)是有关\(w_{ij}\)的函数,所以有\[\frac{\partial E_k}{\partial w_{ij}}=\frac{\partial E_k}{\partial \widehat{y}_j^k}.\frac{\partial \widehat{y}_j^k}{\partial \beta_j}. \frac{\partial \beta_j}{\partial w_{ij}}\tag{4}\]显然,\[\frac{\partial \beta_j}{\partial w_{ij}}=b_h\tag{5}\]

而对Sigmoid函数有\[f‘(x)=f(x)(1-f(x))\tag{6}\]所以\[
\begin{aligned}g_j&=-\frac{\partial E_k}{\partial \widehat{y}_j^k}\cdot\frac{\partial \widehat{y}_j^k}{\partial \beta_j}\&=-(\widehat{y}^k_j-y^k_j)f(\beta_j-\theta_j)\&=-(\widehat{y}^k_j-y^k_j)f(\beta_j-\theta_j)(1-f(\beta_j-\theta_j))\&=-(\widehat{y}^k_j-y^k_j)\widehat{y}^k_j(1-\widehat{y}^k_j)\tag{7}
\end{aligned}
\]

将式(7)代入式(3)和式(4),就得到BP算法中关于\(\Delta w_{ij}\)的更新公式\[\Delta w_{ij}=\eta g_jb_h\tag{8}\]类似可得,

\[\Delta \theta_j=-\eta g_j\tag{9}\]\[\Delta v_{ih}=\eta e_hx_i\tag{10}\]\[\Delta \gamma_h=-\eta e_h\tag{11}\]

其中,式(10)和式(11)

\[\begin{aligned}e_h&=-\frac{\partial E_k}{\partial b_h}.\frac{\partial b_h}{\partial \alpha_h}\\&=-\sum_{j=1}^l\frac{\partial E_k}{\partial \beta_j}.\frac{\partial \beta_j}{\partial b_h}f‘(\alpha_h-\gamma_h)\\&=\sum_{j=1}^lw_{hi}g_jf‘(\alpha_h-\gamma_h)\\&=b_h(1-b_h)\sum_{j=1}^lw_{hj}g_j\end{aligned}\tag{12}\]

??至此,误差逆传播算法的推导已经完成,我们可以回过头看看,该算法为什么被称为误差逆传播算法呢?误差逆传播,顾名思义是让误差沿着神经网络反向传播,根据上面的推导,

\(\Delta w_{ij}=\eta(y^k_j-\widehat{y}^k_j).\frac{\partial \widehat{y}_j^k}{\partial \beta_j}.b_h=\eta g_jb_h\),其中,\((y^k_j-\widehat{y}^k_j)\)是输出误差,\(\frac{\partial \widehat{y}_j^k}{\partial \beta_j}\)

是输出层节点的输出\(y\)对于输入\(\beta\)的偏导数,可以看做是误差的调节因子,我们称\(g_j\)为“调节后的误差”;而\(\Delta v_{ih}=\eta e_hx_i\),\(e_h=b_h(1-b_h)\sum_{j=1}^lw_{hj}g_j=\frac{\partial b_h}{\partial \alpha_h}\sum_{j=1}^lw_{hj}g_j\),所以\(e_h\)可以看做是“调节后的误差”\(g_j\)通过神经网络后经过调节的误差,并且我们可以看出:权值的调节量=学习率x调节后的误差x上层节点的输出,算是对于误差逆向传播法表面上的通俗理解,有助于记忆。<\font>

时间: 2024-11-08 22:11:59

神经网络 误差逆传播算法推导 BP算法的相关文章

误差逆传播(error BackPropagation, BP)算法推导及向量化表示

1.前言 看完讲卷积神经网络基础讲得非常好的cs231后总感觉不过瘾,主要原因在于虽然知道了卷积神经网络的计算过程和基本结构,但还是无法透彻理解卷积神经网络的学习过程.于是找来了进阶的教材Notes on Convolutional Neural Networks,结果刚看到第2章教材对BP算法的回顾就犯难了,不同于之前我学习的对每一个权值分别进行更新的公式推导,通过向量化表示它只用了5个式子就完成了对连接权值更新公式的描述,因此我第一眼看过去对每个向量的内部结构根本不清楚.原因还估计是自己当初

读懂反向传播算法(bp算法)

原文链接:这里 介绍 反向传播算法可以说是神经网络最基础也是最重要的知识点.基本上所以的优化算法都是在反向传播算出梯度之后进行改进的.同时,也因为反向传播算法是一个递归的形式,一层一层的向后传播误差即可,很容易实现(这部分听不懂没关系,下面介绍).不要被反向传播吓到,掌握其核心思想就很容易自己手推出来. 思想 我们知道神经网络都是有一个loss函数的.这个函数根据不同的任务有不同的定义方式,但是这个loss函数的目的就是计算出当前神经网络建模出来输出的数据和理想数据之间的距离.计算出loss之后

多层神经网络BP算法 原理及推导

首先什么是人工神经网络?简单来说就是将单个感知器作为一个神经网络节点,然后用此类节点组成一个层次网络结构,我们称此网络即为人工神经网络(本人自己的理解).当网络的层次大于等于3层(输入层+隐藏层(大于等于1)+输出层)时,我们称之为多层人工神经网络. 1.神经单元的选择 那么我们应该使用什么样的感知器来作为神经网络节点呢?在上一篇文章我们介绍过感知器算法,但是直接使用的话会存在以下问题: 1)感知器训练法则中的输出 由于sign函数时非连续函数,这使得它不可微,因而不能使用上面的梯度下降算法来最

三层神经网络自编码算法推导和MATLAB实现 (转载)

转载自:http://www.cnblogs.com/tornadomeet/archive/2013/03/20/2970724.html 前言: 现在来进入sparse autoencoder的一个实例练习,参考Ng的网页教程:Exercise:Sparse Autoencoder.这个例子所要实现的内容大概如下:从给定的很多张自然图片中截取出大小为8*8的小patches图片共10000张,现在需要用sparse autoencoder的方法训练出一个隐含层网络所学习到的特征.该网络共有3

BP算法详解

说到神经网络,大家看到这个图应该不陌生: 这是典型的三层神经网络的基本构成,Layer L1是输入层,Layer L2是隐含层,Layer L3是隐含层,我们现在手里有一堆数据{x1,x2,x3,-,xn},输出也是一堆数据{y1,y2,y3,-,yn},现在要他们在隐含层做某种变换,让你把数据灌进去后得到你期望的输出.如果你希望你的输出和原始输入一样,那么就是最常见的自编码模型(Auto-Encoder).可能有人会问,为什么要输入输出都一样呢?有什么用啊?其实应用挺广的,在图像识别,文本分类

深度学习算法实践8---BP算法详解

BP算法是关于误差的反向传播算法,就是从输出层开始,将结果与预期结果相比较,求出误差,然后按照梯度最大下降方向,调整神经元的联接权值,然后依次逐层调整各层之间的连接权值,对于批量学习方式而言,不断重复上述过程,直到误差达到足够小时为止. 对于输出层而言,我们可以直接使用在上一篇博文中关于感知器模型的算法,BP算法的难点在于,如何处理隐藏层,因为隐藏层没有正确的输出信息用来计算误差. 下面我们将从输出层开始,推导出BP算法.在rwy推导算法之前,我们先来定义一下表示方法,和原来一样,我们用i来表示

今天开始学Pattern Recognition and Machine Learning (PRML),章节5.2-5.3,Neural Networks神经网络训练(BP算法)

转载请注明出处:Bin的专栏,http://blog.csdn.net/xbinworld 这一篇是整个第五章的精华了,会重点介绍一下Neural Networks的训练方法--反向传播算法(backpropagation,BP),这个算法提出到现在近30年时间都没什么变化,可谓极其经典.也是deep learning的基石之一.还是老样子,下文基本是阅读笔记(句子翻译+自己理解),把书里的内容梳理一遍,也不为什么目的,记下来以后自己可以翻阅用. 5.2 Network Training 我们可

深度学习BP算法的推导(附加RNN,LSTM的推导说明)

注:1)这篇文章主要参考Alex Graves的博士论文<Supervised Sequence Labelling with Recurrent Neural Networks> 详细介绍其关于BP算法的推导过程. 2)论文没有提到过偏差的处理,不过如果能耐心推导出论文给出的公式,那么这将十分简单. 3)由于是结合语音训练的,最后是softmax出来是获得有限结果的概率值,然后做交叉熵作为目标函数,所以可能与其他的网络不一致,但是反馈的推导应该是一样的,除了输出层和最后一个隐层之间的个推导.

(转)神经网络和深度学习简史(第一部分):从感知机到BP算法

深度|神经网络和深度学习简史(第一部分):从感知机到BP算法 2016-01-23 机器之心 来自Andrey Kurenkov 作者:Andrey Kurenkov 机器之心编译出品 参与:chenxiaoqing.范娜Fiona.杨超.微胖.汪汪.赵巍 导读:这是<神经网络和深度学习简史>第一部分.这一部分,我们会介绍1958年感知机神经网络的诞生,70年代人工智能寒冬以及1986年BP算法让神经网络再度流行起来. 深度学习掀起海啸 如今,深度学习浪潮拍打计算机语言的海岸已有好几年,但是,