Facebook科学家详解RNN与机器智能的实现

Tomas Mikolov在他的 Facebook 个人页面上写到他的长期研究目标是「开发能够使用自然语言进行学习和与人类交流的智能机器」。本文内容整理自他在 SIGIR 2016 大会中神经信息检索研讨会(Neu-IR Workshop)上的演讲。

Tomas Mikolov 2014 年 5 月加入 Facebook 人工智能实验室担任研究科学家,之前曾是 Google Brain 团队的一员,参与了 word2vec 项目的开发。他在他的 Facebook 个人页面上写到他的长期研究目标是「开发能够使用自然语言进行学习和与人类交流的智能机器」。本文内容整理自他在 SIGIR 2016 大会中神经信息检索研讨会(Neu-IR Workshop)上的演讲。

演讲视频

本话题的目标

解释循环网络最近的一些成功

更好地理解(长)短期记忆的概念

探究循环网络的局限

讨论打造能理解语言的机器人需要做什么

一、循环网络简史

循环网络简史—— 80年代和90年代

构建循环网络在 80 年代和 90 年代早期十分流行(Elman, Jordan, Mozer, Hopfield, Parallel Distributed Processing group, 并行分布式处理团队…)

主要的思想非常吸引人:重新使用参数和计算(通常随着时间推移)

简单的循环神经网络(RNN)架构

输入层,带有循环连接的隐藏层,输出层

从理论上说,隐藏层能学习表征无限的记忆

也叫 Elman 网络(及时发现结构((Finding structure in time) Elman 1990)

循环网络简史——90 年代 —2010 年

经历了初期的勃兴后,循环网络从主流研究中消失了

尽管 RNN 在理论上是十分强大的模型,但在大多数人看来,它训练起来不稳定

在 IDSIA,使用长短期记忆 RNN 架构实现了一些成功,但其他人很难轻松再现这个模型

在 2010 年,RNN 能显著提升语言建模、机器翻译、数据压缩和语音识别的最佳性能(包括来自 IBM 的强大商业语音识别器)

RNNLM 工具包的公开让研究者们复制了这些结果并且拓展了这些技术

RNNLM 的关键新技能比较琐碎:剪辑梯度,以防止训练不稳定。

华尔街日报设置上的 WER 减少了 21% - 24%。

RNNLM 对 n-gram 的改进随着数据量的增长而增长

2011年的突破性成果:来自 IBM 的大系统的 WER 下降了11%。

在大量数据的基础上训练大 RNNLM模型集成

通过在通用机器学习工具包中实现开源,RNN 变得更加可用了:

Theano

Torch 

PyBrain 

TensorFlow

二、今天的循环网络

1.应用广泛:

ASR(包括声学和语言模型)

MT(语言&翻译&比对模型,联合模型)

很多自然语言应用

视频建模,手写识别,用户意图预测

2.下降趋势:RNN 在解决很多问题上都非常强大,模型正变得不需要那么复杂了

3.常出现这样的情况,因为一些错误的原因,复杂的 RNN 架构比较受欢迎 (论文容易发表和吸引关注)

较长的短期记忆是简单的 RNN

如何将长期记忆加入 RNN 且不带没有必要的复杂

论文:在循环神经网络中学习长期记忆 (Mikolov, Joulin, Chopra, Mathieu, Ranzato, ICLR Workshop 2015)

循环网络——Elman 架构

也被称为简单的循环网络(SRN)

输入层xt,隐藏层 ℎt,输出层 yt

权重矩阵 A,R,U 

循环网络——Elman 架构

输入层xt,隐藏层 ℎt,输出层 yt

权重矩阵 A,R,U  

图中公式里的 f() 是 softmax 函数。

简单的循环网络问题

通过时间算法的反向传播 + 随机梯度下降是常用的训练(Rumelhart 等人, 1985)

梯度可以消失或爆炸(Hochreiter 1991; Bengio 1994)

简单的循环网络:梯度爆炸 

梯度很少爆炸,但是一旦爆炸就会带来灾难性的影响 

简单的「hack」是剪辑梯度以保持在一定范围内

这会防止指数增长(之后在权重更新中带来巨大的进步)

可以选择将梯度规范化,或者丢弃过大的权重更新

简单的循环网络:梯度消失

大多数情况下,这些梯度会很快消失(通过时间的反向传播的 5 - 10 步后)

这或许不是一个 SGD 问题,但是这个 SRN 的架构的问题

简单的循环网络:梯度消失

训练什么样的循环架构去扑捉长期模式比较容易?

不用完全连接的矩阵,我们能用每个神经元只连接到输入和它自己的架构 · 旧想法 (Jordan 1987; Mozer 1989)

旧想法 (Jordan 1987; Mozer 1989)

结合这两个想法:Elman + Mozer 

隐藏层被完全连接起来,部分是对角线的(自我连接)

可以被看作是有两个隐藏层的RNN

或者看成是带有部分对角循环矩阵的 RNN(+ 线性隐藏单元)

结合这两个想法:Elman + Mozer 

这个值能被学习,或者被保持接近 1(我们用的是 0.95)

这个矩阵是可选择的(通常帮助不大)

结构受限的循环网络

因为我们约束了 SRN 的架构,所以我们进一步将模型表示成结构受限的循环网络(SCRN)

由于对角线层的状态变化缓慢,另一名称是「慢循环网络」

Q:将循环矩阵初始化为对角线难道不够吗?

A: 不够。这将会回到标准的 RNN,并且无法学习更长的记忆。

结果

语言建模试验:Penn Treebank、Text8

语言模型中长期记忆通常被称为缓存/主题

与较长的短期记忆 RNN 比较(目前流行但相当复杂的架构可以学习长期模式)

数据库&代码: http://github.com/facebook/SCRNNs(链接在论文中)

结果:Penn Treebank 语言模型

从简单的循环网络上的 SCRN/ LSTM 中得到的类似于从缓存中得到的

LSTM 对每个隐藏单元都有 3 个门,这样一来,在训练过程中,给定的隐藏层尺寸需要接入 4倍的参数(=>较慢的训练)

带有 100 个完全连接和 40 个自我连接的神经元的 SCRN 训练起来 只比 SRN 贵一点。 Tomas Mikolov, Facebook, 2016 模型 # 隐藏单元的困惑度

结果:Text8

Text8:维基百科文本(~1700 万个词),比缓存有更强大的效果 

从 SRN 的 SCRN & LSTM 上都获得了很大的收获

对小模型来说,SCRN 似乎更优越(架构简单,更精确,训练更快 - 参数更少)

结果:Text8 

LSTM 带有 500 个隐藏单元,它在困惑度(3%)比 SCRN 稍好些,但是它也有更多的参数

结果讨论

SCRN 在「慢」隐藏层中积累了较长的历史:与指数衰减的高速缓存模型相同 

经验上看,LSTM 性能与缓存密切相关(加权词袋(weighted bag-of-words))

对于非常大的(接近无限)的训练集来说,SCRN 似乎是更好的架构:它的计算成本非常低

结论

简单的技巧能克服梯度消失和爆炸的问题

循环层的状态能表征较长的短期记忆,却不能表征长期的(跨越数百万的时间步)记忆

要表征真正的长期记忆,我们可能需要开发具有成长能力的模型(改变它们自己的结构)

三、超越深度学习

走向超越:哪些 RNN 和深度网络不能有效建模?

简单得令人惊讶的模式!比如,可变长度的符号序列的记忆

超越深度学习:算法模式

许多复杂模式在自然语言中有短且有限的描述长度(或在任何图灵完备的计算系统中)

我们将该模式称为算法模式

算法模式的例子:序列记忆,从样本中学习到的数字的加法

这些模式通常无法通过标准的深度学习技术学习到

在无数目前尚未解决的复杂任务中,哪一个才是我们应该关注的重点?

我们需要设定一个有雄心的最终目标,并定义一个如何一步步实现它的路线图

四、实现机器智能的路线图

基于通信的人工智能的最终目标

几乎能做任何事:

帮助学生理解家庭作业的机器

帮助研究者寻找相关信息

编写程序

帮助科学家处理目前还有过多要求的任务(需要数百年才能解决的任务)

路线图

我们描述了一个我们认为组成智能机器的最小组件集合

然后是一种构建这种机器的方法

以及使该机器可扩展的要求

智能机器的组件

通信能力

动机组件

学习技能(进一步要求长期记忆),即修改自己从而适应新问题的能力

框架的组件

要构建和开发智能机器,我们需要:

一个能教机器学习基本通信技能和学习策略的环境

通信信道

奖励

增量结构

对新任务的需求:模拟环境

1.就我们所知,现在没有什么数据集能教机器通信的技能。

2.谨慎的任务设计,包括复杂度增长的速度如何,对成功似乎都很关键。

如果我们增加复杂度过快,即使正确地实现了智能机器,也无法成功学习

如果增加复杂度过慢,我们可能会错过最终目标

环境的高层次描述

模拟环境:

学习器

教育者

奖励

扩展:

更复杂的任务、更少的样本、更少的监督

与真实人类通信

真实输入信号(互联网)

模拟环境——代理

环境:能为学习器产生信号、代表世界的简单的基于脚本的反应代理

学习器:接收输入信号、奖励信号并产生输出信号以最大化未来奖励的智能机器

教育者:学习器的特定任务,开始是基于脚本的,之后可被人类使用者替代

模拟环境——通信

教育者和环境写入学习器的输入信道

学习器的输出信道影响其在环境中的行为,并且可被用于与教育者的通信

奖励也是 IO 信道的一部分

可视化以便更好地理解

输入/输出流样本和可视化。

怎么扩展:快速学习器

开发快速学习器是很关键的:我们可以通过无数次的试验在模拟世界中构建一个能「解决」简单任务的机器,但这无法扩展到复杂的问题上。

一般而言,给学习器展示新类型的行为并引导它完成一些任务就应该足以使其能在以后将其泛化到其它相似的任务中。

对通过奖励的直接监督的需求应该会越来越少。

怎么扩展:增加人类

可以快速学习的学习器可以开始与会教它新行为的人类专家(我们)交流

之后,一个预训练的具备基本通信能力的学习器可以被非专家的人类使用

怎么扩展:增加真实世界

学习器可以通过其 IO 信道接入互联网

这可以通过教学习器怎么在其输出流中构建查询来完成

对新技术的需求

特定一些平常的模式现在还难以学习:

anbn无关语境的语言超出了标准 RNN 的范围

序列记忆(sequence memorization)打破 LSTM RNN

我们使用栈增强过的(Stack-Augmented)循环网络在我们最近的论文 Inferring Algorithmic Patterns 中证明了这一点

可扩展性

为了能将机器扩展到更复杂的问题上,我们需要:

长期记忆

(图灵)完备和高效的计算模型

增量的、组合式的学习

从小样本中快速学习

减少通过奖励的监督量

更多讨论:A Roadmap towards Machine Intelligence http://arxiv.org/abs/1511.08130

一些进步:Stack RNN(Joulin & Mikolov,2015)

使用长期记忆模块扩展的简单的 RNN,该模块需要该神经网络学习控制

这个想法本身是很古老的(从 80 年代- 90 年代)

我们的版本非常简单,能够学习复杂度远超过去的模式(尽管还没有实际价值):所需的监督少得多,可扩展到更复杂的任务

Stack RNN

从样本中学习算法

为 RNN 增加结构化记忆

可训练的[读/写]

没有限制

动作:Push/POP/NO-OP

记忆结构的样本:堆栈、列表、队列、带、网格

算法模式

由短程序生成的简单算法模式的样本(语法)

目标是只通过观察样本序列来无监督地学习这些模式

算法模式——计数

在简单计数任务上的表现

带有 S 型激活函数的 RNN 不能计数

Stack RNN 和 LSTM 不能计数

算法模式——序列

序列记忆和二进制加法超出了 LSTM 的范围

可扩展的堆栈记忆可以学习解决方案

二进制加法

训练中无监督,只有预测

学习:存储数字、何时产生输出、进位

Stack RNN:总结

优势:

图灵完备的计算模型(带有>=2个栈)

学习某些算法模式

有长期记忆

对一些 RNN 和 LSTM 难以处理的问题,可用简单模型处理

可再生

劣势:

长期记忆只能用来存储部分计算(即还不能存储学习到的技能)

对增量学习来说似乎不是一种好模型

对于记忆的拓扑结构,堆栈似乎并不是非常通用的选择

五、结论

要实现真正的人工智能,我们需要:

人工智能完成的目标

多任务的新集

开发新技术

激励更多人来解决这些问题

本文选自:SlideShare,作者:Tomas Mikolov,机器之心编译;

©机器之心,最专业的前沿科技媒体和产业服务平台,每日提供优质产业资讯与深度思考,欢迎关注微信公众号「机器之心」(almosthuman2014),或登录机器之心网站www.jiqizhixin.com  , 查看更多精彩内容。