RNN简介

来源:互联网 发布:可以画画的软件 编辑:程序博客网 时间:2024/06/05 04:33

RNN简介

最近由于工作需要,看了一些RNN (Recurrent Neural Networks )的相关资料,对RNN多少有了一些了解。发现一个绝佳的RNN入门tutorial,顺手记录下来。

以下内容大部分译自:http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/

1、什么是RNN?

在如今高速发展的互联网时代,我们的生活工作中其实有很多RNN的影子,比如:语音助手、机器翻译等等,那么什么是RNN呢?

RNN能够运用序列数据信息。在传统的神经网络中,所有的输入(或输出)之间是独立的 (即本层内部没有连接)。也就是说,输入与输入之间没有任何关联,这种假设对于序列数据显然不合理,比如:给定一个句子的前几个词,预测接下来最可能出现的词 (句子前后不同的词之间有密切的关联)。RNN能够处理这种类型的任务。

典型的RNN结构如下:

基本RNN结构
基本RNN结构和按时间展开的结构(图片来源)

在上图中,xt 表示 t 时刻的输入,可以用向量(比如one-hot vector)表示;

stt 时刻的隐藏状态,它表示网络的记忆单元,由前一时刻的隐藏状态和当前时刻的输入来确定:st=f(Uxt+Wst1)。函数 f 通常是非线性激活函数,比如:tanh 或 ReLU。初始状态 s1 通常需要初始化为0。

ot 表示 t 时刻的输出,它与隐藏状态有关:ot=softmax(Vst)

U,W,V 分别是输入与隐藏状态、先前隐藏状态与当前隐藏状态、隐藏状态与输出之间的连接权重。与传统神经网络不同,这些连接权重在不同时刻 t 取值相同,极大的降低了RNN模型中的参数个数。

理论上,隐藏状态 st 可以记忆所有之前步骤的信息,但实际情况中, st 对于太长时间之前的信息是无能为力的,这是因为基本的RNN结构优化求解中存在梯度小时/爆炸问题 (后续对此做专门的解释)。

2. RNN的应用

RNN目前已有了很多成功的应用,主要是LSTM(long-short term memory)模型的广泛使用。LSTM比基本的RNN模型能更好的解决长期依赖的问题(即需要很久之前的信息)。与基本RNN相比,LSTM只是在记忆单元的计算上做了些改进,本质没有太大区别 (后续做较详细的介绍)。

(1) 语言建模和文本生成

给定一系列文字(比如编码为ont-hot vector),我们期望预测出可能出现的每个词的概率。语言模型可以估计每个句子的概率,概率大的最可能是正确的。

相关研究论文:

Recurrent neural network based language model

Extensions of Recurrent neural network based language model

Generating Text with Recurrent Neural Networks

(2) 机器翻译

与语言模型相似,机器翻译的输入是某种语言的一系列词,我们希望用另一种语言去表示这些词。主要差别在于,只用在输入完毕后,机器翻译才开始输出,从而保证翻译的准确性。

机器翻译RNN
机器翻译RNN (图片来源)

相关研究论文:

A Recursive Recurrent Neural Network for Statistical Machine Translation

Sequence to Sequence Learning with Neural Networks

Joint Language and Translation Modeling with Recurrent Neural Networks

(3) 语音识别

给定一系列音频,预测语句及其概率值。

相关研究论文:

Towards End-to-End Speech Recognition with Recurrent Neural Networks

(4) 生成图像描述

RNN结合CNN,可以对没有任何标注的图片内容进行描述,并且达到很好的效果。

生成图像描述
生成图像描述 (图片来源)

3. RNN的变种

(1) Bidirectional RNN

很多时候,时刻 t 的值不仅仅取决于之前时刻的序列值,还可能与未来时刻有关,比如:我 今天 去 超市,—— 了 一双 鞋。中间空缺的部分与前后语境都有关系。因此,Bidirectional RNN便应运而生,它由两个RNN堆叠而成。

Bidirectional RNN
Bidirectional RNN (图片来源)

(2) Deep (Bidirectional) RNN

与 Bidirectional RNN 类似,只是每个时刻 t 有多个层,因此学习能力更强。

Deep (Bidirectional) RNN
Deep (Bidirectional) RNN (图片来源)

(3) LSTM

LSTM与基本RNN类似,只是记忆单元的计算方式不同。LSTM中的记忆单元又称 cells,由先前cell 状态和当前输入作为输入,进一步决定保留哪些记忆。

好了,RNN的基本介绍就到这里,后续会继续跟进。

0 0
原创粉丝点击