LSTM(Long Short Term Memory)

一、RNN

​ 全拼 Recurrent Neural Networks.

alt

​ 当前节点受到前面节点的隐节点影响。

RNN的数学表达式可以表示为:

ht=σ(xtwxt+ht1wht+b)h_t =\sigma(x_t * w_{xt}+h_{t-1} *w_{ht}+b)

​ RNN单元:

alt

​ 长期依赖(Long Term Dependencies):

1
2
3
4
5
6
eg1: The cat, which already ate a bunch of food, was full.
| | | | | | | | | | |
t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10
eg2: The cats, which already ate a bunch of food, were full.
| | | | | | | | | | |
t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10

​ 假如我们想要预测full前面的动词形态,我们需要去分析 t1 的单复数,然而 t1 距离 t10 之间的距离太远,RNN 丧失了学习接收间隔太远信息的能力。

二、LSTM

​ 具有长短期记忆的能力的神经网络。

​ 之所以能够解决RNN的长期依赖问题,因为LSTM 引入了 “门(gate)”的概念,用门来控制特征的流通和损失。是由一系列LSTM单元(LSTM unit)组成,链式结构如下:

alt

​ LSTM的核心部分如下图最上面的类似传送带的部分(C1,...Ct1,CtC_1,...C_{t-1},C_{t}),一般称为单元状态(cell state),自始至终的存在于LSTM的链式系统中。

alt

​ 其中

Ct=ftCt1+itCt~C_t = f_t*C_{t-1}+i_t*\tilde{C_t}

​ 如下图,ftf_t 被称为遗忘门,表示Ct1C_{t-1}的哪些特征被用于计算CtC_tftf_t是一个向量,其中的每个元素均位于[0,1]之间。通常我们使用sigmoid函数作为激活函数。

ft=σ(Wf[ht1,xt]+bf)f_t = \sigma(W_f\cdot[h_{t-1},x_t]+b_f)

alt

​ 如下图,C~\tilde{C} 表示单元状态更新值,由输入数据xtx_t和隐节点ht1h_{t-1} 经由一个神经网络层得到,单元状态更新值一般采用tanh 作为激活函数。 iti_t 通常被称为输入门,同ftf_t一样也是元素介于[0,1]之间的向量。

it=σ(Wi[ht1,xt]+bi)C~=tanh(WC[ht1,xt]+bC)i_t = \sigma(W_i \cdot [h_{t-1},x_t]+b_i) \\ \tilde {C} = tanh(W_C \cdot [h_{t-1},x_t]+b_C)

alt

​ 如下图,计算当前节点传送给下一个节点的隐节点的输出hth_t的逻辑如下:

ot=σ(Wo[ht1,xt]+bo)ht=ottanh(Ct)o_t = \sigma(W_o \cdot [h_{t-1},x_t]+b_o) \\ h_t = o_t \cdot tanh(C_t)

alt