4.5 BP网络模型和公式推导
4.5.1BP网络模型
假设我们有一个2层(统计神经网络层数的时候一般输入层忽略不计)的神经网络如图4.17所示:
该网络的输入向量为X = (x1,x2,…,xi,…,xn),图中x0 = 1表示输入层偏置值。隐藏层输出向量为Y1=(y11,y21,…,yj1,…,ym1),图中y01=1表示隐藏层偏置值。输出层输出向量为Y2=(y12,y22,…,yk2,…,yl2)。期望输出T=(t1,t2,…,tk,…,tl)。输入层到隐藏层之间的权值用矩阵W1表示,W1ij表示W1矩阵中第i行第j列的权值。隐藏层到输出层之间的权值用矩阵W2表示,W2jk表示W2矩阵中第j行第k列的权值。另外我们定义net1为隐藏层中权值乘以输入层信号的总和,net1j表示隐藏层中第j个神经元得到的输入信号总和。net2为输出层中权值乘以隐藏层信号的总和,net2k表示输出层中第k个神经元得到的输入信号总和。
对于隐藏层有:
netj1=∑i=0nwij1xi;(j=1,2,...,m)
yj1=f(netj1);(j=1,2,...,m)
对于输出层有:
netk2=∑i=0nwjk2yj1;(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)[1−f(x)]
4.5.2BP算法推导
根据上文中提到的代价函数,当网络输出与期望输出不同时,会存在输出误差E,为了简单我们只计算一个样本的均方差公式,如果是计算多个样本可以求所有样本代价函数的平均值。一个样本的均方差公式定义如下:
E=21(T−Y2)2=21k=1∑l(tk−yk2)2
将以上误差定义式展开至隐藏层:
E=21k=1∑l[tk−f(netk2)]2=21k=1∑l[tk−f(j=0∑mwjk2yj1)]2
再进一步展开至输入层:
E=21k=1∑l[tk−f(j=0∑mwjk2f(netj1))]2=21k=1∑l[tk−f(j=0∑mwjk2f(j=0∑mwij1xi))]2
从公式4.18和4.19中可以看出,网络的误差E是跟神经网络各层权值W1ij和W2jk相关的,因此调整各层的权值,就可以改变误差E的值。我们的目标就是要得到比较小的误差值,所以我们可以采用梯度下降法来最小化误差E的值。根据梯度下降法,我们可以得到:
Δwij1=−ηδwij1δE
i=0,1,2,…,n;j=1,2,…,m
Δwij2=−ηδwjk2δE
j=0,1,2,…,m;k=1,2,…,l
在下面的推导过程中均默认对于隐藏层有i =0,1,2,…,n;j = 1,2,…,m;对于输出层有:j =0,1,2,…,m;k = 1,2,…,l。
根据微积分的链式法则可以得到,对于隐藏层有:
Δwij1=−ηδwij1δE=−ηδnetj1δEδwij1δnetj1
根据微积分的链式法则可以得到,对于输出层有:
Δwjk2=−ηδwjk2δE=−ηδnetk2δEδwjk2δnetk2
我们可以定义一个误差信号,命名为δ(delta),令:
δj1=−δnetj1δE
δk1=−δnetk2δE
综合公式4.12,4.22,4.24,可以得到输入层到隐藏层的权值调整公式为:
Δwij1=ηδj1xi
综合公式4.14,4.23,4.25,可以得到隐藏层到输出层的权值调整公式为:
Δwjk2=ηδk2yj1
可以看出在公式4.26和4.27中,只要求出δ1j和δ2k的值,就可以计算出Δw1ij和Δw2jk的值了。
对于隐藏层,δ1j可以展开为:
δj1=−δnetj1δE=−δyj1δEδnetj1δyj1=−δyj1δEf′(netj1)
对于输出层,δ2k可以展开为:
δk2=−δnetk2δE=−δyk2δEδnetk2δyk2=−δyk2δEf′(netk2)
在公式4.28和4.29中,求网络误差对各层输出的偏导,对于输出层:
δyk2δE=−(tk−yk2)
对于隐藏层:
δyj1δE=δyjδ21∑k=1l[tk−f(∑j=0mwjk2yj1)]2=−∑k=1l(tk−f(∑j=0mwjk2yj1))f′(∑j=0mwjk2yj1)wjk2=−∑k=1l(tk−yk2)f′(netk2)wjk2
将公式4.30带入公式4.29,再根据sigmoid函数的求导公式4.16,可以得到:
δk2=−δyk2δEf′(netk2)=(tk−yk2)yk2(1−yk2)
δj1=−δyjδEf′(netj1)=(∑k=1l(tk−yk2)f′(netk2)wjk2)f′(netj1)=(∑k=1l(tk−yk2)yk2(1−yk2)wjk2)f′(netj1)=(∑k=1lδk2wjk2)yj1(1−yj1)
将公式4.32带入4.27中,得到隐藏层到输出层权值调整:
Δwjk2=ηδk2yj1=η(tk−yk2)yk2(1−yk2)yj1
将公式4.33带入4.26中,得到输入层到隐藏层权值调整:
Δwij1=ηδj1xi=η(∑k=1lδk2wjk2)yj1(1−yj1)xi
对于一个多层的神经网络,假设一共有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=η(tk−ykh+1)ykh+1(1−ykh+1)yjh(j=0,1,2,...,mh;k=1,2,...,l)
对于第h隐藏层:
Δwijh=ηδjhyih−1=η(∑k=1lδkh+1wjkh+1)yjh(1−yjh)yjh−1(i=0,1,2,...,mh−1;j=1,2,...,mh)
按照以上规律逐层类推,则第一个隐藏层的权值调整公式为:
Δwpq1=ηδq1xp=η(∑r=1m2δr2wqr2)yq1(1−yq1)xp(p=0,1,2,...,n;j=1,2,...,m1)
4.5.3BP算法推导的补充说明
我们已经从头到尾详细推导了一遍BP算法的整个流程,在这一小节中对BP算法再做两点补充说明:
1.网络的偏置值。
在上文中我们的推导过程一直是使用权值w来进行计算的,如果我们把偏置值独立出来,那么偏置值的参数应该怎么调整呢?
我们可以看到公式4.26以及4.27,在公式4.26中,把i的取值设置为0,并且我们知道x0 = 1,所以我们可以得到:
Δbj1=ηδj1
在公式4.26中,把j的取值设置为0,并且我们知道y0 = 1,所以我们可以得到:
Δbk2=ηδk2
如果是把偏置值单独拿出来计算的话就是公式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=(T−Yh+1)∘f′(YhWh+1)=(T−Yh+1)∘Yh+1∘(1−Yh+1)
公式4.41中的“ ∘ ”符号是element-wise multiplication,意思是矩阵中的元素对应相乘。例如下面的例子:
对于第h隐藏层的学习信号δh:
δh=δh+1(Wh+1)T∘f′(Yh−1Wh)=δh+1(Wh+1)T∘Yh∘(1−Yh)
对于第1隐藏层的学习信号δ1:
δ1=δ2(W2)T∘f′(XW1)=δ2(W2)T∘Y1∘(1−Y1)
对于输出层的权值矩阵Wh+1:
ΔWh+1=η(Yh)Tδh+1
对于第h隐藏层权值矩阵Wh:
ΔWh=η(Yh−1)Tδh
对于第1隐藏层权值矩阵W1:
ΔW1=η(X)Tδ1
作者介绍