Caffe2新增RNN支持,Facebook全面转向神经机器翻译

机器之心 2017-08-04 14:04 阅读:234

本文由机器之心编辑,“机器之心”专注生产人工智能专业性内容,适合开发者和从业者阅读参考。点击右上角即刻关注。

近日,Facebook 共享了 Caffe2 在支持循环神经网络(RNN)方面的最新成果。在 Caffe2 RNN 中,最突出的亮点是几乎零开销的 RNN 引擎,它不仅可执行任意 RNN 单元且难以置信地灵活,还可以进行束搜索;Caffe2 RNN 还允许每块 GPU 使用大批量数据进行训练,并实现了所谓的静态 RNN。通过 Caffe2 RNN,Facebook 的神经机器翻译的效率提升高达 2.5x,Facebook 全部的机器翻译模型从基于短语的系统转换为所有语言的神经模型。这意味着 Facebook 可在产品中部署神经机器翻译了。

我们很高兴共享 Caffe2 在支持循环神经网络(RNN)方面的最新成果。今年 4 月推出 Caffe2 时,它并不支持 RNN;为此,在过去的几个月,我们开发出了当前最优的 RNN 构件以支持 RNN 用例(比如机器翻译、语音识别)。

通过 Caffe2,我们显著提升了 Facebook 机器翻译系统的效率和质量,效率提升达 2.5x,使得 Facebook 可在产品中部署神经机器翻译。因此,Facebook 全部的机器翻译模型从基于短语的系统转换为所有语言的神经模型。此外,还有若干个产品团队,包括语音识别和广告排名团队在内,已经开始使用 Caffe2 训练 RNN 模型。

我们邀请了机器学习工程师和研究者体验 Caffe2 对 RNN 的支持,下面是更多关于 RNN 支持的实现和开源细节:

Caffe2 RNN 的独特特征

Caffe2 提供了一个通用的 RNN 库,其中 RNN 引擎是用于执行任意 RNN 单元(cell)的几乎零开销的虚拟框;在底层,一个单元就是一个袖珍版的 Caffe2,具备 Caffe2 所有的主要性能。同样还有一组丰富的 API,允许人们使用现有的 RNN 单元,并可通过 Python 部署新单元。MultiRNNCell 允许将现有单元轻松组合成更复杂的单元。例如,你可以整合 LSTMCell 的若干个层,然后将 AttentionCell 放到顶部。

RNN 引擎难以置信地灵活。它允许你选择哪些输出有梯度,并需要通过时间传播;允许你定义单元彼此连接的方式,以及如何与外在世界相连接。每一个输入接收到了通过时间传播回来的正确梯度。

除了零开销的引擎之外,Caffe2 RNN 的另一个核心优势是内存,它允许我们每块 GPU 都使用大批量数据进行训练。RNN 引擎支持回收跨时间步的中间结果,并使你有权力决定要回收什么。关于计算的交易内存的更多分析细节请参阅 https://arxiv.org/abs/1606.03401。

在上图中,后向传递的中间结果可以跨时间步重复使用。前向结果如果需要重复使用,则需要在后向传递中重新计算。Caffe2 允许你指定要丢弃的前向 blob 对象以节省计算资源。

静态 RNN

Caffe2 也实现了所谓的静态 RNN。它可以在序列长度已知的情况下通过时间反向传播来使用。另外,循环网络也成为了图形的一部分,这可以让全局神经网络执行器 DAGNet 找到最佳的 RNN 并行执行方式。静态 RNN 引擎支持所有现有的 RNNCell,几乎无需更改代码即可插入使用。在多层 LSTM 模型中,我们可以看到静态 RNN 的速度比动态 RNN 高出 25%。

用于束搜索的 RNN 引擎

开发团队遵循在机器翻译中常见的在解码时使用束搜索(beam search)来提高模型输出预测表现的方法。我们使用 Caffe2 中 RNN 抽象的泛化性能来直接实现束搜索——使用单一前向网络计算(single forward network computation),这样可以提供快速而有效率的推理。无论底层模型的架构如何(RNN、CNN……),束搜索都可以作为循环网络解码器使用。束搜索推断功能已在 Caffe2 库中提供。

主页: https://caffe2.ai/

GitHub: https://github.com/caffe2/caffe2

Facebook: https://facebook.com/Caffe2AI

为了提高翻译质量,Facebook 近日决定将所有产品中基于短语的机器翻译模型转换成神经网络翻译系统。该公司称,目前所有业务中,每天会收到 2000 种翻译方向(translation direction),约 45 亿个翻译请求。新模型将提供更为准确和流畅的翻译,改善 Facebook 产品的用户体验。

带有注意力机制的序列到序列 LSTM:结合上下文

我们之前的基于短语的统计技术很有用,但也有其局限性。基于短语的系统最主要的缺点是它们将句子拆分成独立的单词或词组,系统在输出翻译结果时一次只考虑几个单词。这使得词序差别显著的语言间的翻译非常困难。为改进该系统、构建我们的神经网络系统,我们开始使用一种循环神经网络,叫作带有注意力机制的序列到序列 LSTM(长短期记忆)。该网络可以考虑到源语言句子的上下文和已经生成的所有内容,以创建更准确、流畅的译文。该网络允许长距调序,正如在英语和土耳其语翻译中遇到的那样。我们来看一下基于短语的土耳其语-英语翻译系统输出的译文:

再比较一下基于新型神经网络的土耳其语-英语翻译系统输出的译文:


我们看到,新系统在所有语言对上的 BLEU 值与基于短语的系统相比平均增长了 11 个百分点。

解决未知单词

在许多案例中,原句子中的单词并没有直接对应于目标词汇表中的翻译。这种情况下,神经系统将为未知单词生成占位符。所以我们采用注意力机制在源单词和目标单词中产生软对齐,从而将单词汇传递到目标句子中。然后,我们从使用训练数据构建的双语词典中查找该单词的翻译,并替代目标句子中的未知词。这个方法要比使用传统词典的方法更加鲁棒,特别是对于有噪声的输入。例如,在英语到西班牙语的翻译中, 我们能够将"tmrw(tomorrow)"翻译为「mañana」。虽然添加一个词典在 BLEU 分值上只有少量的提升,但是它令人们在 Facebook 翻译上有更高的评分。

词汇量简化

典型的神经机器翻译模型会计算所有单词在目标词汇表中的概率分布。该分布包含的单词量越大,计算所用的时间就越多。我们使用一种词汇量简化(vocabulary reduction)的建模技术在训练和推理时间上修正该问题。通过词汇量简化,我们将目标词汇中最常出现的单词与给定句子单个词汇的一组可能翻译相结合,以减少目标词汇的大小。过滤目标词汇会减少输出映射层的大小,这有助于使计算更快,而且不会使质量降低太多。

模型调参

神经网络基本上总是具有可调整的参数以控制模型的学习速率等模型性质。选择这些超参数的最优集非常有益于性能的提升。然而,调参对于大规模机器翻译提出了重大的挑战,因为具有独特超参数的唯一模型才能表征一个翻译方向。因为每个模型的最优值可能不同,因此我们必须独立地对生产中的每个系统进行超参数调整。我们在数月内进行了数千次端对端翻译实验,并利用 FBLearner Flow 平台微调超参数(如学习速率,注意力类型和集成大小等)。这对一些系统有重大影响。比如说我们仅基于调优模型超参数就可以令英语到西班牙语的 BLEU 分值相对提高了 3.7%。

使用 Caffe2 调整神经机器翻译的规模

向神经系统过渡的一个挑战是使模型运行的速度和效率适用于 Facebook 的规模。我们在深度学习框架 Caffe2 中实现了该翻译系统。Caffe2 追根溯源和灵活的本质使得我们可以在我们的 GPU 和 CPU 平台上进行训练和推断时,能够调整翻译模型的性能。

对于训练,我们实现了记忆优化,如 blob 循环(blob recycling)和 blob 再计算(blob recomputation),帮助我们训练更大规模的数据,更快地完成训练。关于推断,我们使用专门的向量数学库和加权量化来提高计算效率。现有模型的早期基准显示能够支持 2000 多个翻译方向的计算资源已经相当高了。但是,Caffe2 的灵活性本质和已经实现的优化使我们在效率上实现了 2.5x 的提升,这使得我们可以将神经机器翻译应用到产品中。

我们在解码时间使用束搜索来改善我们对模型输出的最高似然句子的评估,这是机器翻译中的常见做法。我们利用 RNN 抽象在 Caffe2 中的泛化性能来实现束搜索,将其作为单一前向网络计算,以获得快速高效的推断。

在整个过程中,我们开发了 RNN 构件,如 LSTM、乘法积分 LSTM(multiplicative integration LSTM)、注意力机制。我们很高兴能够将该技术作为 Caffe2 的一部分来分享,以及和开源社区共享我们的研究成果。

正在进行的工作

实现从基于短语的翻译系统向神经机器翻译的转变是我们向每个用户提供在 Facebook 上使用常用语言的经历的里程碑。我们将继续扩展神经机器翻译技术的边界,向每一个使用 Facebook 的用户提供更高质的翻译。

版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。
阅读量: 234
0