近日,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 的用户提供更高质的翻译。
caffe2:
https://caffe2.ai/
GitGub地址:https://github.com/caffe2/caffe2
原文链接:https://caffe2.ai/blog/2017/08/03/caffe2-adds-RNN-support.html
Facebook博客:https://code.facebook.com/posts/289921871474277/transitioning-entirely-to-neural-machine-translation/
来源:网络
本片文章是我的【caffe2从头学】系列中的一篇,如果想看其他文章,请看目录: 0.目录 1.快速开始 1.1.什么是caffe2 ? 1.2.安装caffe2 2.学习caffe2 3.caffe2官方教程的安装与使用 3.1.Blobs and Workspace, Tensors,Net 概念 3.2.Caffe2 的一些基本概念 - Workspaces&Operators &am...
最近花费两个月时间接触caffe2框架和卷积计算; 1.卷积计算原理 借用yangqing大神的原图 (1)矩阵变换 图片维度:通道(C)*高度(H)*宽度(W)),可以看到按照通道方向,即C方向进行矩阵变换 (2)按行获取图像中每个点的值,依次进行矩阵变换 依次按照通道方向,即C方向取值 (3)获取最终图像矩阵 虽然按照通道方向取值每个点,实际过程中是将每个通道划分为小段进行取值。将图像转换后的...
现在时间是2018.03.14,在Ubuntu16.04 平台 源码方式编译安装Caffe2(CPU版),遇到了一些问题,以及最后的解决方案整理如下。 Step1:安装 安装过程 参考的是官方主页上给出的安装教程,链接 https://caffe2.ai/docs/getting-started.html?platform=ubuntu&configuration=compile 在执行最...
参考文章:https://www.cnblogs.com/zhencv/p/8384419.html 1, 首先安装好cuda和cudnn,我目前是使用cuda8.0,cudnn6.1(安装教程参考本博客其他文章,基本所有的框架都是需要这个步骤) 2, 按照官网教程按照caffe2: &nb...
Caffe2(3)----下载现成的模型并使用 Caffe2训练好的模型可在Model Zoo下载,下载的命令很简单,接下来以下载和使用squeezenet为例,进行简单说明。 1.浏览可下载的模型 已有模型都放在github上,地址:https://github.com/caffe2/caffe2/wiki/Model-Zoo,当前有caffe和caffe2两种版本的选择。 &nb...
文章讲的是Caffe2:移动计算的深度学习框架,Caffe2是Facebook新的开源深度学习框架。与之前的PyTorch不同,Caffe2专门用于将深度学习移植到移动应用程序中,这将会让智能手机更“深入”、更智能! 如果你认为深度学习还只是一个概念,你就错了。世界各地的研究实验室都试图开发高效快速的软件框架,使研究人员或程序员能够实施和测试深度学习模型。现在,每个新的...
学习逻辑回归需要清楚的几件事:假设函数怎么用(怎么预测),决策边界怎么用(一般取0.5),损失函数如果计算(因为要取最小),优化方法(重新计算各个权重) 建议:我阅读的英文参考资料的相关内容除了公式我并没有往上发布。但是我会放到我的下载资料中,建议,想彻底理解这几个内容的,如果不想直接从公式推导入手,可以考虑看下具体的例子,就会明白其中的含义。 前言 本文主要介绍逻辑回归的基础知识...
编者按 本篇文章来自于17th Extended Semantic Web Conference (ESWC2020) 会议。该文章提出了基于语义标注网络的结构化数据集,包含工业4.0标准、范式和框架,并给出了知识图谱在工业4.0应用的现有案例。 本文作者北京大学周雨奇,将对原文进行概要阐述。 文末提供获...
原理:crossfire 1.9.0 版本接受入站 socket 连接时存在缓冲区溢出漏洞。 工具: 调试工具:edb; ###python在漏洞溢出方面的渗透测试和漏洞攻击中,具有很大的优势 实验对象:crossfire【多人在线RPG游戏】 运行平台:Kali i386 虚拟机【32位,计算机CPU位数是指地址总线位数,64位系统的寻址空间为2^64,寻址过大,难以处理,为了简化操作,所以选用...
物联网设备提供的好处很多。举例来说,父母可以远程监控自己的孩子,而又不会显得太霸道。因此,儿童在拥有安全环境的同时也会有空间和自由让自己变得独立。 -- Andrew Carroll IoT (物联网)设备正在迅速改变我们的生活。这些设备无处不在,从我们的家庭到其它行业。根据一些预测数据,到 2020 年,将会有 100 亿个 IoT 设备。到 2025 年,该数量将增长到 220 亿。目前,物联...
I have API, where I get datas. I use mongoose to save it into my local MongoDB. Each time when I save, I create dynamically new model and use insertMany on it: But... later, when all almost complete, ...
I have been trying to figure this out for a few hours and haven't been able to understand why this isn't working. I have a TPL Dataflow batch block that accepts a batch of files that I want to upload....
I'm trying to save a data frame to a mysql database. But it seems that it doesn't work because of the timestamp (format?). When I run this script, the following Error occurs ..... Can't figure it out ...
I am a modder with very little scripting experience. I need a way to renumber the following Sections of a file: etc. The file looks like this: and has to be continued like this: and so on. So simply s...
I have a test-assembly (MyTestProject) where I want to write some logging using log4net. Thus I created a config-file with the same name as the assembly where I set up the logging as suggested here: W...