RNN, LSTM
# 矩阵代表变换方式,相当于加减乘除。值就是值。
# :param varname: jsDoc风格的注释,用于说明参数的作用
LSTM笔记、个人理解:
设定:先遗忘→再输入门→输出门
C_t-1负责长时记忆,h_t-1负责短时记忆
遗忘门
\(f_t=\sigma(\mathbf{W}_f[\mathbf{h}_{t-1},\mathbf{x}_t]+b_f)\)
[h_t-1,x_t]代表纵向堆叠:\(\begin{bmatrix}
h_{t-1}\\x_t
\end{bmatrix}\)
输入门
\(
\boldsymbol{i}_t=\sigma\left(\boldsymbol{W}_i\left[\boldsymbol{h}_{t-1},\boldsymbol{x}_t\right]+b_i\right)
\)
\(
\tilde{\boldsymbol{c}}_t=tanh\left(\boldsymbol{W}_c\left[\boldsymbol{h}_{t-1},\boldsymbol{x}_t\right]+b_c\right)
\)
长时记忆更新
\(\boldsymbol{c}=\boldsymbol{f}_t \cdot \boldsymbol{c}_{t-1}+\boldsymbol{i}_t \cdot \widetilde{\boldsymbol{c}}_t\)
\(f_t\)的乘法比后面加法影响更大
输出门
输出:\(
\boldsymbol{o}_t=\sigma(\boldsymbol{W}_o \cdot [\boldsymbol{h}_{t-1},\boldsymbol{x}_t]+b_o)
\)
隐藏层:\(
\boldsymbol{h}_t=\boldsymbol{o}_t \cdot tanh(c_t)
\)
与RNN对比
本文假设都用:
sigmoid \(\sigma\) 函数:做输出层激活函数
tanh函数:隐藏层激活函数
\(o_t=\sigma(W_o \cdot h_t + b_o)\)
\(h_t=tanh(W_{in} \cdot x_t+W_h \cdot h_{t-1})\)