我们已经知道了梯度下降法的基本原理,那么对神经网络中的参数进行更新就可以利用梯度下降的方法,首先,我们根据链式法则对每个参数进行求导,然后利用梯度下降法更新。这样做当然是可行的,但是未免太蠢了。假如有100万个参数,我们就要求导100万次,并且每次都要进行链式展开,计算量实在太大了。此时,有一个聪明的善于观察的人啊,他发现每次链式展开的求导公式里,有很多重复的部分,根据这个现象,他提出了大名鼎鼎的反向传播算法,解决了神经网络中求梯度时计算量太大的问题。
反向传播算法图解
惊喜发现: 和正向传播用的权重一模一样,和正向传播过程一模一样。
简要概括
假设在正向传播中的某一层表示为:
则反向传播中,对Z的求导公式为(T表示转置):公式1
对W的求导公式为(T表示转置):公式2
只要我们从后往前算,每一步只需要利用上一步的结果,加一点点小小的步骤。所有的z、w、b都只需要利用对out的导数即可(不太严谨,因为没有把激活函数考虑在内,但激活函数并不破坏这种依赖,只是加了一点小小的步骤)。