利用反向传播算法对神经网络进行训练。该方法与梯度下降算法相结合,对网络中所有权重计算损失函数的梯度,并利用梯度值来更新权值以最小化损失函数。在介绍BP算法前,我们先看下前向传播与链式法则的内容。
前向传播指的是数据输入的神经网络中,逐层向前传输,一直到运算到输出层为止。
在网络的训练过程中经过前向传播后得到的最终结果跟训练样本的真实值总是存在一定误差,这个误差便是损失函数。想要减小这个误差,就用损失函数ERROR,从后往前,依次求各个参数的偏导,这就是反向传播(Back Propagation)。
反向传播算法是利用链式法则进行梯度求解及权重更新的。对于复杂的复合函数,我们将其拆分为一系列的加减乘除或指数,对数,三角函数等初等函数,通过链式法则完成复合函数的求导。为简单起见,这里以一个神经网络中常见的复合函数的例子来说明 这个过程. 令复合函数 (; , ) 为:
其中x是输入数据,w是权重,b是偏置。我们可以将该复合函数分解为:
并进行图形化表示,如下所示:
整个复合函数 (; , ) 关于参数 和 的导数可以通过 (; , ) 与参数 和 之间路径上所有的导数连乘来得到,即:
以w为例,当 = 1, = 0, = 0 时,可以得到:
注意:常用函数的导数:
反向传播算法利用链式法则对神经网络中的各个节点的权重进行更新。我们通过一个例子来给大家介绍整个流程:
【举个栗子:】
如下图是一个简单的神经网络用来举例:激活函数为sigmoid
前向传播运算:
接下来是**反向传播**(求网络误差对各个权重参数的梯度):
我们先来求最简单的,求误差E对w5的导数。首先明确这是一个“链式法则”的求导过程,要求误差E对w5的导数,需要先求误差E对out o1的导数,再求out o1对net o1的导数,最后再求net o1对w5的导数,经过这个**链式法则**,我们就可以求出误差E对w5的导数(偏导),如下图所示:
导数(梯度)已经计算出来了,下面就是**反向传播与参数更新过程**:
如果要想求**误差E对w1的导数**,误差E对w1的求导路径不止一条,这会稍微复杂一点,但换汤不换药,计算过程如下所示:
至此,**“反向传播算法”**的过程就讲完了啦!