独家连载 | 误差反向传播算法推导

4.5 BP网络模型和公式推导

4.5.1BP网络模型

假设我们有一个2层(统计神经网络层数的时候一般输入层忽略不计)的神经网络如图4.17所示:

独家连载 | 误差反向传播算法推导

该网络的输入向量为X = (x1,x2,…,xi,…,xn),图中x0 = 1表示输入层偏置值。隐藏层输出向量为Y1=(y11,y21,,yj1,,ym1)Y^1=( y_1^1,y_2^1,\ldots,y_j^1,\ldots,y_m^1),图中y01=1y^1_0=1表示隐藏层偏置值。输出层输出向量为Y2=(y12,y22,,yk2,,yl2)Y^2=( y_1^2,y_2^2,\ldots,y_k^2,\ldots,y_l^2)。期望输出T=(t1,t2,,tk,,tl)T=(t_1,t_2,\ldots,t_k,\ldots,t_l)。输入层到隐藏层之间的权值用矩阵W1表示,W1ij表示W1矩阵中第i行第j列的权值。隐藏层到输出层之间的权值用矩阵W2表示,W2jk表示W2矩阵中第j行第k列的权值。另外我们定义net1为隐藏层中权值乘以输入层信号的总和,net1j表示隐藏层中第j个神经元得到的输入信号总和。net2为输出层中权值乘以隐藏层信号的总和,net2k表示输出层中第k个神经元得到的输入信号总和。

对于隐藏层有:
netj1=i=0nwij1xi(j=1,2,...,m)net_j^1=\sum_{i=0}^{n} {w^1_{ij}x_i} ;(j=1,2,...,m)

yj1=f(netj1)(j=1,2,...,m)y_j^1=f(net_j^1);(j=1,2,...,m)

对于输出层有:
netk2=i=0nwjk2yj1(k=1,2,...,l)net_k^2=\sum_{i=0}^{n} {w^2_{jk}y_j^1};(k=1,2,...,l)

KaTeX parse error: \tag works only in display equations

公式4.13和4.15中的**函数假设我们都使用sigmoid函数,sigmoid函数的公式在上文中的公式4.8。sigmoid函数具有连续、可导的特点,它的导数为:
f(x)=f(x)[1f(x)]f'(x)=f(x)[1-f(x)]

4.5.2BP算法推导

根据上文中提到的代价函数,当网络输出与期望输出不同时,会存在输出误差E,为了简单我们只计算一个样本的均方差公式,如果是计算多个样本可以求所有样本代价函数的平均值。一个样本的均方差公式定义如下:
E=12(TY2)2=12k=1l(tkyk2)2E=\frac {1} {2}(T-Y^2)^2=\frac {1} {2}\sum_{k=1}^{l} {(t_k-y_k^2)^2}

将以上误差定义式展开至隐藏层:
E=12k=1l[tkf(netk2)]2=12k=1l[tkf(j=0mwjk2yj1)]2E=\frac {1} {2}\sum_{k=1}^{l} {[t_k-f(net_k^2)]^2}=\frac {1} {2}\sum_{k=1}^{l} { \left [t_k-f\left(\sum_{j=0}^{m}{w_{jk}^2}y_j^1 \right)\right]^2}

再进一步展开至输入层:
E=12k=1l[tkf(j=0mwjk2f(netj1))]2=12k=1l[tkf(j=0mwjk2f(j=0mwij1xi))]2E=\frac {1} {2}\sum_{k=1}^{l} { \left [t_k-f\left(\sum_{j=0}^{m}{w_{jk}^2}f(net_j^1)\right)\right]^2}=\frac {1} {2}\sum_{k=1}^{l} { \left [t_k-f\left(\sum_{j=0}^{m}{w_{jk}^2}f\left(\sum_{j=0}^{m}{w_{ij}^1x_i}\right)\right)\right]^2}

从公式4.18和4.19中可以看出,网络的误差E是跟神经网络各层权值W1ij和W2jk相关的,因此调整各层的权值,就可以改变误差E的值。我们的目标就是要得到比较小的误差值,所以我们可以采用梯度下降法来最小化误差E的值。根据梯度下降法,我们可以得到:
Δwij1=ηδEδwij1\Delta w_{ij}^1=-\eta\frac {\delta E} {\delta w_{ij}^1}
i=0,1,2,,n;j=1,2,,mi=0,1,2,\ldots,n;j=1,2,\ldots,m

Δwij2=ηδEδwjk2\Delta w_{ij}^2=-\eta\frac {\delta E} {\delta w_{jk}^2 }
j=0,1,2,,m;k=1,2,,lj=0,1,2,\ldots,m;k=1,2,\ldots,l
在下面的推导过程中均默认对于隐藏层有i =0,1,2,…,n;j = 1,2,…,m;对于输出层有:j =0,1,2,…,m;k = 1,2,…,l。

根据微积分的链式法则可以得到,对于隐藏层有:
Δwij1=ηδEδwij1=ηδEδnetj1δnetj1δwij1\Delta w_{ij}^1=-\eta\frac {\delta E} {\delta w_{ij}^1 }=-\eta\frac {\delta E} {\delta net_j^1 }\frac {\delta net_j^1 } {\delta w_{ij}^1 }

根据微积分的链式法则可以得到,对于输出层有:
Δwjk2=ηδEδwjk2=ηδEδnetk2δnetk2δwjk2\Delta w_{jk}^2=-\eta\frac {\delta E} {\delta w_{jk}^2 }=-\eta\frac {\delta E} {\delta net_k^2 }\frac {\delta net_k^2 } {\delta w_{jk}^2 }

我们可以定义一个误差信号,命名为δ(delta),令:
δj1=δEδnetj1\delta_j^1=-\frac {\delta E} {\delta net_j^1 }

δk1=δEδnetk2\delta_k^1=-\frac {\delta E} {\delta net_k^2 }

综合公式4.12,4.22,4.24,可以得到输入层到隐藏层的权值调整公式为:
Δwij1=ηδj1xi\Delta w_{ij}^1=\eta\delta_j^1x_i

综合公式4.14,4.23,4.25,可以得到隐藏层到输出层的权值调整公式为:
Δwjk2=ηδk2yj1\Delta w_{jk}^2=\eta\delta_k^2y_j^1

可以看出在公式4.26和4.27中,只要求出δ1j和δ2k的值,就可以计算出Δw1ij和Δw2jk的值了。

对于隐藏层,δ1j可以展开为:
δj1=δEδnetj1=δEδyj1δyj1δnetj1=δEδyj1f(netj1)\delta_j^1=-\frac {\delta E} {\delta net_j^1 }=-\frac {\delta E} {\delta y_j^1 }\frac {\delta y_j^1} {\delta net_j^1 }=-\frac {\delta E} {\delta y_j^1 }f'(net_j^1)

对于输出层,δ2k可以展开为:
δk2=δEδnetk2=δEδyk2δyk2δnetk2=δEδyk2f(netk2)\delta_k^2=-\frac {\delta E} {\delta net_k^2 }=-\frac {\delta E} {\delta y_k^2 }\frac {\delta y_k^2} {\delta net_k^2 }=-\frac {\delta E} {\delta y_k^2 }f'(net_k^2)

在公式4.28和4.29中,求网络误差对各层输出的偏导,对于输出层:
δEδyk2=(tkyk2)\frac {\delta E} {\delta y_k^2 }=-(t_k-y_k^2)

对于隐藏层:
δEδyj1=δ12k=1l[tkf(j=0mwjk2yj1)]2δyj=k=1l(tkf(j=0mwjk2yj1))f(j=0mwjk2yj1)wjk2=k=1l(tkyk2)f(netk2)wjk2\frac{δE}{δy^1_j}=\frac{δ\frac{1}{2}\sum_{k=1}^{l}{[t_k-f(\sum_{j=0}^{m}{w^2_{jk}y^1_j})]^2}}{δy_j}=-\sum_{k=1}^{l}{\left(t_k-f\left(\sum_{j=0}^{m}{w^2_{jk}y^1_j}\right)\right)f'\left(\sum_{j=0}^{m}{w^2_{jk}y^1_j}\right)w^2_{jk}=-\sum_{k=1}^{l}{(t_k-y^2_k)f'(net^2_k)w^2_{jk}}}

将公式4.30带入公式4.29,再根据sigmoid函数的求导公式4.16,可以得到:
δk2=δEδyk2f(netk2)=(tkyk2)yk2(1yk2)δ^2_k=-\frac{δE}{δy^2_k}f'(net^2_k)=(t_k-y^2_k)y^2_k(1-y^2_k)

δj1=δEδyjf(netj1)=(k=1l(tkyk2)f(netk2)wjk2)f(netj1)=(k=1l(tkyk2)yk2(1yk2)wjk2)f(netj1)=(k=1lδk2wjk2)yj1(1yj1)δ^1_j=-\frac{δE}{δy_j}f'(net^1_j)=\left(\sum_{k=1}^{l} {(t_k-y^2_k)f'(net^2_k)w^2_{jk}}\right)f'(net^1_j)=\left(\sum_{k=1}^l{(t_k-y^2_k)y^2_k(1-y^2_k)w^2_{jk}}\right)f'(net^1_j)=\left(\sum_{k=1}^{l}{δ^2_kw^2_{jk}}\right)y^1_j(1-y^1_j)

将公式4.32带入4.27中,得到隐藏层到输出层权值调整:
Δwjk2=ηδk2yj1=η(tkyk2)yk2(1yk2)yj1Δw^2_{jk}=ηδ^2_ky^1_j=η(t_k-y^2_k)y^2_k(1-y^2_k)y^1_j

将公式4.33带入4.26中,得到输入层到隐藏层权值调整:
Δwij1=ηδj1xi=η(k=1lδk2wjk2)yj1(1yj1)xiΔw^1_{ij}=ηδ^1_jx_i=η\left(\sum_{k=1}^{l} {δ^2_kw^2_{jk}}\right)y^1_j(1-y^1_j)x_i

对于一个多层的神经网络,假设一共有h个隐藏层,按顺序将各隐藏层节点数分别记为:m1,m2,…,mh,输入神经元个数为n,输出神经元个数为l;各隐藏层输出分别记为:Y1,Y2,…,Yh,输入层的输入记为:X,输出层的输出记为:Yh+1;各层权值矩阵分别记为:W1,W2,…,Wh+1,W1表示输入层到一个隐藏层的权值矩阵,Wh+1表示最后一个隐藏层到输出层的权值矩阵;各层学习信号分别记为:δ1,δ2,…,δh+1,δh+1表示输出层计算出的学习信号;则各层权值调整计算公式为(如下分类)
对于输出层:
Δwjkh+1=ηδkh+1yjh=η(tkykh+1)ykh+1(1ykh+1)yjh(j=0,1,2,...,mh;k=1,2,...,l)Δw^{h+1}_{jk}=ηδ^{h+1}_ky^h_j=η(t_k-y^{h+1}_k)y^{h+1}_k(1-y^{h+1}_k)y^h_j (j=0,1,2,...,m_h;k=1,2,...,l)

对于第h隐藏层:
Δwijh=ηδjhyih1=η(k=1lδkh+1wjkh+1)yjh(1yjh)yjh1(i=0,1,2,...,mh1;j=1,2,...,mh)Δw^h_{ij}=ηδ^h_jy^{h-1}_i=η\left(\sum_{k=1}^{l} {δ^{h+1}_kw^{h+1}_{jk}}\right)y^h_j(1-y^h_j)y^{h-1}_j (i=0,1,2,...,m_{h-1};j=1,2,...,m_h)

按照以上规律逐层类推,则第一个隐藏层的权值调整公式为:
Δwpq1=ηδq1xp=η(r=1m2δr2wqr2)yq1(1yq1)xp(p=0,1,2,...,n;j=1,2,...,m1)Δw^1_{pq}=ηδ^1_qx_p=η(\sum_{r=1}^{m_2} {δ^2_rw^2_{qr}})y^1_q(1-y^1_q)x_p (p=0,1,2,...,n;j=1,2,...,m_1)

4.5.3BP算法推导的补充说明

我们已经从头到尾详细推导了一遍BP算法的整个流程,在这一小节中对BP算法再做两点补充说明:
1.网络的偏置值。
在上文中我们的推导过程一直是使用权值w来进行计算的,如果我们把偏置值独立出来,那么偏置值的参数应该怎么调整呢?

我们可以看到公式4.26以及4.27,在公式4.26中,把i的取值设置为0,并且我们知道x0 = 1,所以我们可以得到:
Δbj1=ηδj1Δb^1_j=ηδ^1_j

在公式4.26中,把j的取值设置为0,并且我们知道y0 = 1,所以我们可以得到:
Δbk2=ηδk2Δb^2_k=ηδ^2_k
如果是把偏置值单独拿出来计算的话就是公式4.39和4.40的表达式。

2.用矩阵形式来表达BP学习算法。
下面我们直接给出BP学习算法矩阵表达形式的结果,具体推导过程跟上文中的推导过程类似,不过会涉及到矩阵求导的相关知识,大家有兴趣的话可以自己推导一下。如果是把BP学习算法写成矩阵的形式来表达,假设一共有h个隐藏层。输入数据的矩阵为X,X中的每一行表示一个数据,列表示数据的特征。比如我们一次性输入3个数据,每个数据有4个特征,那么X就是一个3行4列的矩阵。

各隐藏层输出分别记为:Y1,Y2,…,Yh,输出层的输出记为:Yh+1。Y中的每一个行表示一个数据的标签。比如我们有3个数据,每个数据有1个标签,那么Y就是一个3行1列的矩阵。

各层权值矩阵分别记为:W1,W2,…,Wh+1,W1表示输入层到一个隐藏层的权值矩阵,Wh+1表示最后一个隐藏层到输出层的权值矩阵。权值矩阵的行等于前一层的神经元个数,权值矩阵的列对应于后一层的神经元个数。比如在输入层和第一个隐藏层之间的权值矩阵是W1,输入层有3个神经元,第一个隐藏层有10个神经元,那么W1就是一个3行10列的矩阵。

各层学习信号分别记为:δ1,δ2,…,δh+1。δh+1表示输出层计算出的学习信号。

对于输出层的学习信号δh+1
δh+1=(TYh+1)f(YhWh+1)=(TYh+1)Yh+1(1Yh+1)δ^{h+1}=(T-Y^{h+1})∘f'(Y^hW^{h+1})=(T-Y^{h+1})∘Y^{h+1}∘(1-Y^{h+1})

公式4.41中的“ ∘ ”符号是element-wise multiplication,意思是矩阵中的元素对应相乘。例如下面的例子:
独家连载 | 误差反向传播算法推导

对于第h隐藏层的学习信号δh
δh=δh+1(Wh+1)Tf(Yh1Wh)=δh+1(Wh+1)TYh(1Yh)δ^h=δ^{h+1}(W^{h+1})^T∘f'(Y^{h-1}W^h)=δ^{h+1}(W^{h+1})^T∘Y^h∘(1-Y^h)

对于第1隐藏层的学习信号δ1
δ1=δ2(W2)Tf(XW1)=δ2(W2)TY1(1Y1)δ^1=δ^2(W^2)^T∘f'(XW^1)=δ^2(W^2)^T∘Y^1∘(1-Y^1)

对于输出层的权值矩阵Wh+1
ΔWh+1=η(Yh)Tδh+1ΔW^{h+1}=η(Y^h)^Tδ^{h+1}

对于第h隐藏层权值矩阵Wh
ΔWh=η(Yh1)TδhΔW^h=η(Y^{h-1})^Tδ^h

对于第1隐藏层权值矩阵W1
ΔW1=η(X)Tδ1ΔW^1=η(X)^Tδ^1

作者介绍

独家连载 | 误差反向传播算法推导