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的理解
决定我们会从细胞状态中丢弃什么信息,该门会读取\(h_{t-1}\)和\(x_t\),输出一个在0到1的数值给每个细胞状态\(c_{t-1}\)中的数字。回到语言模型的例子来基于已经看到的预测下一个词,可能包含当前主语的性别,因此正确的带刺可以被选择出来。
忘记门层
$f_{t}=\sigma\left(W_{f}\bullet[h_{t-1},x_{t}]+b_{f}\right)$
sigmoid层成“输入层”决定什么值我们将要更新,然后一个tanh层创建一个新的候选值向量,\(\tilde{C}_{t}\)会被加入到状态。
输入门层
$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)$
更新细胞状态
$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}$这就是新的候选值。
输出层
先运行一个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…