转载请标明出处:
https://seektech.github.io/2018/01/23/误差反向传播(BP)算法.html Miao LI (seektech)
误差反向传播算法是训练神经网络最常用且最基础的算法
这里以三层神经网络为基础,结合不同的准则函数和**(转移)函数对误差反向传播算法做出详细的计算
一、三层感知器
网络描述:
训练数据输入输出对:{xki,tkj},k表示第k个样本,k=1,2,⋯,n
输出层节点的输出:zkj
隐含层节点的输出:ykh
输入信号:xki
输入层端点数:d+1
输入层节点i至隐含层h的权重:wih
隐含层节点h至输出层j的权重:whj
目标:使z1≈t1,z2≈t2,⋯,zc≈tz
误差:E(w)=∑kJ(w)k,J(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=−η∑k∂E(w)∂zkj∂zkj∂netkj∂netkj∂whj=−η∑kf′2(netkj)∂E(w)∂zkjykh
输入层至隐含层:
Δwih=−η∂E(w)∂wih=−η∑k,j∂E(w)∂zkj∂zkj∂netkj∂netkj∂ykh∂ykh∂netkh∂netkh∂wih=−η∑k,j∂E(w)∂zkjf′2(netkj)whjf′1(netkh)xki=−η∑k⎧⎩⎨⎪⎪f′1(netkh)⎧⎩⎨⎪⎪∑j∂E(w)∂zkjf′2(netkj)whj⎫⎭⎬⎪⎪xki⎫⎭⎬⎪⎪
三、准则函数
1. MSE 误差平方和损失(最常用)
E(w)=∑kJ(w)k=12∑k,j(tkj−zkj)2
∂E(w)∂zkj=−(tkj−zkj)
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,1−tkjzkj}
4. Minkowski损失
Emink((w))=∑kJ(w)k=∑k,j|tkj−zkj|R,1≤R<2
四、激励函数
1. Sigmoid函数
f(s)=11+e−s
f′(s)=f(s)(1−f(s))
2. SoftMax
f(netkj)=enetkj∑jenetkj
f′2(netkj)=∂zkm∂netkj={zkj(1−zkj)−zkmzkjm=jm≠j
3. 双曲正切函数
f(s)=es+e−ses+e−s
f′(s)=1−f2(s)
五、Case 1: MSE+Sigmoid+Sigmoid
准则函数:MSE,隐含层激励函数:Sigmoid,输出层激励函数:Sigmoid
MSE:
E(w)=∑kJ(w)k=12∑k,j(tkj−zkj)2
∂E(w)∂zkj=−(tkj−zkj)
Sigmoid:
f1(netkh)=11+e−netkh
f′1(netkh)=f1(netkh)(1−f1(netkh))=ykh(1−ykh)
Sigmoid:
f2(netkj)=11+e−netkj
f′2(netkj)=f2(netkj)(1−f2(netkj))=zkj(1−zkj)
隐含层至输出层:
Δwhj=−η∑kf′2(netkj)∂E(w)∂zkjykh=η∑kf′2(netkj)(tkj−zkj)ykh
输入层至隐含层:
Δwih=−η∑k⎧⎩⎨⎪⎪f′1(netkh)⎧⎩⎨⎪⎪∑j∂E(w)∂zkjf′2(netkj)whj⎫⎭⎬⎪⎪xki⎫⎭⎬⎪⎪=η∑k⎧⎩⎨⎪⎪f′1(netkh)⎧⎩⎨⎪⎪∑j(tki−zkj)f′2(netkj)whj⎫⎭⎬⎪⎪xki⎫⎭⎬⎪⎪
六、Case 2: MSE+Sigmoid+SoftMax
准则函数:MSE,隐含层激励函数:Sigmoid,输出层激励函数:SoftMax
MSE:
E(w)=∑kJ(w)k=12∑k,j(tkj−zkj)2
∂E(w)∂zkj=−(tkj−zkj)
Sigmoid:
f1(netkh)=11+e−netkh
f′1(netkh)=f1(netkh)(1−f1(netkh))=ykh(1−ykh)
SoftMax
f2(netkj)=enetkj∑ienetki
f′2(netkj)=∂zkm∂netkj={zkj(1−zkj)−zkmzkjm=jm≠j
隐含层至输出层:
这里切记不能直接带第二节中的公式,因为SoftMax**函数需要分情况讨论
Δwhj=−η∂E(w)∂whj=−η∑k∂E(w)∂netkj∂netkj∂whj=−η∑kykh∑m=1c∂E(w)∂zkm∂zkm∂netkj=η∑kykh∑m=1c(tkm−zkm)∂zkm∂netkj=η∑kykh⎧⎩⎨⎪⎪∑m≠jc(tkm−zkm)(−zkjzkm)+(tkj−zkj)zkj(1−zkj)⎫⎭⎬⎪⎪=η∑kykh{∑m=1c(tkm−zkm)(−zkjzkm)+(tkj−zkj)zkj}
输入层至隐含层:
这里切记不能直接带第二节中的公式,因为SoftMax**函数需要分情况讨论
Δwih=−η∂E(w)∂wih=−η∑k∂E(w)∂ykh∂ykh∂netkh∂netkh∂wih=−η∑kf′1(netkh)xki∂E(w)∂ykh=−η∑kxkif′1(netkh){∑m=1c∂E(w)∂netkmnetkmykh}=−η∑kxkif′1(netkh){∑m=1c∂E(w)∂netkmwhm}=−η∑kxkif′1(netkh){∑m=1cwhm{∑n=1c∂E(w)zknzkn∂netkm}}=η∑kxkif′1(netkh)⎧⎩⎨⎪⎪∑m=1cwhm⎧⎩⎨⎪⎪∑n≠mc(tkn−zkn)(−zknzkm)+(tkm−zkm)zkm(1−zkm)⎫⎭⎬⎪⎪⎫⎭⎬⎪⎪=η∑kxkif′1(netkh){∑m=1cwhm{∑n=1c(tkn−zkn)(−zknzkm)+(tkm−zkm)zkm}}
七、Case 3: 交叉熵+Sigmoid+SoftMax
准则函数:交叉熵,隐含层激励函数:Sigmoid,输出层激励函数:SoftMax ,其余步骤与第六节雷同
Ece(w)=∑kJ(w)k=∑k,jtkjln(tkj/zkj)
∂Ece(w)∂zkj=−tkj/zkj