搜索
写经验 领红包
 > 教育

深度学习——反向传播(Backpropagation)

导语:深度学习——反向传播(Backpropagation)一文读懂反向传播

反向传播算法(Backpropagation)

文章目录

反向传播算法(Backpropagation)

一.简介

二.反向传播原理

2.1 导数的链式法则

2.2 正向传播与反向传播

三.总结

一.简介

无论是机器学习,还是深度学习。都绕不开一个梯度下降。在进行深度学习简介的时候,我们有介绍过深度学习的大致步骤,分别为:

构建神经网络数据拟合选出最佳模型

其中,选出最佳模型的方式,其实就是利用梯度下降算法,选出损失函数最小的那个。在传统的机器学习当中,这个比较容易,直接算就行了。但是在深度学习当中,由于存在输入层,隐藏层,输出层,且隐藏层到底有多深,这些都是未知数,因此计算也会更加繁杂。

如果,在输出层输出的数据和我们设定的目标以及标准相差比较大,这个时候,就需要反向传播。利用反向传播,逐层求出目标函数对各神经元权值的偏导数,构成目标函数对权值向量的梯度,之所以算这个,是为了对权值的优化提供依据,等权值优化了之后,再转为正向传播……当输出的结果达到设定的标准时,算法结束。

二.反向传播原理

2.1 导数的链式法则

反向传播的基本原理其实不难,基本理论就是大学高等数学当中的导数计算。我们需要了解的就是链式法则:

深度学习——反向传播(Backpropagation)

2.2 正向传播与反向传播

我们还是用逻辑回归的神经元为例:

深度学习——反向传播(Backpropagation)

很显然,在这神经元当中z = w1x1+w2x2 + b。最后,这个线性方程z会被代入到Sigmoid函数当中,也就是说:

我们知道,无论是机器学习,还是深度学习,计算之后都会产生一定的损失值,我们把这个损失函数记为l。在一部分当中,我们有说过,反向传播的最终目的是修正权值w,那么我们让l对w求偏导,根据链式准则:

深度学习——反向传播(Backpropagation)

其中,z对w求偏导这一步其实不难,不就是z对w求导嘛,我们很容易就能算出

深度学习——反向传播(Backpropagation)

而x1,x2其实就是最开始的输入值,因此可以当做是已知的。上面这个计算过程,就是正向传播

而l对z求导,这个部分其实很复杂。这一部分的求解过程,就是反向传播。那么这个部分该怎么求呢?如下所示:

深度学习——反向传播(Backpropagation)

如果这个神经网络稍微复杂一点呢?比如说,像下面这样:

深度学习——反向传播(Backpropagation)

那么,我们根据链式法则,就可以得到:

深度学习——反向传播(Backpropagation)

上面这个式子与公式1结合,就是:

深度学习——反向传播(Backpropagation)

参考下面这个图看一看

深度学习——反向传播(Backpropagation)

如此一来,反向传播的这一部分,我们也知道了求解原理。

对于公式2的方式,人们梳理了一下这个过程像极了如下所示的这个流程。即:先求l对z’的导,以及l对z’‘的导,然后分别乘以w3和w4,在结合sigma’(z),于是有人就根据这个计算流程,画出来了下面这个图:

深度学习——反向传播(Backpropagation)

这其实不就是我们所举的这个神经网络,把箭头全都倒过来嘛。因此,便有了“反向传播”的说法。

这当中,我们注意红色标注的sigma’(z),这个是Simoid函数对z进行求导的结果。由于在正向传播的时候,z是什么其实已经知道了,sigomid函数我们也是知道的,因此sigma’(z)我们也是已知的。

不过,又产生新的问题了。dl/dz的求解,明显依赖于dl/dz’,以及dl/dz’’。那么这两项又是如何求的呢?答案是:根据输出值去求。任何一组数据,在经过神经网络运算之后,都会产生一个输出值,我们记为y。如下所示:

深度学习——反向传播(Backpropagation)

这个时候,我们就要分情况讨论了。

第一种情况:y1与y2在都在输出层这个时候,比较简单,根据下面这个公式,直接套用即可:

深度学习——反向传播(Backpropagation)

第二种情况:y1,y2存在不在输出层的情况这个时候,那就一直算到输出层,然后再从输出层往回传播即可。

三.总结

正向传播与反向传播其实是同时使用的。

首先,你需要正向传播,来计算z对w的偏导,进而求出sigmoid’(z)是多少。然后,根据输出层输出的数据进行反向传播,计算出l对z的偏导是多少,最后,代入到公式0当中,即可求出l对w的偏导是多少。注意,这个偏导,其实反应的就是梯度。然后我们利用梯度下降等方法,对这个w不断进行迭代(也就是权值优化的过程),使得损失函数越来越小,整体模型也越来越接近于真实值。