请选择 进入手机版 | 继续访问电脑版

网络科技

    今日:141| 主题:272663
收藏本版
互联网、科技极客的综合动态。

[其他] Facebook通过10亿单词构建有效的神经网络语言模型

[复制链接]
mcming92 发表于 2016-11-28 08:38:25
260 8

立即注册CoLaBug.com会员,免费获得投稿人的专业资料,享用更多功能,玩转个人品牌!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
由于在语言识别、机器翻译和语言建模等领域表现出了优异的性能,为序列预测而设计的神经网络最近再次引起了人们的兴趣,但是这些模型都是计算密集型的,成本非常高。比如在语言建模领域,最新的成果依然需要在大规模GPU集群上训练几周的时间,虽然效果不错,但是这些计算密集型的实践对大规模计算基础设施的依赖性非常强,这限制了其在学术和生产环境中的研究速度与应用。
   针对这一计算瓶颈,Facebook AI 研究院(FAIR)设计了一个新的、几乎是为GPU量身定制的 softmax 函数,能够非常有效地通过大规模词库训练神经网络语言模型。该函数名为自适应softmax,它能根据不均衡的单词分布构建集群,使计算复杂度最小化,避免了对词库大小的线性依赖。同时能够在训练和测试阶段充分利用现代架构的特点和多维向量运算进一步降低计算消耗。与分层softmax、NCE以及重要性抽样等之前的、大部分为标准CPU设计的方法相比,该方法更适合GPU。
   此外,FAIR还开发并开源了一个名为 torch-rnnlib 的类库,该类库允许研究者设计新的递归模型,并以最小的努力在GPU上测试这些原型。最近 Edouard Grave 、Justin Chiu 和Armand Joulin在Facebook的网站上发表了一篇文章, 介绍了用户如何通过该类库设计新的递归网络 。
  使用torch-rnnlib构建递归模型

  1. 什么是语言建模?

   语言建模就是通过给定词典中的单词序列学习其概率分布,根据单词过去的概率计算其条件分布。T个单词序列(w 1 ,..., w[T])的概率可以表示为:
   P(w 1 ,..., w[T])) = P(w[T]|w[T-1],..., w 1 )...P(w 1 )
  该问题通常通过非参数化的计数统计模型来解决,但是目前基于递归神经网络的参数化模型已经被广泛应用于语言建模。
  2. 如何使用Torch-rnnlib构建标准模型

  Torch-rnnlib为递归神经网络的构建提供了三种不同的接口:
   1). nn.{RNN, LSTM, GRU} 接口,用于构建所有层具有相同数量隐藏单元的递归网络。
   

Facebook通过10亿单词构建有效的神经网络语言模型

Facebook通过10亿单词构建有效的神经网络语言模型-1-网络科技-Facebook,Justin,网络语言,研究院,依赖性

   2). rnnlib.recurrentnetwork 接口,用于构建任意形状的递归网络。
   

Facebook通过10亿单词构建有效的神经网络语言模型

Facebook通过10亿单词构建有效的神经网络语言模型-2-网络科技-Facebook,Justin,网络语言,研究院,依赖性

   3). nn.SequenceTable 接口,用于将各种计算有效地链接到一起。 nn.RecurrentTable 构造器仅是一个轻量级的包装器,它会随着时间的迁移克隆递归模块。要注意的是,这是最底层的接口,必须调用 rnnlib.setupRecurrent(model, initializationfunctions) 设置递归隐藏状态行为。
   

Facebook通过10亿单词构建有效的神经网络语言模型

Facebook通过10亿单词构建有效的神经网络语言模型-3-网络科技-Facebook,Justin,网络语言,研究院,依赖性

  3. 构建自己的递归模型

  可以通过定义cell函数或者cell状态初始化函数来创建自己的模型。下面的代码展示了如何从零开始构建一个RNN:
   

Facebook通过10亿单词构建有效的神经网络语言模型

Facebook通过10亿单词构建有效的神经网络语言模型-4-网络科技-Facebook,Justin,网络语言,研究院,依赖性

  4. 在GPU上训练torch-rnnlib

   因为torch-rnnlib遵循nn模块接口,所以调用模型的 :cuda() 方法就能将其拉到GPU上执行。rnnlib的目的就是让用户能够灵活地创建新的cell函数或者使用快基线。
   此外,无论使用前面提到的第一个还是第二个接口构建递归网络,都能非常容易地使用cudnn来加速网络。对于第一个接口,通过 usecudnn = true 来调用构造函数:
   

Facebook通过10亿单词构建有效的神经网络语言模型

Facebook通过10亿单词构建有效的神经网络语言模型-5-网络科技-Facebook,Justin,网络语言,研究院,依赖性

   对于第二个接口,将 rnnlib.makeRecurrent 替换成 rnnlib.makeCudnnRecurrent ,然后将cell函数修改为 cudnn 接口中的 cellstring 。例如:
   

Facebook通过10亿单词构建有效的神经网络语言模型

Facebook通过10亿单词构建有效的神经网络语言模型-6-网络科技-Facebook,Justin,网络语言,研究院,依赖性

  这样模型的递归部分通常会有至少两倍的速度提升。但是这并不是说整个模型会提速至少两倍,特别是当主要计算工作并不在递归部分的时候,此时提升会更小一些。
   

Facebook通过10亿单词构建有效的神经网络语言模型

Facebook通过10亿单词构建有效的神经网络语言模型-7-网络科技-Facebook,Justin,网络语言,研究院,依赖性

  图:torch-rnnlib及其他torch类库随着隐藏层数量的增加其运行时间的折线图
  5. 自适应Softmax

  在处理语言模型等大规模输出空间的时候,分类器可能是模型的计算瓶颈。过去提出的很多解决方案通常都是针对标准CPU而设计的,很少充分利用GPU所特有的能力。
  Facebook开发的、新的自适应softmax能够根据数据的分布情况调配计算资源。它能通过加快常用类的访问速度,提供更多计算资源,来实现更好近似值和更快运行时间之间的平衡。更确切地说,它实现了一种k-way 分层softmax,能够根据GPU的架构,通过动态规划算法实现计算资源的有效分配。为了进一步降低分类器的计算负担,自适应softmax还使用了一些技巧:使用浅树(shallow trees)避免顺序计算;为每个集群设置类数量的最小值,避免浪费GPU的并行计算能力。
  正如图表1所展示的那样,自适应softmax的性能与完整softmax的性能几乎不相上下,但是训练时间非常短。
   

Facebook通过10亿单词构建有效的神经网络语言模型

Facebook通过10亿单词构建有效的神经网络语言模型-8-网络科技-Facebook,Justin,网络语言,研究院,依赖性

  图表1:基于Text8的性能。 ppl越低越好。
   

Facebook通过10亿单词构建有效的神经网络语言模型

Facebook通过10亿单词构建有效的神经网络语言模型-9-网络科技-Facebook,Justin,网络语言,研究院,依赖性

  图:不同softmax近似函数语言模型的收敛性。该数据基于LSTM。
  测试结果

  Facebook两个模型的参数配置如下:小模型使用了有2048个单元的单层LSTM,大模型使用了每层有2048个神经元的双层LSTM。训练模型使用Adagrad,权重调整使用L2。批处理大小为128,反向传播窗口大小为20。
   

Facebook通过10亿单词构建有效的神经网络语言模型

Facebook通过10亿单词构建有效的神经网络语言模型-10-网络科技-Facebook,Justin,网络语言,研究院,依赖性

  图表2:基于10亿单词进行训练后的模型复杂度(越低越好)的比较。
  如图表2所示,小模型经过几天的训练复杂度达到了43.9,大模型经过6天的时间复杂度达到了39.8。目前最佳复杂度是由Jozefowicz et al.在2016年实现的30.0,但是Jozefowicz et al.达到这一数值使用了32颗GPU,花了3周多的时间;而Facebook仅用1颗GPU花了几天时间。
   感谢陈兴璐对本文的审校。
   给InfoQ中文站投稿或者参与内容翻译工作,[email protected]博(@InfoQ,@丁晓昀),微信(微信号: InfoQChina )关注我们。



上一篇:获千万级人民币天使轮融资,“上上铺”想用大数据实现城市商铺智能选址 ...
下一篇:我眼中的未来:视频、AI、个性化、传统企业和AR
vtizdmkw 发表于 2016-11-28 09:04:21
楼主,闹哪样,你家里人知道么?
回复 支持 反对

使用道具 举报

董云 发表于 2016-11-28 09:05:35
有的人,有一股,让人想一辈子跟他做陌生人的强大的气场。
回复 支持 反对

使用道具 举报

李娜 发表于 2016-11-28 09:06:59
想污染一个地方有两种方法:垃圾,或是钞票.
回复 支持 反对

使用道具 举报

董丽 发表于 2016-11-28 09:13:18
这是一个KB的故事,当你在半夜12点的时候穿着黑色的衣服对着镜子用梳子梳下就会看到…头皮…屑!
回复 支持 反对

使用道具 举报

麻痹 发表于 2016-11-28 10:59:16
这个QQ被一个女人偷走了,现在拿回来了…不认识我的人请自动删除我
回复 支持 反对

使用道具 举报

时间都去哪了 发表于 2016-11-30 03:10:28
我可以轻视你,鄙视你,小看你,不看你.
回复 支持 反对

使用道具 举报

rxynh 发表于 2016-12-14 08:33:02
报告!我就是路过来看看的。。。
回复 支持 反对

使用道具 举报

ggggggrd 发表于 2016-12-14 08:39:50
发发呆,回回帖,工作结束~
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

我要投稿

推荐阅读


回页顶回复上一篇下一篇回列表
手机版/CoLaBug.com ( 粤ICP备05003221号 | 文网文[2010]257号 )

© 2001-2017 Comsenz Inc. Design: Dean. DiscuzFans.

返回顶部 返回列表