目录
1.LSTM网络
长短期记忆网络(Long Short Term Memory networks)-通常叫做LSTMs----是RNN中一个特殊的类型。设计LSTMs的主要目的是避免出现长时期依赖的问题,它们的本质是能够记住很长时期内的信息,而且非常轻松能够做到。
先看一下RNN模块:
再看一下LSTM模块:
LSTM模块中的符号定义:
注意:合并的线表示把两条线上的向量进行合并,如 与 的合并后就是 。
1.1 细胞状态(cell state)
LSTMs最关键的地方在于cell(整个绿色的框)的状态和结构图中那条横穿的水平线,这种结构能够轻松实现信息从整个cell中穿过而不做改变,这样就能实现长时期的记忆保留:
这里添加了门(gates)的概念,选择性的添加或删除信息,主要是通过一个sigmoid网络层和一个逐点相乘来实现的。
注意:
- sigmoid层输出的每个元素都是一个在0和1之间的实数,表示让对应信息通过的权重,如 0 表示不让任何信息通过;1 表示让所有信息通过。
- 每个LSTM都有三个这样的门结构,来实现保护和控制信息,分别是遗忘门(forget fate)、输入门(inout gate )和 输出门(output gate)。
1.2 遗忘门(forget gate)
首先LSTM要决定哪些信息继续通过这个cell(指的是中的信息),它的输入的 和 ,如下图粗线所示:
1.3 输入门(input gate)
这一步是决定让多少新的信息加入到cell状态中来(指的是 中的信息),实现这个主要包括两步:
- 首先,一个经过sigmoid层,来决定哪些信息需要更新;一个经过tanh层生成向量,作为备选的用来更新的内容, 。
- 再下一步,将上面俩各部分内容联合起来,对cell的状态进行一个更新。
有了上面的步骤我们就可以将细胞状态 更新为 ,替换掉老的状态信息。
- 首先旧的状态 与 相乘,去掉不想保留的信息;
- 然后加上 与 相乘的结果,这部分信息就是我们要添加的新内容。
1.4 输出门(output gate)
最后,需要决定LSTM模块的输出信息,主要依赖cell的状态 经过一个非线性的过滤:
- 首先,我们让输入信息经过sigmoid层过滤掉不需要保留的信息;
- 然后,让更新的细胞状态 经过一个 tanh层(把数值更新在-1到1之间);
- 最后,把tanh层的输出与 sigmoid层计算出来的权重相乘,这样就得到了最后输出的结果。
2. LSTM的变种GRU
GRU,Gated Recurrent Unit,在GRU中只有两个门:重置门(reset gate)和更新门(update gate)。同时在这个结构中将细胞状态和隐层状态进行了合并,最后模型比标准的LSTM结构要简单,后来这个结构也非常流行:
其中, 表示重置门, 表示重置门。这里重置门决定是否将之前的状态忘记。当 趋于0 的时候,前一个时刻的状态信息 会被忘掉,隐层状态 会被重置为当前输入的信息;更新门决定是否将隐层状态更新为新的状态 。
GRU与LSTM的对比:
- GRU少了一个门,同时少了细胞状态 ;
- 在LSTM中 通过遗忘门和输入门控制信息的保留和传入;GRU则通过重置门来控制是否保留上一个时刻隐层的信息,但不再限制当前时刻信息的输入;
- LSTM中,虽然得到了新的细胞状态 ,但是还不能直接输出,而是要经过一个过滤处理: ;同样,在GRU中 虽然也得到了最新的隐层状态信息 ,但还是不能直接输出,而是通过更新门来控制最后的输出: