7.循环神经网络(RNN) 基础讲解

7.循环神经网络(RNN) 基础

7.1 RNN(recurrent neural network)原理

7.1.1 RNN为序列数据而生

词序其实是很重要的

中文中,这样的例子也很多。“怎么样投资白银”vs“白银投资怎么样”;“北京到上海的机票”vs“上海到北京的机票”。

设计RNNs的目的,就是处理序列数据

在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如,你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。RNNs之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。理论上,RNNs能够对任何长度的序列数据进行处理。

RNN was born in 1980s!

7.1.2 图灵机(Turing machine)

图灵机Turing machine可以看作等价于任何有限逻辑数学过程的终极强大逻辑机器。图灵机又称确定型图灵机,是英国数学家艾伦·图灵于1936年提出的一种抽象计算模型,其更抽象的意义为一种数学逻辑机。

turing-complete的定义:

A Turing Complete system means a system in which a program can be written that will find an answer (although with no guarantees regarding runtime or memory).

So, if somebody says "my new thing is Turing Complete" that means in principle (although often not in practice) it could be used to solve any computation problem.

神经图灵机(Neural Turing Machine)

7.1.3 RNN的价值

我们知道,一个三层的前馈神经网络可以学到任何的函数,而RNN则是“turing-complete”的,它可以逼近任何算法

RNN can approximate any algorithm

a recurrent neural network RNN is Turing complete and so can compute anything that can be computed.

RNN具有强大的计算和建模能力,因而只要合理建模,它就可以模拟任何计算过程。

RNN具有记忆能力。给RNN同样的输入,得到的输出可能是不一样的。

7.2 RNN的基本结构

RNNs包含输入单元(Input units),输入集标记为{x0,x1,...,xt,xt+1,...},而输出单元(Output units)的输出集则被标记为{y0,y1,...,yt,yt+1.,..}。RNNs还包含隐藏单元(Hidden units),我们将其输出集标记为{h0,h1,...,ht,ht+1,...},这些隐藏单元完成了最为主要的工作。

各个变量的含义:

展开以后形式:

一个RNN的小例子:

把RNN做深(deep)

字符级别RNN

char-rnn的代码

Torch版本

https://github.com/karpathy/char-rnn

Tensorflow版本

https://github.com/sherjilozair/char-rnn-tensorflow


7.3 RNN的高级形式

7.3.1 双向RNN (Bidirectional RNN )

RNN既然能继承历史信息,是不是也能吸收点未来的信息呢?因为在序列信号分析中,如果我能预知未来,对识别一定也是有所帮助的。因此就有了双向RNN、双向LSTM,同时利用历史和未来的信息。

双向RNN

值得一提的是,但由于RNN 建模中的遗忘性,最后一个 state 中包含的信息是有损的,且序列越靠前的信息损失可能越严重。一种比较可行的解决方法是同时训练两个RNN,一个正向学习,一个反向学习,将正向的和反向的最后一个state 对应向量 concate 后得到的向量作为最终产物。


对于正向RNN最后一个向量中记录的信息量从前往后依次增强,反向的最后一个state记录的信息从后往前依次增强,两者组合正好记录了比较完整的信息


7.3.2 LSTM(Long Short-term Memory)

名字很有意思,又长又短的记忆?其实不是,注意“Short-term”中间有一个“—”连接。代表LSTM本质上还是短期记忆(short-term memory),只是它是比较长一点的short-term memory。

由于LSTM有四个参数做输入,LSTM需要的参数量是一般的神经网络模型的4倍。

台湾大学李宏毅讲的LSTM的小例子,非常清晰。

https://www.youtube.com/watch?v=xCGidAeyS4M

LSTM在1997年由“Hochreiter & Schmidhuber”提出,目前已经成为RNN中的标准形式。

7.3.3 GRU(Gated Recurrent Unit)

LSTM的一个稍微简化一点的版本。只有两个gate,据说效果和LSTM差不多,但是参数少了1/3,不容易过拟合。

如果发现LSTM训练出来的模型过拟合比较严重,可以试试GRU

LSTM vs GRU


7.4 RNN的训练

7.4.1 普通的RNN(simple RNN)不好训练

相较于CNN,RNN训练过程较不稳定,训练难度和计算量都大得多。当然,RNN用GPU加速效果会比较明显。

RNN不好训练的原因

weight被高频地使用,0.99的1000次方和1.01的1000次方有本质的区别。导致RNN的误差面(error surface)常常要么是很平坦要么是很陡峭(The error surface is either very flat or very steep)。

7.4.2 LSTM,让RNN的训练更简单

1997年,LSTM的提出就是为了解决RNN的梯度弥散的问题(gradient vanish)。那么LSTM比普通的RNN好在哪呢?LSTM为什么能够解决gradient vanish的问题?


LSTM如何避免梯度消失:



参考文献:

[1] Rafa Jozefowicz et al. An Empirical Exploration of Recurrent Network Architectures.

[2] Junyoung Chung et al. Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling.



虽然LSTM并没有解决梯度爆炸的问题,但是梯度膨胀(gradient explosion)不是个严重的问题,一般靠裁剪后的优化算法即可解决,比如gradient clipping(如果梯度的范数大于某个给定值,将梯度同比收缩),具体参考“梯度裁剪

经验:

训练LSTM要保证forget gate多数情况下 都是开启的;

97年最开始提出LSTM就是为了解决梯度弥散的问题,最开始LSTM是没有forget gate的,forget gate是后来才加上的。


本文首发于:人工智能A7论坛

转载请注明出处

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容