这篇文章是看了刘建平老师的LSTM模型与前向反向传播算法后的笔记,同时参考这两篇文章,包括一些公式推导,都是自己的理解,如有错误,欢迎指出。
LSTM前向传播算法
这边直接给出前向传播过程中的公式计算,具体的可以参考上面文章:

其中,
x(t)−n×1,h(t)−m×1V−l×m,c−l×1,y^(t)−l×1o(t),f(t),i(t),a(t),C(t)−m×1Wf,Wi,Wa,Wo−m×mUf,Ui,Ua,Uo−m×nbf,bi,ba,bo−m×1
L(t)分为两部分,一部分为l(t),另一部分为t时刻之后的损失L(t+1):
L(t)={l(t)+L(t+1),t<τl(t), t=τ
所以,当t=τ时,我们有δh(τ)=∂h(τ)∂L=VT(y^(τ)−y(τ)),具体的推导可以参考RNN,此外,
dL=(∂h(τ)∂L)Tdh(τ)=(δh(τ))Td(o(τ)⊙tanh(C(τ)))=tr((δh(τ))T(o(τ)⊙dtanh(C(τ))))=tr((δh(τ)⊙o(τ))Tdtanh(C(τ)))=tr((δh(τ)⊙o(τ))T(1−tanh2(C(τ)))⊙dC(τ))=tr([δh(τ)⊙o(τ)⊙(1−tanh2(C(τ)))]TdC(τ))
所以,δC(τ)=∂C(τ)∂L=δh(τ)⊙o(τ)⊙(1−tanh2(C(τ)))。
接下来由t+1项往前推导:
dL所以:δh(t)其中,∂h(t)∂h(t+1)如下得出:dh(t+1)C(t+1)dC(t+1)=dl(t)+dL(t+1)=(∂h(t)∂l(t))Tdh(t)+(∂h(t+1)∂L(t+1))Tdh(t+1)=(∂h(t)∂l(t))Tdh(t)+(∂h(t+1)∂L(t+1))T(∂h(t)∂h(t+1))Tdh(t)=∂h(t)∂L=∂h(t)∂l(t)+∂h(t)∂h(t+1)δh(t+1)=do(t+1)⊙tanh(C(t+1))=tanh(C(t+1))⊙do(t+1)+o(t+1)⊙dtanh(C(t+1))=tanh(C(t+1))⊙o(t+1)⊙(1−o(t+1))⊙dWoh(t)+o(t+1)⊙(1−tanh2(C(t+1)))⊙dC(t+1)=diag[tanh(C(t+1))⊙o(t+1)⊙(1−o(t+1))]Wodh(t)+diag[o(t+1)⊙(1−tanh2(C(t+1)))]dC(t+1)=C(t)⊙f(t+1)+i(t+1)⊙a(t+1)=f(t+1)⊙dC(t)+C(t)⊙df(t+1)+a(t+1)⊙di(t+1)+i(t+1)⊙da(t+1)=f(t+1)⊙dC(t)+C(t)⊙f(t+1)⊙(1−f(t+1))dWfh(t)+a(t+1)⊙i(t+1)⊙(1−i(t+1))⊙dWih(t)+i(t+1)⊙(1−tanh2(a(t+1)))⊙dWah(t)=f(t+1)⊙dC(t)+diag[C(t)⊙f(t+1)⊙(1−f(t+1))]Wfdh(t)+diag[a(t+1)⊙i(t+1)⊙(1−i(t+1))]Widh(t)+diag[i(t+1)⊙(1−tanh2(a(t+1)))]Wadh(t)
将dC(t+1)代入dh(t+1)得到一个很庞大的式子,你们可以自己计算,这边直接给出答案:
∂h(t)∂h(t+1)其中,ΔC=(Wo)Tdiag[tanh(C(t+1))⊙o(t+1)⊙(1−o(t+1))]+(Wf)Tdiag[C(t)⊙f(t+1)⊙(1−f(t+1))⊙ΔC]+(Wi)Tdiag[a(t+1)⊙i(t+1)⊙(1−i(t+1))⊙ΔC]+(Wa)Tdiag[i(t+1)⊙(1−tanh2(a(t+1)))⊙ΔC]=o(t+1)⊙(1−tanh2(C(t+1)))
有了δh(t),δC(t)就很容易得出来了:

有了δh(t),δC(t),其他一些参数的梯度就很容易得出来了。