误差反向传播(BP)算法

转载请标明出处:
https://seektech.github.io/2018/01/23/误差反向传播(BP)算法.html Miao LI (seektech)

误差反向传播算法是训练神经网络最常用且最基础的算法

这里以三层神经网络为基础,结合不同的准则函数和**(转移)函数对误差反向传播算法做出详细的计算

一、三层感知器

误差反向传播(BP)算法

网络描述:

训练数据输入输出对:{xki,tkj}k表示第k个样本,k=1,2,,n

输出层节点的输出:zkj

隐含层节点的输出:ykh

输入信号:xki

输入层端点数:d+1

输入层节点i至隐含层h的权重:wih

隐含层节点h至输出层j的权重:whj

目标:使z1t1,z2t2,,zctz

误差:E(w)=kJ(w)kJ(w)k表示单个样本的误差

每个样本所经历的计算:

对第k个样本,隐含层h节点的输入加权和为:

netkh=iwihxki

经过隐含层的激励(f1),隐含层节点h的输出为:

ykh=f1(netkh)=f1(iwihxki)

输出层j节点的输入加权和为:

netkj=hwhjykh=hwhjf1(netkh)=hwhjf1(iwihxki)

经过输出层的激励(f2),输出层节点j的输出为:

zkj=f2(netkj)=f2(hwhjf1(iwihxki))

二、依赖复合函数链式求导计算

更新权重采用的是训练神经网络的δ规则(梯度下降):

wij=wij+Δwij

Δwij=ηE(w)wij

隐含层至输出层:(激励函数为SoftMax时推导略有不同)

Δwhj=ηE(w)whj=ηkE(w)zkjzkjnetkjnetkjwhj=ηkf2(netkj)E(w)zkjykh

输入层至隐含层:

Δwih=ηE(w)wih=ηk,jE(w)zkjzkjnetkjnetkjykhykhnetkhnetkhwih=ηk,jE(w)zkjf2(netkj)whjf1(netkh)xki=ηkf1(netkh)jE(w)zkjf2(netkj)whjxki

三、准则函数

1. MSE 误差平方和损失(最常用)

E(w)=kJ(w)k=12k,j(tkjzkj)2

E(w)zkj=(tkjzkj)

2. 交叉熵损失

Ece(w)=kJ(w)k=k,jtkjln(tkj/zkj)

Ece(w)zkj=tkj/zkj

3. HingeLoss损失

Ehinge(w)=kJ(w)k=k,jmax{0,1tkjzkj}

4. Minkowski损失

Emink((w))=kJ(w)k=k,j|tkjzkj|R,1R<2

四、激励函数

1. Sigmoid函数

f(s)=11+es

f(s)=f(s)(1f(s))

2. SoftMax

f(netkj)=enetkjjenetkj

f2(netkj)=zkmnetkj={zkj(1zkj)zkmzkjm=jmj

3. 双曲正切函数

f(s)=es+eses+es

f(s)=1f2(s)

五、Case 1: MSE+Sigmoid+Sigmoid

准则函数:MSE,隐含层激励函数:Sigmoid,输出层激励函数:Sigmoid

MSE:

E(w)=kJ(w)k=12k,j(tkjzkj)2

E(w)zkj=(tkjzkj)

Sigmoid:

f1(netkh)=11+enetkh

f1(netkh)=f1(netkh)(1f1(netkh))=ykh(1ykh)

Sigmoid:

f2(netkj)=11+enetkj

f2(netkj)=f2(netkj)(1f2(netkj))=zkj(1zkj)

隐含层至输出层:

Δwhj=ηkf2(netkj)E(w)zkjykh=ηkf2(netkj)(tkjzkj)ykh

误差反向传播(BP)算法

误差反向传播(BP)算法

输入层至隐含层:

Δwih=ηkf1(netkh)jE(w)zkjf2(netkj)whjxki=ηkf1(netkh)j(tkizkj)f2(netkj)whjxki

误差反向传播(BP)算法

误差反向传播(BP)算法

误差反向传播(BP)算法

六、Case 2: MSE+Sigmoid+SoftMax

准则函数:MSE,隐含层激励函数:Sigmoid,输出层激励函数:SoftMax

MSE:

E(w)=kJ(w)k=12k,j(tkjzkj)2

E(w)zkj=(tkjzkj)

Sigmoid:

f1(netkh)=11+enetkh

f1(netkh)=f1(netkh)(1f1(netkh))=ykh(1ykh)

SoftMax

f2(netkj)=enetkjienetki

f2(netkj)=zkmnetkj={zkj(1zkj)zkmzkjm=jmj

隐含层至输出层:

这里切记不能直接带第二节中的公式,因为SoftMax**函数需要分情况讨论

Δwhj=ηE(w)whj=ηkE(w)netkjnetkjwhj=ηkykhm=1cE(w)zkmzkmnetkj=ηkykhm=1c(tkmzkm)zkmnetkj=ηkykhmjc(tkmzkm)(zkjzkm)+(tkjzkj)zkj(1zkj)=ηkykh{m=1c(tkmzkm)(zkjzkm)+(tkjzkj)zkj}

输入层至隐含层:

这里切记不能直接带第二节中的公式,因为SoftMax**函数需要分情况讨论

Δwih=ηE(w)wih=ηkE(w)ykhykhnetkhnetkhwih=ηkf1(netkh)xkiE(w)ykh=ηkxkif1(netkh){m=1cE(w)netkmnetkmykh}=ηkxkif1(netkh){m=1cE(w)netkmwhm}=ηkxkif1(netkh){m=1cwhm{n=1cE(w)zknzknnetkm}}=ηkxkif1(netkh)m=1cwhmnmc(tknzkn)(zknzkm)+(tkmzkm)zkm(1zkm)=ηkxkif1(netkh){m=1cwhm{n=1c(tknzkn)(zknzkm)+(tkmzkm)zkm}}

七、Case 3: 交叉熵+Sigmoid+SoftMax

准则函数:交叉熵,隐含层激励函数:Sigmoid,输出层激励函数:SoftMax ,其余步骤与第六节雷同

Ece(w)=kJ(w)k=k,jtkjln(tkj/zkj)

Ece(w)zkj=tkj/zkj