查看原文
其他

【开源】谷歌“一个模型解决所有DL难题”背后的Tensor2Tensor

2017-06-20 新智元

  新智元编译  

来源: Google blog

翻译:刘小芹


【新智元导读】引起热议的两篇谷歌大脑的论文《一个模型解决所有问题》和《你只需要注意力机制》,其背后是一个名为 Tensor2Tensor 的模块化深度学习系统。现在,谷歌将Tensor2Tensor开源,包含各种数据集和模型,用户可以使用来运行模型或实验自己的新想法。


在新智元公众号回复【Tensor2Tensor】下载文中提到的3篇论文

GitHub地址:https://github.com/tensorflow/tensor2tensor


谷歌前几天连续发表的几篇“标题党”论文引起较多讨论,《一个模型解决所有问题》(One Model To Learn Them All)《你只需要注意力机制》(Attention Is All You Need),两篇论文发表时间相近,作者是来自谷歌大脑,Google Research 和多伦多大学的同一批人,新智元对两篇论文都进行了介绍。


尤其 One Model To Learn Them All 这篇论文,提出如何创造一个单一的深度学习模型,很好地处理多种不同的任务。


谷歌的研究人员称这个模型为 MultiModel,并在多种任务上进行训练,包括翻译,语法分析,语音识别,图像识别和物体检测等。虽然结果跟现有方法相比并没有非常显著的改进,但这些结果表明,在各种任务上训练机器学习系统可能有助于提高整体的性能。虽然谷歌没有说能得到可以一次学习所有任务的主算法,但这项研究确实表明,谷歌采用的方法可能对未来开发解决不同领域问题的类似系统有帮助。


现在,谷歌宣布这个模型背后的系统 Tensor2Tensor 已经开源,作为 TensorFlow 开源项目的一部分,所有人都可以使用其实验自己的模型或验证谷歌的结果,验证此研究是否可以推广到其他更多领域。

 

下面是来自谷歌博客的介绍。

 

用 Tensor2Tensor 库加速深度学习


深度学习(DL)已经推进了许多有用的技术,例如机器翻译,语音识别和物体检测。在研究社区,我们可以找到很多作者开源的研究,复制他们的结果,然后进一步推动深度学习。但是,这些DL系统大多数使用独特的设置,需要大量的工程工作,并且可能仅在特定的问题或架构工作,这使得难以运行新的实验并比较结果。

 

今天,我们很高兴地发布Tensor2Tensor(T2T),这是一个用于在 TensorFlow上训练深度学习模型的开源系统。T2T有助于为各种机器学习应用创建最优的模型,例如翻译,语法分析,图像说明等等,让开发者能够更快地探索各种新想法。本次开源的版本还包括数据集和模型的库,包含了我们最近几篇论文(Attention Is All You Need, Depthwise Separable Convolutions forNeural Machine Translation, 以及 One Model to Learn Them All中最优的一些模型,以帮助用户快速启动自己的深度学习研究


在标准 WMT英语-德语翻译任务上,各个翻译模型的的BLEU得分(得分越高越好)。

 

T2T可以对深度学习研究提供什么样的改进,我们将其应用于机器翻译作为一个示例。如上表所示,两个不同的T2T模型,SliceNet 和Transformer,二者的性能均优于此前 state-of-the-art 的 GNMT+MoE 模型。最好的 Transformer 模型比标准 GNMT 模型得分高3.8分,而GNMT 模型就比基于短语的 MOSES 翻译系统高4分。值得注意的是,使用T2T,你可以在1天内使用单个GPU就能达到此前state-of-the-art的结果:在单个GPU训练1天之后,一个小型的 Transformer 模型的BLEU得分可以达到24.9分(上表中未显示)。现在,只有有一个GPU,每个人都可以自己来修改出优秀的翻译模型。我们在 GitHub repo 中给出了应该怎样做的指南。

 

模块化多任务训练


T2T库采用我们熟悉的TensorFlow工具构建,并对深度学习系统所需的多个部分进行定义,包括:数据集,模型架构,优化器,学习速率衰减方案,超参数,等等。更重要的是,它规定了所有这些部分之间的标准接口,并实现了当前ML的最佳实践性能。因此,你可以选择任何的数据集、模型、优化器和一组超参数,然后运行训练来检查其性能。我们使架构模块化了,因此输入数据和预测的输出之间的每个部分都是一个张量到张量的函数。如果你对模型的架构有新的想法,那么不需要替换整个的设置。你可以保留嵌入部分,损失函数,以及其他所有内容只需将自己的函数替换到模型中,该函数仍将张量作为输入,输出也是张量。

 

因此,T2T是非常灵活的,训练不再需要绑定在特定的模型或数据集上。它非常简单,即使像LSTM序列到序列模型这样的著名架构也可以用几十行代码来定义。而且,还可以在不同的领域对一个单一的多任务模型进行训练。你甚至可以同时在所有数据集训练一个单一的模型。我们很高兴地得出报告,我们的多任务模型就是像这样训练的(见论文介绍:One Model To Learn Them All),已经在许多任务上得到非常好的结果。该模型同时用 ImageNet(图像分类),MS COCO(图像说明),WSJ(语音识别),WMT(翻译),以及 Penn Treebank 语法分析语料库上训练,包含在T2T上。这是首次得到证明,一个单一的模型能够同时执行所有这些任务。


内置的最佳实践模型


在这个开源的初始版本中,我们还提供脚本用于生成研究社区中广泛使用的许多数据集[1],许多模型[2],一些超参数配置,以及其他重要技巧的一个表现良好的实现。虽然在这里很难全部列举,但假如你决定使用T2T来运行模型,就能免费获取序列的正确填充和相应的交叉熵损失,Adam优化器的调优好的参数,自适应批处理,同步分布式训练,图像的调优好的数据增量,标签平滑,以及一系列的工作得非常好的超参数配置,包括上面提到的取得当前最好结果的翻译模型,这也能帮助你取得很好的结果。

 

举个例子,比如说将英语句子解析成语法树的任务。这个问题已经有几十年的研究,并且开发了许多有竞争力的方法。它可以表示为一个序列到序列的问题,然后用神经网络来解决,但是需要大量的调优。使用T2T,我们只需要几天的时间来添加语法解析数据集生成器(parsing datasetgenerator),然后调整 attention transformer 模型来训练这个问题。令我们惊喜的是,我们只用一周的时间就取得了非常好的结果。



上表是在标准测试集(WSJ的section 23)上进行语法解析的F1得分。在这里我们只比较了分别在Penn Treebank WSJ训练集上训练的模型结果,更多结果可以参看我们的论文(AttentionIs All You Need)。


在 Tensor2Tensor 贡献

 

除了探索现有的模型和数据集外,你还可以轻松定义自己的模型,并且将自己的数据集添加到Tensor2Tensor中。我们相信,Tensor2Tensor中已经包含的模型能在许多NLP任务上表现很好,所以只要添加数据集就可能产生非常有趣的结果。通过使T2T模块化,你也很容易贡献自己的模型,然后看看它在各种任务中的表现。通过这种方式,整个研究社区可以从一个基线库受益,并加速深度学习研究。请参考我们的GitHub仓库,尝试新的模型,并贡献自己的模型!

 

致谢

 

在许多工程师和研究人员的广泛合作下,我们得以发布Tensor2Tensor。我们想在此致谢核心团队成员(按字母顺序排列):Samy Bengio,Eugene Brevdo, Francois Chollet, Aidan N. Gomez, Stephan Gouws, Llion Jones,Łukasz Kaiser, Nal Kalchbrenner, Niki Parmar, Ryan Sepassi, Noam Shazeer, JakobUszkoreit, Ashish Vaswani。


[1] 我们包含了一些图像分类数据集(MNIST,CIFAR-10,CIFAR-100,ImageNet),图像说明数据集(MSCOCO),翻译数据集(包括英语-德语、英语-法语在内的多种语言的WMT),语言建模数据集(LM1B),语法分析数据集(PennTreebank),自然语言推理数据集(SNLI),语音识别数据集(TIMIT),算法问题数据集,等等。我们将加入更多数据集,并欢迎你的提供.↩

 

[2] 包括LSTM序列到序列RNN模型,具有可分离卷积(如Xception)的卷积神经网络,最近的ByteNet或Neural GPU模型,以及我们在本文中提到的一些state-of-the-art的模型。我们将在开源库中积极更新更多模型。

 


原文:https://research.googleblog.com/2017/06/accelerating-deep-learning-research.html




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存