LSTM入门学习

RNN

RNN隐藏层神经元计算公式为 $ s_{t} = f\left( x_{t}U+s_{t-1}W \right) $ 其中U、W是网络的参数,f表示激活函数。RNN隐层神经元的计算由t时刻输入xt,t-1时刻隐层神经元激活st-1作为输入。

LSTM结构图

lstm

LSTM核心思想

关键在于细胞状态,水平线在图上方贯穿运行,只有少量线性交互。LSTM拥有三个门,来保护和控制细胞状态。

对LSTM的理解

决定我们会从细胞状态中丢弃什么信息,该门会读取\(h_{t-1}\)和\(x_t\),输出一个在0到1的数值给每个细胞状态\(c_{t-1}\)中的数字。回到语言模型的例子来基于已经看到的预测下一个词,可能包含当前主语的性别,因此正确的带刺可以被选择出来。

忘记门层

lstm
$f_{t}=\sigma\left(W_{f}\bullet[h_{t-1},x_{t}]+b_{f}\right)$

sigmoid层成“输入层”决定什么值我们将要更新,然后一个tanh层创建一个新的候选值向量,\(\tilde{C}_{t}\)会被加入到状态。

输入门层

lstm
$i_{t}=\sigma\left(W_{i}\bullet[h_{t-1},x_{t}]+b_{i}\right)$

$\tilde{C}_{t}=tanh\left(W_{C}\bullet[h_{t-1},x_{t}]+b_{C}\right)$

更新细胞状态

lstm
$C_{t}=f_{t}*C_{t-1}+i_{t}*\tilde{C}_{t}$
将$\tilde{C}_{t-1}$更新为$C_{t}$,把旧状态与$f_{t}$相乘,丢弃掉我们需要丢弃的信息,接着加上$i_{t}$和$\tilde{C}_{t}$这就是新的候选值。

输出层

lstm
先运行一个sigmoid层来确定细胞状态的那个部分将输出出去,再通过tanh进行处理(得到一个在-1到1之间的值)并将它和sigmoid门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。

LSTM前向传导

公式为

$i=\sigma\left( x_{t}U^i+S_{T-1}W^i \right)$

$f=\sigma\left(x_{t}U^f+s_{t-1}W^f\right)$

$o=\sigma\left(x_{t}U^o+s_{t-1}W^f\right)$

$g=tanh\left(x_{t}U^g+s_{t-1}W^g\right)$

$c_{t}=c_{t-1}\circ f+g\circ i$

$c_{t}=tanh\left(c_{t}\right) \circ o$

$tanh\left(x\right)=\frac{e^x-e-x}{e^x+e-x}$

to be continued…