随时间的反向传播算法 BPTT
生活随笔
收集整理的這篇文章主要介紹了
随时间的反向传播算法 BPTT
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文轉自:https://www.cntofu.com/book/85/dl/rnn/bptt.md
隨時間反向傳播(BPTT)算法
先簡單回顧一下RNN的基本公式:
?
st=tanh(Uxt+Wst?1)st=tanh?(Uxt+Wst?1)?
?
y^t=softmax(Vst)y^t=softmax(Vst)?
RNN的損失函數定義為交叉熵損失:
?
Et(yt,y^t)=?ytlogy^tEt(yt,y^t)=?ytlog?y^t?
?
E(y,y^)=∑tEt(yt,y^t)=?∑tytlogy^tE(y,y^)=∑tEt(yt,y^t)=?∑tytlog?y^t?
?
ytyt是時刻t的樣本實際值,?
y^ty^t是預測值,我們通常把整個序列作為一個訓練樣本,所以總的誤差就是每一步的誤差的加和。我們的目標是計算損失函數的梯度,然后通過梯度下降方法學習出所有的參數U, V, W。比如:
?E?W=∑t?Et?W?E?W=∑t?Et?W?
為了更好理解BPTT我們來推導一下公式:
前向 前向傳播1:
?
a0=x0?ua0=x0?u?
?
b0=s?1?wb0=s?1?w?
?
z0=a0+b0+kz0=a0+b0+k?
?
s0=func(z0)s0=func(z0)?(
funcfunc?是 sig或者tanh)
?
前向 前向傳播2:
?
a1=x1?ua1=x1?u?
?
b1=s0?wb1=s0?w?
?
z1=a1+b1+kz1=a1+b1+k?
?
s1=func(z1)s1=func(z1)(
funcfunc?是 sig 或者tanh)
?
?
q=s1?v1q=s1?v1?
$$z_t = ux_t + ws_{t-1} + k$$
?
st=func(zt)st=func(zt)?
輸出 層:
?
o=func(q)o=func(q)(
funcfunc?是 softmax)
?
?
E=func(o)E=func(o)(
funcfunc?是 x-entropy)
?
下面 是U的推導
?
?E/?u=?E/?u1+?E/?u0?E/?u=?E/?u1+?E/?u0?
?
?E/?u1=?E/?o??o/?q??q/?s1??s1/?z1??z1/?a1??a1/?u1?E/?u1=?E/?o??o/?q??q/?s1??s1/?z1??z1/?a1??a1/?u1?
?
?E/?u0=?E/?o??o/?q??q/?s1??s1/?z1??z1/?b1??b1/?s0??s0/dz0??z0/?a0??a0/?u0?E/?u0=?E/?o??o/?q??q/?s1??s1/?z1??z1/?b1??b1/?s0??s0/dz0??z0/?a0??a0/?u0?
?
?E/?u=?E/?o??o/?q?v1??s1/?z1?((1?x1)+(1?w1??s0/?z0?1?x0))?E/?u=?E/?o??o/?q?v1??s1/?z1?((1?x1)+(1?w1??s0/?z0?1?x0))?
?
?E/?u=?E/?o??o/?q?v1??s1/?z1?(x1+w1??s0/?z0?x0)?E/?u=?E/?o??o/?q?v1??s1/?z1?(x1+w1??s0/?z0?x0)?
W參數的推導如下
?
?E/?w=?E/?o??o/?q?v1??s1/?z1?(s0+w1??s0/?z0?s?1)?E/?w=?E/?o??o/?q?v1??s1/?z1?(s0+w1??s0/?z0?s?1)?
總結
?
?L?u=∑t?L?ut=?L?o?o?s1?s1?u1+?L?o?o?s1?s1?s0?s0?u0?L?u=∑t?L?ut=?L?o?o?s1?s1?u1+?L?o?o?s1?s1?s0?s0?u0?
?
?L?w=∑t?L?wt=?L?o?o?s1?s1?w1+?L?o?o?s1?s1?s0?s0?w0?L?w=∑t?L?wt=?L?o?o?s1?s1?w1+?L?o?o?s1?s1?s0?s0?w0?
?
xtxt是時間t的輸入
?
轉載于:https://www.cnblogs.com/carlber/p/11084932.html
總結
以上是生活随笔為你收集整理的随时间的反向传播算法 BPTT的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java泛型总结---基本用法,类型限定
- 下一篇: 微信小程序-路由方式