LSTM & Bi-lstm
快速梳理
LSTM(Long Short-Term Memory)长短期记忆人工神经网络是对RNN的一种改进,可以有效解决RNN存在的长期依赖问题。下图展示了LSTM的网络结构,我们可以看到其中有许多奇怪的部分,被称之为“门”。下面就具体介绍一下遗忘门,输入门和输出门以及重要的细胞状态(Cell)。
遗忘门
遗忘门(Forget gate)顾名思义,是用来控制模型以多少比例或者说概率“遗忘”存贮在细胞\(C_{t-1}\)中的“记忆”。图中输入的有上一序列的隐藏状态\(h_{t-1}\)和本序列数据\(x_t\) ,通过一个激活函数,一般是sigmoid,得到遗忘门的输出\(f_t\)。由于sigmoid的输出f(t)在[0,1]之间,因此这里的输出\(f^t\)代表了遗忘上一层细胞状态的概率。用数学表达式即为:\(f_t = \sigma(W_f[h_{t-1}, x_t] + b_f)\)。
遗忘门子结构如下图所示:
输入门
输入门(Input gate)负责处理当前序列位置的输入,我们可以看到这边有两条路,用公式表示分别是\(i_t = \sigma(W_i[h_{t-1}, x_t] + b_i)\)和\(\tilde{C_t} = tanh(W_C[h_{t-1}, x_t] + b_C)\),前者表示以多少的概率增加新的信息,后者表示新的信息。
它的结构如下图:
更新记忆细胞
这一步就是根据前面遗忘门和输入门得到的遗忘量以及新增信息来更新记忆细胞C,公式表示为\(C_t = f_t*C_{t-1} + i_t*\tilde{C_t}\)。
结构如图所示:
输出门
在更新了细胞后,我们通过输出门(Output Gate)来控制多少信息需要被传递到下一个状态\(h_t\)。其公式表示为\(o_t = \sigma(W_o[h_{t-1}, x_t] + b_o), h_t = o_t * tanh(C_t)\)。
结构如下图所示:
Bi-lstm
双向LSTM其实就是对两个LSTM(前向和后向)进行整合,使其拥有同时从上文和下文中提取信息的能力,主要的整合方式有直接拼接cancat,以及加权求和。在karas中可以直接调用Bidirectional中的模块实现 bi_lstm = Bidirectional(LSTM(100, return_sequences=True))(embedded_sequences)。