循环神经网络入门

循环神经网络,也称递归神经网络(Recurrent Neural Networks (RNNs))是越来越流行的深度学习模型,本文以浅显易懂文字描述而非一条算术公式讲解了什么是RNN。

RNN创建于1980年代,只是最近才开始流行,并广泛应用于图形图像处理领域,对于序列数据特别有用,因为每个神经元或单元能使用其内部内存维护前一个输入的信息,这对于语言非常重要,比如“I had washed my house”明显不同于“I had my house washed”,这能够让神经网络对语句有一个深度理解。

即使作为人类,能够读通一句语句是非常重要,你需要注意每个单词的前后上下文,来龙去脉。


一个RNN包含循环在其中,能够在读取输入同时,这种循环让信息跨神经元传递。图中,x_t是某个输入,A是RNN的一部分,h_t是输出,你能喂入一段语句的词语甚至字符串的字符作为x_t输入,通过RNN它会从h_t输出。

使用h_t作为输出,然后和你的测试数据比较,这个测试数据通常是原始数据的一个小子集,你会得到错误比率,将输出和测试数据比较完毕后,现在有了错误比率,你能使用一种技术称为通过时间的反向传播( Back Propagation Through Time BPTT),BPTT后播会通过网络检查,基于你的错误比率调整权重,这种调整会使得神经网络学习得越来越好。

理论上,RNN能够从语句的开始处理上下文,能在语句结束时有更精确的预测,在实践中,这对于vanilla RNN反而不是必然为真的,也就是实践中不一定像理论这样做到精确预测,这也是为什么RNN曾经在实践中消失一段时间,直至长短时记忆(Long Short Term Memory LSTM)在神经网络中使用,增加LSTM到神经网络就像增加能够记住输入最初开始的上下文场景的内存单元。

这种小小的内存单元能够让RNN更加精确,变成目前最流行的模型,这些内存单元能够跨输入记住上下文,这些单元今天广泛被应用的分为两种: LSTMs 和 Gated Recurrent Units(GRU),
后者门控性单位更为有效,因为花费更少计算机内存。

有许多不同的RNN应用,一个伟大应用是在自然语言处理Natural Language Processing (NLP)领域,RNNs已经被很多人创建为代表语言的模型,这些语言模型能够处理类似莎士比亚诗歌语句的输入,训练完成这些模型以后,这些模型会自己创作莎士比亚诗歌,而且与原来的非常不同。

RNN输入文本数据集以后,它是一个个字母地读取,令人惊奇的是神经网络在比较喂入这些单词以后,神经网络能够创造自己唯一的单词,这些词汇并没有在你训练它们的数据集中出现过。


上图是解释模型如何预测“hello”,hell四个单词从下面输入,从上面输出为"ello",这是一个很形象的案例,说明这些网络如何获取一个字字符然后预测下一个可能的字符。

RNNs另外一个惊奇的应用是机器翻译,这种方法有趣点在于同时运行两个RNNs,两个输入是一对不同语言的语句,比如你喂给网络一句英语语句,再喂给相应的法语翻译语句,经过足够的训练以后,当你再输入一条英文语句以后,神经网络就能翻译成法语,这个模型称为Sequence 2 Sequences模型 或 Encoder Decoder模型。

RNN支持库包:
Tensorflow — Googles 机器学习框架的 RNN example: https://www.tensorflow.org/versions/r0.10/tutorials/recurrent/index.html

Keras — 一种运行于 Tensorflow 或 Theano高级别机器学习库包: https://keras.io

Torch — Facebook 使用LUA编写的机器学习框架: http://torch.ch


原文:
Recurrent Neural Networks for Beginners — Medium

[该贴被banq于2016-08-13 10:20修改过]