简单理解LSTM
一、RNN
循环神经网络是一种用来处理序列数据的神经网络。相比于一般的神经网络来说,它能够处理序列变化的数据。比如某个单词的意思会因为上文提到的内容而有不同的含义,RNN就能很好的解决这类问题。
设\(x^{(t)}\)为\(t\)状态下数据的输入,\(y^{(t)}\)为\(t\)状态下的输出,\(h^{(t-1)}\)为接收到\(t-1\)的输入,\(h^{(t)}\)为传递到\(t+1\)状态的输出,则有:
\[h^{(t)} = 激活函数(W_1h^{(t-1)}+W_2x^{t} + b_1)
\]
\[y^{(t)}=激活函数(W_0h^{t}+b_0)
\]
二、LSTM
长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。
设设\(x^{(t)}\)为\(t\)状态下数据的输入,,\(y^{(t)}\)为\(t\)状态下的输出,\(c^{t-1}\)、\(h^{(t-1)}\)为接收到\(t-1\)的状态输入,\(c^t\)、\(h^{(t)}\)为传递到\(t+1\)状态的输出,则有:
忘记门门控信号:
\[f_{forget}^t = sigmoid(W_{forget}[h^{t-1},x^t]+b_{forget})
\]
输入门门控信号:
\[f_{input-contral}^t = sigmoid(W_{input-contral}[h^{t-1},x^t]+b_{input-contral})
\]
输入数据:
\[f_{input-data}^t = tanh(W_{input-data}[h^{t-1},x^t]+b_{input-data})
\]
忘记门控制\(c^{t-1}\)输入的数据加上输入门控制的输入数据构成新的\(c^t\)
\[c^t = f_{fortget}\otimes c^{t-1} +f_{input-contral}\otimes f_{input-data}
\]
输出门门控信号
\[f_{output}^t=sigmoid(W_{output}[h^{t-1},x^{t}]+b_{output})
\]
输出门控制\(c^t\)后的输出
\[h^t=f_{output}^t\otimes tanh(c^t)
\]
最终使用激活函数输出:
\[y^t=sigmoid(Wh^t)
\]
注意:此处\(\otimes\)为哈达玛积。