反向传播算法是一个有效求解梯度的算法,本质上是一个链式求导的法则的应用。
考虑一个简单的函数,比如,我们可以直接求出这个函数的微分,但是这里我们要使用链式法则,令q=x+y,那么f=qz,对于这两个式子来说,分别求出他们的微分,,,同时q是x和y的求和,所以可以得到,。关心的问题是,链式法则告诉我们如何求得它们的值。
通过链式法则可以知道,如果对其中的元素求导,那么可以一层一层的求导,然后将结果乘起来,这就是链式法则的核心,也是反向传播的核心。
本质上反向传播只是链式法则的一个应用。还是使用之前的那个相同的例子 q=x+y,f=qz,通过计算图可以将这个表达过程表达出来。
上面的数字表示其数值,下面的数字表示其求得的梯度,我们可以一步一步看出反向传播算法得实现。首先从最后开始,梯度当然是1,然后计算 ,,接着计算,,,这样一步一步就求出了。
直观上看反向传播算法是一个优雅的局部过程,每次求导只对当前的运算求导,求解每层网络的参数都是通过链式法则将前面的结果求出不断迭代到这一层的,所以说这是一个传播的过程。
下面通过Sigmoid函数来演示反向传播过程在一个复杂的函数上是如何进行的。
这样就能画出如下图所示的计算图。
同样图中的数字表示数值,下面的数字表示梯度,从后往前计算一下各个参数的梯度。首先最后面的梯度是1,然后经过这个函数,这个函数的梯度是 ,所以向前传播的梯度是,然后进行加1这个操作,梯度没有发生改变,接着是这个函数运算,它的梯度就是,这样不断地往后传播就可以得到每个参数的梯度。
通过链式法则引入了反向传播这个算法,从上面的例子详细的说明反向传播算法,这是深度学习优化算法得一个核心,因为所有基于梯度的优化算法都要计算每个参数的梯度,下面详细讲解一下各种优化算法的变式。
参考: 深度学习入门之PyTorch(廖星宇)