误差逆传播(errorbackpropagation,bp)算法推导及向量化表示

author author     2022-08-05     605

关键词:

1、前言     

看完讲卷积神经网络基础讲得非常好的cs231后总感觉不过瘾,主要原因在于虽然知道了卷积神经网络的计算过程和基本结构,但还是无法透彻理解卷积神经网络的学习过程。于是找来了进阶的教材Notes on Convolutional Neural Networks,结果刚看到第2章教材对BP算法的回顾就犯难了,不同于之前我学习的对每一个权值分别进行更新的公式推导,通过向量化表示它只用了5个式子就完成了对连接权值更新公式的描述,因此我第一眼看过去对每个向量的内部结构根本不清楚。原因还估计是自己当初学习得不够深入,正好离上次自己推导BP算法已经过去挺长时间了,所以重新拿起教材学习复习了一下并逐个对应起来,最终把Notes on Convolutional Neural Networks中的向量化表示搞清楚了。本篇就是对上面的复习和对应过程的详细记录,如果看完并自己推导一遍的话肯定能清楚BP算法的每个更新公式是怎么来的。

2、符号定义

任何不说明符号含义就开始的推导就是耍流氓,所以此部分对用于推导的网络结构和符号进行说明。基本采用了周志华教授的《机器学习》书中的符号定义,不过自己还是做了些符号变更。

网络结构:技术分享

图1. 全连接的网络结构,从上到下依次为输出层、隐含层和输入层

符号说明:

技术分享 :输出层第j个神经元的输出(j=1,2,…,l);

技术分享 :输出层第j个神经元的偏置;

技术分享

:输出层第j个神经元的输入;

技术分享

 :隐含层第h个神经元的输出(h=1,2,…,q);

技术分享 :隐含层第h个神经元的偏置;

技术分享 :隐含层第h个神经元的输入;

技术分享

  :输入层第i个神经元的输入;

技术分享:隐含层第h个神经元和输出层第j个神经元之间的连接权值;

技术分享

:输入层第i个神经元和隐含层第h个神经元之间的连接权值;

例如图1中的两条橙色直线即分别代表上述两个权值所在的连接

3、问题目标

对于某一个样例它的输入可以描述成:

技术分享

已知该输入的期望输出为:

技术分享

而它的实际输出为:

技术分享

我们的目标即为利用上述信息更新网络中的参数,从而使误差减小。

4、详细推导

首先采用均方误差公式来衡量误差:

(1)技术分享

其中我们有:

(2)技术分享

上式的意思是输出层神经元的输出可以由它的输入、偏置再加上激活函数f(*)确定。并且它的输入等于隐含层神经元的输出与连接权值的乘积之和,即:

(3)技术分享

-------------------------下面是隐含层和输出层之间连接权值更新公式的推导-----------------------------

BP算法使用梯度下降法调整参数,从而使误差向减小的方向移动。因此连接权值的更新公式可以表示为:

(4)

技术分享

(5)技术分享

其中式(4)中的技术分享是学习速率。可以看出我们的任务就是求出式(4),然后就可以通过和旧的连接权值相加完成权值的更新。然而式(4)中的偏导数无法直接求出,需要利用链式法则进行转换。为了进行转换我们首先需要知道隐含层和输出层之间的连接权值是如何影响到最终的均方误差E的。显然它首先会影响到输出层神经元的输入技术分享,再影响到输出层神经元的输出技术分享,最终影响到均方误差E。所以根据上述描述我们可以构造出链式法则:

(6)技术分享

式(6)中的三个偏导数从左到右依次为:输出层神经元j的输出对均方误差的影响,输出层神经元j的输入对它自己的输出的影响,我们所要更新的连接权值对输出层神经元j的输入的影响。

之后问题就可以转化为求解这三个偏导数

[1] 根据式(1)我们很容易得到第一个偏导数的结果:

(7)技术分享

[2] 根据式(2)也可以很容易得得到第二个偏导数的结果:

(8)技术分享

[3] 根据式(3)也可以得到第三个偏导数的结果:

(9)技术分享

因此综合起来我们就可以得到隐含层和输出层之间连接权值的最终更新公式:

(10)技术分享

----------------------------下面是隐含层神经元偏置的更新公式的推导-----------------------------------

隐含层神经元偏置的更新公式可以利用等效思想非常"优雅"地解决。我们常把偏置等效成一个连接权值始终为-1,输出为技术分享的隐含层神经元,进一步思考我们还可以等效成连接权值为技术分享,而输出始终为-1的隐含层神经元不是么?而隐含层神经元与输出层神经元之间连接权值我们已经推导出来了。

因此事实上我们只需要把式(10)的技术分享换成-1就得到隐含层神经元偏置的更新公式:

(11)技术分享

-------------------------下面是输入层与隐含层之间连接权值更新公式的推导-----------------------------

首先类似隐含层与输出层之间连接权值的更新公式我们有:

(12)技术分享

并且我们有:
(13)技术分享

(14)技术分享

同样的,需要使用链式法则将式(12)转换成以下形式:

(15)技术分享

由式(14)可以发现第一个偏导数无法直接求出,还需要进一步分解。不过为了简化公式我们先将后面两个偏导数求出来放在一边。具体地:

[1] 根据式(14)可以得到第二个偏导数的结果:

(16)技术分享

[2] 根据式(13)可以得到第三个偏导数的结果:

(17)技术分享

现在我们来求第一个偏导数,它可以根据链式法则分解为:

(18)技术分享

参考式(3),(7),(8)就可以得到式(18)的最终结果:

(19)技术分享

综合式(16),(17),(19)就可以得到式(15)的最终结果:

(20)技术分享

---------------------------------------------------------------------------------------------------------

额外地,隐含层神经元的偏置也可以通过类似上面叙述的等效思想解决。只需要将式(20)的最后一项更改为-1就得到了隐含层神经元偏置的更新公式。

---------------------------------------------------------------------------------------------------------

至此BP算法所有参数的更新公式推导完毕。

五、向量化表示

虽然推导容易理解,但公式还是比较长的。因此可以用向量化的表示方法来重新表示公式。

首先以输出层的计算来说明符号。输出层的计算可以用下面的矩阵乘法进行表示:

(21)技术分享

通用地对于第a层(由于第一层是输入层,因此a大于1)的计算过程可以用下式表示:

(22)技术分享

其中的每一项的意义和式(21)中的每一项一一对应起来。

接着由式(4)和(12)我们可以整理出连接权值更新的通用公式:

(23)技术分享

并且:

(24)技术分享

其中的技术分享需要分情况考虑:

[1] 第a层是输出层:

(25)技术分享

[2] 第a层不是输出层:

(26)技术分享

其中的 技术分享 运算符代表对应元素相乘而不是矩阵乘法,并且注意到式(26)还是一个递归式。

至此向量化表示完毕。


反向传播 - 误差导数

】反向传播-误差导数【英文标题】:Backpropagation-errorderivative【发布时间】:2016-05-0902:21:10【问题描述】:我正在学习用于训练神经网络的反向传播算法。这有点道理,但还有一部分我不明白。据我了解,误差导数是针对网络中... 查看详情

误差反向传播 - 神经网络

】误差反向传播-神经网络【英文标题】:ErrorBackpropagation-Neuralnetwork【发布时间】:2013-12-2318:01:33【问题描述】:我正在尝试为神经网络的错误反向传播编写代码,但我的代码需要很长时间才能执行。我知道神经网络的训练需要... 查看详情

上三角矩阵的矩阵逆计算给出了大矩阵维度的误差

】上三角矩阵的矩阵逆计算给出了大矩阵维度的误差【英文标题】:Matrixinversecalculationofuppertriangularmatrixgiveserrorforlargematrixdimensions【发布时间】:2020-02-0822:50:46【问题描述】:我有一个递归函数来计算上三角矩阵的逆矩阵。我将... 查看详情

深入浅出bp神经网络算法的原理

...络。BP神经网络是怎样的一种定义?看这句话:一种按“误差逆传播算法训练”的多层前馈网络。BP的思想就是:利用输出后的误差来估计输出层前一层的误差,再用这层误差来估计更前一层误差,如此获取所有各层误差估计。... 查看详情

具有交叉熵误差的整流线性单元激活的反向传播

】具有交叉熵误差的整流线性单元激活的反向传播【英文标题】:Backpropagationforrectifiedlinearunitactivationwithcrossentropyerror【发布时间】:2014-08-1214:59:18【问题描述】:我正在尝试使用反向传播实现神经网络的梯度计算。我无法使用... 查看详情

神经网络-反向传播,训练误差

】神经网络-反向传播,训练误差【英文标题】:neuralnetwork-backpropagation,errorintraining【发布时间】:2011-11-2016:40:47【问题描述】:在阅读了一些关于神经网络(反向传播)的文章后,我尝试自己编写一个简单的神经网络。我决定... 查看详情

条件数:逆矩阵与线性方程组

...,我们来考虑在计算矩阵以及计算线性方程组的解时界定误差限这个问题.?逆矩阵?如果求一个给定的非奇异矩阵(AinM_n)的逆矩阵的计算是在一台数字计算机上用浮点算数进行,就不可避免产生舍入误差以及截断误差,以及(A)本身... 查看详情

cs231n误差反向传播

摘要本节将对反向传播进行直观的理解。反向传播是利用链式法则递归计算表达式的梯度的方法。理解反向传播过程及其精妙之处,对于理解、实现、设计和调试神经网络非常关键。反向求导的核心问题是:给定函数$f(x)$ ,... 查看详情

python深度学习入门-误差反向传播法(代码片段)

深度学习入门-误差反向传播法博主微信公众号(左)、Python+智能大数据+AI学习交流群(右):欢迎关注和加群,大家一起学习交流,共同进步!目录摘要1.计算图1.1 用计算图求解1.2 局部计... 查看详情

如何理解cnn神经网络里的反向传播backpropagation,bp算法

...86年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数... 查看详情

编写c语言版本的卷积神经网络cnn之三:cnn的误差反向传播过程

...传播过程,反向传播过程反映神经网络的学习训练过程。误差反向传播方法是神经网络学习的基础,网络上已经有许多相关的内容了,不过关于卷积网络的误差反向传递的公式推导却比较 查看详情

matlab中bp神经网络的训练算法具体是怎么样的

BP算法的基本思想是,学习过程由信号的正向传播与误差的反向传播两个过程组成。正向传播时,输入样本从输入层传入,经各隐层逐层处理后,传向输出层。若输出层的实际输出与期望的输出(教师信号)不符,则转入误差的反... 查看详情

一文搞懂反向传播算法

参考技术A这是一场以误差(Error)为主导的反向传播(BackPropagation)运动,旨在得到最优的全局参数矩阵,进而将多层神经网络应用到分类或者回归任务中去。前向传递输入信号直至输出产生误差,反向传播误差信息更新权重矩... 查看详情

神经网络入门——15反向传播(代码片段)

...络为例,可以使用链式法则计算输入层-隐藏层间权重的误差。要使用梯度下降法更新隐藏层的权重,你需要知道各隐藏层节点的误差对最终输出的影响。每层的输出是由两层间的权重决定的,两层之间产生的误差,按权重缩放... 查看详情

深度学习之前馈神经网络(前向传播和误差方向传播)

...神经网络和图网络;二是整理前馈神经网络中正向传播、误差反向传播和梯度下降的原理;三是梯度消失和梯度爆炸问题的原因及解决思路。一、神经网络结构目前比较常用的神经网络结构有如下三种:1、前馈神经网络前馈神... 查看详情

反向传播梯度求解推导

参考技术A反向传播是一场以误差(Error)为主导的反向传播(BackPropagation)运动,目的在于优化神经网络中的参数(权重,偏置)。是第层的第个神经元连接第层的第个神经元的权重表示第层的第个节点的偏置,所有连接到该节... 查看详情

bp神经网络的神经网络

...间里没有找到隐层的连接权值调整问题的有效算法。直到误差反向传播算法(BP算法)的提出,成功地解决了求解非线性连续函数的多层前馈神经网络权重调整问题。BP(BackPropagation)神经网络,即误差反传误差反向传播算法的学习... 查看详情

链式法则玩转反向传播

...色是前向计算,褐红色是反向传播。0.73是最终输出,1是误差。可以看到整个计算流程就是上面那个逻辑回归表达式。 好了,误差有了,开始反向传播吧很简单,就是拿误差乘以导数error=1,它是经过1/x计算得到的误差,导数... 查看详情