BP神经网络反向传播推导

本文将介绍经典的BP神经网络推导过程。

1 神经元模型

单个神经元模型如下图所示。

01
单个神经元模型工作过程如下:输入信号$\mathbf{x}=\left [ x_1,x_2,\cdots ,x_m \right ]^\mathrm{T}$.
经过权重$w_{kj}$加权后,传入神经元$k$,经过引入偏置$b_k$后,可以得到神经元的输出$v_k$,被激活函数$\psi(\cdot)$激励后,得到输出$y_k$。

2 单隐含层神经网络模型

对于多输入多输出,仅有一层隐含层的神经网络模型如下图所示。

02

2.1 符号含义说明

对于用到的符号含义说明如下:

1.输入的第$n$个样本为$\mathbf{x_{n}}$;

2.每个样本中包含$d$个元素 $\mathbf{x_{n}}=\left [ x_{n1},x_{n2},\cdots ,x_{nd} \right ]^\mathrm{T}\in\mathbb{R}^d$;

3.隐含层有$m$个神经元,隐含层神经元的输出 $\mathbf{h} = \left [ h_{1},h_{2},\cdots ,h_{m} \right ]^\mathrm{T}\in\mathbb{R}^m$,下标中的第一位数表示第1层隐含层。

4.为方便讨论,定义输入和输出的样本是一一对应关系,即共有$n$个输出样本 $\mathbf{y_{n}}$;

5.输出层有 $r$ 个神经元,对应单次样本的 $r$ 维输出 $\mathbf{y_{n}} = \left [ y_{n1},y_{n2},\cdots ,y_{nr} \right ]^\mathrm{T}\in\mathbb{R}^r$;

6.隐含层未经过激励函数,只有线性求和时的输出用 $\mathbf{neth} = \left [ neth_{1},neth_{2},\cdots ,neth_{m} \right ]^\mathrm{T}\in\mathbb{R}^m$表示;

7.输出层未经过激励函数,只有线性求和时的输出用 $\mathbf{nety} _n = \left[nety_1, nety_2, \cdots, nety_r \right]^\mathrm{T}\in \mathbb{R}^r$ 表示;

8.从输入层到隐含层的权重矩阵用$\mathbf{U}_{xh}\in\mathbb{R}^{m\times d}$表示;

9.从隐含层到输出层的权重矩阵用$\mathbf{W}_{hy}\in\mathbb{R}^{r\times m}$表示;

10.输入层到隐含层的偏置向量用 $\mathbf{b_1} = \left [ b_{11},b_{12},\cdots ,b_{1m} \right ]^\mathrm{T}\in\mathbb{R}^m$ 表示;

11.隐含层到输出层的偏置向量用 $\mathbf{b_y} = \left [ b_{y1},b_{y2},\cdots ,b_{yr} \right ]^\mathrm{T}\in\mathbb{R}^r$ 表示;

12.与第$n$个输入样本对应的第$n$个目标真实值为$\mathbf{o_{n}} = \left [ o_{n1},o_{n2},\cdots ,o_{nr} \right ]^\mathrm{T}\in\mathbb{R}^r$;

13.第$n$个样本真实值与网络输出之间的误差为 $\mathbf{e_n} = \left [ e_{n1},e_{n2},\cdots ,e_{nr} \right ]^\mathrm{T}\in\mathbb{R}^r$ 表示;

14.损失函数为$E$。

2.2 前向传播

第n个样本前向传播的隐含层神经网络模型线性求和可以搭建为

添加激活函数的隐含层神经网络模型为

第1个样本前向传播的输出层神经网络模型可以搭建为

添加激活函数的输出层神经网络模型为

将上式写成紧凑形式:

上式中,对于输入层到隐含层的权重矩阵 $\mathbf{U}_{xh}$、从隐含层到输出层的权重 $\mathbf{W}_{hy}$ 的形式如下:

2.3 误差计算

依据2.1节的定义,第$n$个样本误差之和为

第$n$个样本的网络输出与真实值之间的误差为

2.4 误差反向传播

神经网络的目的是寻找合适的$\mathbf{U}_{xh}$、$\mathbf{W}_{hy}$,使得网络的输出值与真实值之间的误差和$E$最小。因此一个自然的想法就是,通过$E$对这两个权重求导。

根据标量对矩阵的求导定义,可以得到:

这里为了便于理解,采用了简单粗暴的定义法,其他求导技巧暂时不讨论。

2.4.1 对输出层权重的求导

从直观角度来讲,误差和$E$与输出层更为邻近,因此我们先计算 $E$ 对 $\mathbf{W}_{hy}$ 的导数。

03

显然,$E$ 与 $\mathbf{W}_{hy}$ 之间的联系建立方式为:$\mathbf{W}_{hy} \rightarrow \mathbf{nety}_n \rightarrow \mathbf{y}_n \rightarrow E$。依据链式求导法则有

因为一般情况下输出层的每个神经元激励函数都相同,这里我们假设采用sigmoid函数,选择隐含层第 $j$ 个神经元到输出层第 $k$ 个神经元的权重 $w_{kj}$ 求导。

$E$ 与 $w_{kj}$之间的联系建立方式为:$w_{kj} \rightarrow nety_{kj} \rightarrow y_{kj} \rightarrow E$,依据链式求导法则,有

sigmoid激励函数求导见附录。

2.4.2 对隐含层权重的求导

同理,$E$ 与 $\mathbf{W}_{xh}$ 建立联系的方式为: $\mathbf{W}_{xh} \rightarrow \mathbf{neth} \rightarrow \mathbf{h} \rightarrow \mathbf{nety_{n}} \rightarrow \mathbf{y}_n \rightarrow E$。

04

假设隐含层的激活函数也为sigmoid函数。选择式(11)中从第 $i$ 个输入到第 $j$ 个隐含层神经元的权重 $u_{ji}$ 项求导,有

接下来对上式等号右边的三项依次求解。将上式中的第一项展开,因为第 $j$ 个隐含层神经元输出 $h_j$ 是所有输出层神经元输入项中的一项,因此

提取上式求和式中的单独一项,有

式(16)中等号右侧第二项即激活函数(本例为sigmoid函数)求导。

sigmoid激活函数求导见附录。

式(16)中等号右侧第三项的计算如下

由式(16)~(19)可得:

2.5 权重更新

经过2.3~2.4节分别对输入层到隐含层权重 $\mathbf{U}_{xh}$、隐含层到输出层权重 $\mathbf{W}_{hy}$求导,现在可以得到相应的权重梯度更新算法为

式中,$\eta$、$\xi$ 表示学习因子。

经过上述推导应该都能搞明白BP的基本思路是什么样子了,有兴趣的读者可以尝试推导两层或多层神经网络的权重梯度下降公式。

3 附录

3.1 sigmoid函数求导

sigmoid函数表达式如下

求导,有

simoid函数及其导数图像如下图所示。
05

3.2 tanh函数求导

tanh函数表达式如下

求导得

tanh函数及其导数图像如下图所示。
06

------ 本文结束感谢您的阅读------
Donate a cup of cola?