WangYu::Space

Study, think, create, and grow. Teach yourself and teach others.

循环神经网络

分类:机器学习创建时间:2019-03-10 00:00:00

本文是阅读 Hands-On Machine Learning with Scikit-Learn and TensorFlow 第 14 章记录的笔记,总结了常见基础 RNN,LSTM 和 GRU 的网络结构,并描述了它们为什么要那样设计。

RNN

Recurrent neural networks (RNN) 一种号称能够预测未来的网络模型,其实质是输入一个序列,预测接下来的序列。基础的 RNN 的模型非常恨简单,他看起来像是一个全连接网络(下图左),它的输入由两部分构成,当前输入 x(t)x_{(t)} 以及上一个时刻的输出 y(t1)y_{(t-1)}

把序列中的各个元素 x(i)x_{(i)} 连同上一时刻的输出 y(i1)y_{(i-1)} 一并输入给 RNN,得到新的输出 y(i)y_{(i)}。连同此输出再与序列中下一个元素一并输入 RNN,再次产生新的输出。整个过程就像编程语言中的 for 循环一样,在对一个序列进行处理是,每次循环都用到了前一次循环的状态,以及序列中下一个元素。

RNN 的数学表达式如下:

虽然 RNN 的结构让它可以处理无限长的序列,看起来能够捕获跨度很长的模式,但受限于 RNN 简单的结构,序列信息在每一个 time step 都会丢失,RNN 往往也只能捕获短距离的模式。为了解决信息遗忘的问题,很多 RNN 的该键版本被提出,比如 LSTM、GRU,这些改进版本都引入了长期记忆模块。这些具有长时记忆模块的 RNN 结构在实践中被证明很有用,基础版本的 RNN 已经不在被使用了,现在提到 RNN 人们首先想到的会是 LSTM 和 GRU。

LSTM

Long Short-Term Memory (LSTM) 于 1997 年被提出,之后经过一些改进。它引入长时记忆模块,能够捕获到序列中长距离的依赖关系,在训练中收敛速度比基础版本的 RNN 快。LSTM 的结构如下图所示:

它的状态分为两部分,h(t)h_{(t)}c(t)c_{(t)} , h(t)h_{(t)} 是短时状态,c(t)c_{(t)} 是长期状态,这里 cchh 都是向量。其主要思想是,LSTM 能够学习把什么存入长期状态,把什么从长期状态中扔掉。c(t1)c_{(t-1)} 先经过一个遗忘门,丢去一些记忆,然后再加上一些信息,得到新的状态 c(t)c_{(t)}。新的状态 c(t)c_{(t)} 会经过一个 tanhtanh 函数,得到的向量被 output gate 选择后做为当前 time step 的输出,和新的短时状态 h(t)h_{(t)}

可以看到 LSTM 的输出是依托于长期状态 c(t)c_{(t)} 的,而 c(t)c_{(t)} 在每个 time step 会丢掉一些信息,再加入一些信息。控制如何丢弃,如何加入,最终输出什么,由 3 个门控制。加入什么信息由 g(t)g_{(t)} 控制。而这些的输入都是 x(t)x_{(t)}h(t1)h_{(t-1)}

x(t)x_{(t)}h(t1)h_{(t-1)} 经过 4 个全连接网络输出 4 个向量,这 4 个向量有不同的目的:

g(t)g_{(t)} 对应的全连接网络分析当前输入 x(t)x_{(t)} 和前一个短期状态 h(t1)h_{(t-1)} 之间的关系,得到一个输出用于向长期状态中增加信息。

其他的三个门 f(t)f_{(t)}i(t)i_{(t)}o(t)o_{(t)} 分别被称为遗忘门、输入门、输出门,它们是由 sigmoid 激活函数输出的,其元素的值介于 0~1 之间。

LSTM 能够识别到一个重要的输入,并将该输入的信息存入长期状态中。状态 cc 保留长期信息用于之后使用,并在合适的时刻将长期状态中的部分信息遗忘掉。这就是 LSTM 能够捕获序列中长距离模式的原因。

LSTM 的数学表达式如下:

Peephole connections

从前面的描述可以看出,LSTM 在计算各种门的输出时,只用了 x(t)x_{(t)}h(t1)h_{(t-1)},但有人觉得如果能够用到 c(t1)c_{(t-1)} 岂不更好。因此在 2000 年研究者提出了一个改进,将 c(t1)c_{(t-1)} 加入输入门和遗忘门的计算,把 c(t)c_{(t)} 加入输出门的计算。

GRU

Gated Recurrent Unit (GRU) 于 2014 年被提出,是一种简化版本的 LSTM。其模型结构如下:

相比于 LSTM,GRU 有以下改变:

GRU 的数学表达式如下:

评论 (评论内容仅博主可见,不会公开显示)