如何直观地解释 backpropagation 算法?

[复制链接]
Backpropagation(反向传布)缩写为BP,是“误差反向传布”的简称,是一种与最优化方式(如梯度下降法)相连系利用的、今朝练习野生神经收集的常见方式。

若何直观地诠释 backpropagation 算法?-1.jpg

反向传布算法的根基思惟是,进修进程由信号的正向传布和误差的反向传布两个进程组成,输入从输入层输入,经隐层处置今后,传向输出层。假如输出层的现实输出和期望输出不合适,就进入误差的反向传布阶段。

误差反向传布是将输出误差以某种形式经过隐层向输入层反向传布,并将误差分摊给各层的一切单元,从而获得各层单元的误差信号,这个误差信号就作为批改各个单元权值的根据,直到输出的误差满足一定条件大概迭代次数到达一定次数。

与机械进修里面最根基也很是有用的算法LMS进修法则一样,反向传布近似最速下降算法,该方式对收集合一切权重计较损失函数的梯度。这个梯度会反应给最优化方式,用来更新权值以最小化损失函数。

反向传布要求对每个输入值想获得的已知输出,来计较损失函数梯度。是以,它凡是被以为是一种监视式进修方式,虽然它也用在一些无监视收集(如自动编码器)中。它是多层前馈收集的Delta法则(英语:delta rule)的推行,可以用链式法例对每层迭代计较梯度。反向传布要求野生神经元(英语:artificial neuron)(或“节点”)的激励函数可微。

LMS算法和反向传布之间的区分仅在于计较导数的方式。

对于单层线性收集来说,误差是收集权重的显式线性函数,其相对于权重的导数可以很轻易地计较出来。在具有非线性传递函数的多层收集合,收集权重与误差之间的关系更加复杂。为了计较权重的导数,需要利用微积分的链式法例。

《深度进修道理与理论》的书中有这样一个例子。

若何直观地诠释 backpropagation 算法?-2.jpg

深度进修道理与理论(异步图书出品)



若何直观地诠释 backpropagation 算法?-3.jpg

反向传布算法中利用到的变量示例

如图所示,假定神经收集合的一个参数

若何直观地诠释 backpropagation 算法?-4.jpg

发生了小幅度的改变,那末这个改变将会影响后续激活值的输出,下一层按照这个激活值继续往后传递该改变。如此一层一层地往后传递,直到损失函数接收到该改变成止。终极这个小幅度的改变影响了全部收集,如同在水面上划了一下,水波向外分散影响了全部湖面的安静。

为了晓得这个改变的幅度,我们挑选从收集的最初一层(输出层)起头,操纵损失函数向前求得每一层每一个神经元的误差,从而获得这个参数的梯度(原始的小幅度的改变值)。

由于神经收集的结构模子复杂——多层收集停止排列堆叠,若何公道计较损失函数的梯度是一个严重的应战。

梯度下降算法从整体动身,求得收集合参数的梯度后对参数停止更新,而若何求得收集参数的梯度则是反向传布算法需要做的工作。

虽然在神经收集合,求收集参数的梯度纷歧定利用反向传布算法,而且反向传布算法有收敛慢、轻易堕入部分最小解等弱点,可是其易用性、正确率却是其他求解梯度算法没法相比的。是以在现代神经收集合,反向传布算法被普遍利用。为了便于了解反向传布算法,《深度进修道理与理论》中还举了这样的例子:

现在有一个口述绘画游戏,第1小我看一幅画(输入数据), 描写给第2小我(隐层)……依次类推,到最初一小我(输出)的时辰,画出来的画必定与原画不太像(误差较大)。下面起头反向传布算法,我们把画拿给最初一小我看(计较损失函数), 然后最初一小我告诉前面一小我下次描写时需要留意哪些地方画错了(经过损失计较梯度)……一样依次类推,直到第1小我。

固然该例子能够会与实在的反向传布算法有一定的不同,下面我们来看其数学界说。

假定神经收集模子的参数为

若何直观地诠释 backpropagation 算法?-5.jpg

,那末反向传布算法的精华是:经过链式求导法例,求出收集模子中的每个参数的导数

若何直观地诠释 backpropagation 算法?-6.jpg



若何直观地诠释 backpropagation 算法?-7.jpg



由于神经收集模子结构复杂,随着收集层数和节点数的增加,收集合的参数也会越来越多。为了便于计较机对神经收集合的参数停止跟踪和存储记录,我们可以经过计较图(Computation Graph) 来对反向传布算法停止初步了解。
1. 了解计较图

计较图可以看做一种用来描写计较函数的说话,图中的节点代表函数的操纵,边代表函数的输入。如图所示,计较图的函数为:

若何直观地诠释 backpropagation 算法?-8.jpg


若何直观地诠释 backpropagation 算法?-9.jpg

反向传布算法希望经过链式法例获得式中

若何直观地诠释 backpropagation 算法?-10.jpg

的各个参数的梯度:

若何直观地诠释 backpropagation 算法?-11.jpg



若何直观地诠释 backpropagation 算法?-12.jpg



若何直观地诠释 backpropagation 算法?-13.jpg



若何直观地诠释 backpropagation 算法?-14.jpg

假定

若何直观地诠释 backpropagation 算法?-15.jpg



若何直观地诠释 backpropagation 算法?-16.jpg



若何直观地诠释 backpropagation 算法?-17.jpg

输入的数据别离是-5、2、-6,按照链式法例,我们可以获得式中的各个参数的梯度值为:

若何直观地诠释 backpropagation 算法?-18.jpg

下图所示为单个神经元模子的计较图展开示例,

若何直观地诠释 backpropagation 算法?-19.jpg

为神经元的输出,

若何直观地诠释 backpropagation 算法?-20.jpg



若何直观地诠释 backpropagation 算法?-21.jpg

别离为该神经元的输入,

若何直观地诠释 backpropagation 算法?-22.jpg

为求和节点。

若何直观地诠释 backpropagation 算法?-23.jpg

神经元展开计较图示例图。 (a) 为带有两个输入的神经元模块, (b) 为该神经元模子。

若何直观地诠释 backpropagation 算法?-24.jpg

从图中可以看出,神经收集的反向传布算法就是操纵计较图的道理,从收集的输出层起头,反向计较神经收集合每一个参数的梯度。然后经过梯度下降算法,以一定的进修率按照梯度下降算法的根基公式

若何直观地诠释 backpropagation 算法?-25.jpg

对神经收集合的参数停止更新,接着运转一次向前传布算法,获得新的损失值。对上述步调不竭迭代,就是全部神经收集练习的进程。

反向传布算法的计较方式跟计较图一样,其焦点思惟是经过链式求导法例,获得收集合每个参数的梯度。这里不再给出上图中的计较进程。

对于神经收集的进修,假如只夸大求解、推导中的数学根据对了解算法是晦气的。固然,不了解数学根据加倍晦气,我们关心的重点不但仅是数学自己,而更应当关注其最焦点的道理,简单的高数求导是建立深度进修的根本!

关于BP算法的具体推导可见《深度进修道理与理论》这本书。

若何直观地诠释 backpropagation 算法?-26.jpg

固然,我们也可以把反向传布算法视为一个黑盒子,继续向下看。
2. 反向传布算法流程

操纵反向传布算法的4个根基方程,可以很清楚地对反向传布算法流程停止总结。

若何直观地诠释 backpropagation 算法?-27.jpg

反向传布4个根基方程
    输入(Input) :输入层输入向量 。向前传布(Feed Forward) : 计较 。输出层误差(Output Error) : 按照公式BP1计较误差向量

若何直观地诠释 backpropagation 算法?-28.jpg

    反向传布误差(Backpropagate Error) : 按照公式BP2逐层反向计较每一层的误差

若何直观地诠释 backpropagation 算法?-29.jpg

    输出(Output) : 按照公式BP3和BP4输出损失函数的偏置。

在练习阶段,反向传布算法的工作方式就是把数据传出神经收集,然后经过一次向前传布后,获得每一层的输出数据。接着起头从输出层往前计较每一层的误差,直到第一层(输入层)为止。最初按照每一层的误差数据计较每一个损失函数关于偏置和权重参数的偏导,而这个偏导就是收集合参数的变化率。

有了这个变化率以后,我们便可以操纵梯度下降算法更新一次收集合的参数。如此循环迭代,操纵反向传布算法来求得收集参数的变化率,并用于更新收集的参数,终极使得损失函数收敛到部分最小值,练习阶段竣事。
3. 反向传布算法的实现

在实现反向传布算法之前,我们需要界说神经收集的模子架构,即神经收集有几多层、每一层有几多神经元。别的,还需要给出神经收集界说练习的数据和现实的输出。

鄙人面代码中, network sizes为用于测试的神经收集的模子架构,该收集一共有3层,输入层有3个神经元,隐层有4个神经元,输出层有2个神经元,如图所示。

若何直观地诠释 backpropagation 算法?-30.jpg

接着我们按照收集模子的巨细,操纵高斯散布函数的权重参数 weights 和偏置参数 biases 发生均值为0、方差为1的随机值。(我们这里利用简单的高斯散布即可)

若何直观地诠释 backpropagation 算法?-31.jpg

为了方便反向传布算法流程的代码实现,鄙人面代码中,我们对损失函数、激活函数和激活函数的求导停止了界说。损失函数利用了均方误差

若何直观地诠释 backpropagation 算法?-32.jpg

作为该神经收集的损失函数,是以求导后的输入别离为收集的猜测值和实在输出值,输出为两者之差,别的,激活函数利用了 Sigmoid函数。

若何直观地诠释 backpropagation 算法?-33.jpg

完成了对神经收集模子的架构界说和一些帮助函数以后,剩下的是下面代码中的反向传布算法的焦点实现,依照上文中的反向传布算法流程实现。

backprop()函数的输入为x和y, 其中x为(3, 1) 的矩阵,y为(2, 1) 的矩阵。按照反向传布算法的4个根基公式(BP1~BP4) 的计较中需要晓得每一层神经元的激活值和加权输入值,是以在停止向前传布时,别离利用activations 记录每一层的激活值和 zs 记录每一层的加权输入值。

接下来是反向传布函数的焦点代码,实现4个根基公式。既然是反向传布,那末我们首先从输出层

若何直观地诠释 backpropagation 算法?-34.jpg

停止计较,是以先计较输出层的误差,然后计较损失函数关于输出层

若何直观地诠释 backpropagation 算法?-35.jpg

中的偏置和权重参数的偏导。最初的循环为 range (2,num_layers) , 意义是从收集的倒数第二层起头,往前计较第

若何直观地诠释 backpropagation 算法?-36.jpg

层的损失值,以及损失函数关于第

若何直观地诠释 backpropagation 算法?-37.jpg

层的偏置和权重参数的偏导。最初输出一次反向传布后,获得关于损失函数的一切参数的偏导。

若何直观地诠释 backpropagation 算法?-38.jpg


若何直观地诠释 backpropagation 算法?-39.jpg


详情可见《深度进修道理与理论》第二章野生神经收集 第2.3.3小节 反向传布算法

若何直观地诠释 backpropagation 算法?-40.jpg

虽然BP神经收集有三个很是明显的优点:
    非线性映照才能;泛化才能;容错才能;答应输入样本中带有较大误差甚至个体毛病。反应正确纪律的常识来自全部样本,个体样本中的误差不能左右对权矩阵的调剂。

不外BP神经收集也有着较为明显的缺点。

例如需要的参数过量,而且参数的挑选没有有用的方式。肯定一个BP神经收集需要晓得收集的层数、每一层神经元的个数和权值。

再例如权值可以经过进修获得,假如隐层神经元数目太多会引发过进修,假如隐层神经元个数太少会引发欠进修。此外进修率的挑选也是需要斟酌。今朝来说,对于参数简直定缺少一个简单有用的方式,所以致使算法很不稳定。

而且BP神经收集属于监视进修,对于样本有较大依靠性,收集进修的逼近和推行才能与样本有很大关系,假如样本调集代表性差、样本冲突多、存在冗余样本,收集就很难到达预期的性能。

最初由于权值是随机给定的,所以BP神经收集具有不成重现性。

今朝针对算法的不敷,也出现了一些例如动量法、调理进修率法等BP算法的改良。不外backpropagation仍还有很多需要我们摸索的部分。

非常期待backpropagation在未来发挥更大的感化。
温馨提示:
好向圈www.kuaixunai.com是各行业经验分享交流社区,你可以在这里发布交流经验,也可以发布需求与服务,经验圈子里面禁止带推广链接、联系方式、违法词等,违规将封禁账号,相关产品信息将永久不予以通过,同时有需要可以发布在自己的免费建站官网里面或者广告圈, 下载好向圈APP可以加入各行业交流群 本文不代表好向圈的观点和立场,如有侵权请下载好向圈APP联系在线客服进行核实处理。
审核说明:好向圈社区鼓励原创内容发布,如果有从别的地方拷贝复制将不予以通过,原创优质内容搜索引擎会100%收录,运营人员将严格按照上述情况进行审核,望告知!
回复

使用道具 举报

已有(4)人评论

跳转到指定楼层
the_only 发表于 2021-3-24 06:20:24
转发了
回复

使用道具 举报

romariofs 发表于 2021-3-24 23:00:57
转发了
回复

使用道具 举报

nxjk6950 发表于 2021-3-25 09:59:04
转发了
回复

使用道具 举报

凹与凸有染 发表于 2021-3-26 08:52:06
转发了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

24小时热文