发布Tensor2Tensor,加快深度学习研究

发布Tensor2Tensor,加快深度学习研究


文 / Google Brain 团队高级研究员 Łukasz Kaiser


深度学习 (DL) 已促进许多实用技术的飞速发展,如机器翻译、语音识别和对象检测。在研究社区中,用户可以找到作者们开放的源代码以帮助他们复现试验结果和进一步促进深度学习。不过,大多数深度学习系统都使用独特的设置,其需要进行大量工程投入,并且可能只对特定问题或架构有效,因而很难运行新试验和比较结果。

我们非常高兴地发布了 Tensor2Tensor (T2T),T2T 是一个用于在 TensorFlow 中训练深度学习模型的开源系统。T2T 有助于针对各种机器学习应用(如翻译、解析、图像字幕制作等)创建最先进的模型,从而以远胜于过去的速度探索各种想法。


此版本中也包含了一个数据集和模型库,其中包括最近发布的几篇论文中提出的最佳模型(《您只需集中注意力》(Attention Is All You Need)、《针对神经机器翻译的深度可分离卷积》(Depthwise Separable Convolutions for Neural Machine Translation)和《一个模型可解决所有学习问题》(One Model to Learn Them All)),以帮助您开始自己的深度学习研究。


翻译模型

训练时间

BLEU(相对于基准的偏差)

Transformer (T2T)

在 8 个 GPU 上训练 3 天

28.4 (+7.8)

SliceNet (T2T)

在 32 个 GPU 上训练 6 天

26.1 (+5.5)

GNMT + 专家

在 64 个 GPU 上训练 1 天

26.0 (+5.4)

ConvS2S

在 1 个 GPU 上训练 18 天

25.1 (+4.5)

GNMT

在 96 个 GPU 上训练 1 天

24.6 (+4.0)

ByteNet

在 32 个 GPU 上训练 8 天

23.8 (+3.2)

MOSES(基于短语的基准)

不适用

20.6 (+0.0)

* 标准 WMT 英德翻译任务的 BLEU 得分(越高越好)


作为 T2T 可以提供的一种改进示例,我们将此内容库应用于机器翻译。正如您在上面的表格中看到的,SliceNet 和 Transformer 这两个不同的 T2T 模型的表现超过了以前最先进的 GNMT+MoE。我们最佳的 T2T 模型 Transformer 比标准 GNMT 模型高出 3.8 分,而 GNMT 本身已经比作为基准的基于短语的翻译系统 MOSES 高出 4 分。


值得注意的是,通过 T2T,您在一天内使用一个 GPU 就可以接近以前最好的结果:一个小型 Transformer 模型(上面未显示)在一个 GPU 上训练一天后的 BLEU 得分为 24.9。现在,只要有一块 GPU,每个人都可以独自鼓捣出很棒的翻译模型:我们的 github 代码库提供了如何执行该操作的说明:

https://github.com/tensorflow/tensor2tensor/blob/master/README.md



模块化多任务训练

T2T 库是使用我们熟悉的 TensorFlow 工具构建的,并定义了深度学习系统所需的多个片段:数据集、模型架构、优化器、学习速率衰减方案、超参数等等。最重要的是,它在所有这些部分之间强制执行一个标准接口,并实现当前机器学习最佳做法。这样,您就可以选择任何数据集、模型、优化器和超参数集,并运行训练来检查它的性能表现。我们将架构模块化,因此,输入数据和预测输出之间的每一片段都是一个张量到张量函数。如果您对模型架构有了新想法,您不需要替换整个设置。您可以保留嵌入部分、损失以及其他所有部分,只需将模型体替换为您自己的函数,该函数接受一个张量输入,并返回一个张量。

这说明 T2T 很灵活,训练不再局限于某个特定的模型或数据集。训练是如此容易,以至于像著名的 LSTM 序列到序列模型这样的架构都可以通过几十行代码定义。您也可以在不同领域的多个任务中训练单个模型。您甚至还可以同时在所有的数据集上训练单个模型,我们很高兴地报告,我们 T2T 中包含的 MultiModel 就是这样训练的,它在很多任务中都获得了良好的结果,即使在 ImageNet(图像分类)、MS COCO(图像字幕制作)、WSJ(语音识别)、WMT(翻译)和 Penn Treebank 解析语料库上进行联合训练时也是如此。这是单一模型首次被证实可以同时执行上述所有任务。



内置最佳做法

通过这个初始版本,我们还提供了脚本,以生成大量在研究社区中广泛使用的数据集、少量模型、大量超参数配置以及其他重要诀窍的高性能实现。尽管很难将它们全部列出,但如果您决定使用 T2T 运行您的模型,则可免费获得正确的序列填充和相应的交叉熵损失、经过精心调校的 Adam 优化器参数、自适应批处理、同步分布式训练、经过精心调校的的图像数据增强、标签平滑处理以及对我们非常有效的大量超参数配置(包括上述在翻译方面取得最佳结果并可帮助您获得良好结果的超参数配置)。


例如,考虑将英语语句解析成其语法成分结构树的任务。人们已研究这个问题数十年,经过大量努力开发出了竞争性方法。它可通过序列到序列问题的形式呈现,并使用神经网络来解决,但过去这往往需要很多调试。借助 T2T,我们只需几天时间就可以添加解析数据集生成器,并调节我们的注意力转换器模型以针对这一问题进行训练。令我们惊喜的是,我们短短一周就取得了非常好的结果:


解析模型

F1 分数(越高越好)

Transformer (T2T)

91.3

Dyer et al.

91.7

Zhu et al.

90.4

Socher et al.

90.4

Vinyals & Kaiser et al.

88.3

* 在 WSJ 第 23 节的标准测试集上解析 F1 的分数。在此,我们仅比较针对 Penn Treebank WSJ 训练集进行鉴别性训练的模型



为 Tensor2Tensor 做贡献

除探索现有模型和数据集外,您还可以轻松地定义您自己的模型并将您自己的数据集添加到 Tensor2Tensor。我们相信已包含的模型将在许多 NLP 任务上表现出色,因此,只需添加您的数据集,就可能会产生有趣的结果。通过使 T2T 模块化,您将可以非常轻松地发表自己的模型,并了解它在不同任务中的表现。通过这种方式,整个社区都可受益于基准库,并加快深度学习研究。请前往我们的 github 代码库试用新模型,并发表您自己的模型吧!

https://github.com/tensorflow/tensor2tensor



致谢

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


了解更多详情,查看文内所有链接(文档和论文),请点击文末“阅读原文”。


推荐阅读:

如何教机器绘画?

引入tf-seq2seq:TensorFlow中开源序列到序列框架

联合学习:无需集中存储训练数据的协同机器学习

使用一致的哈希算法分配临界负载


发布Tensor2Tensor,加快深度学习研究


点击「阅读原文」,查看文档论文链接发布Tensor2Tensor,加快深度学习研究