本港台开奖现场直播 j2开奖直播报码现场
当前位置: 新闻频道 > IT新闻 >

报码:【组图】重磅论文 | 动态神经网络工具包DyNet:比Theano和TensorFlow更快(2)

时间:2017-01-18 21:33来源:668论坛 作者:本港台直播 点击:
作为我们推荐的编程模型的概念证明,我们通过论文《DyNet: The Dynamic Neural Network Toolkit》进行了描述。DyNet 是一个基于统一声明和执行编程模型的工具包,

作为我们推荐的编程模型的概念证明,我们通过论文《DyNet: The Dynamic Neural Network Toolkit》进行了描述。DyNet 是一个基于统一声明和执行编程模型的工具包,我们称之为动态声明(dynamic declaration)。

在单台机器环境(single-machine environment)中的一系列案例研究中,我们表明 DyNet 的执行效率与标准模型架构的静态声明工具包相当。和使用动态架构(例如,其中每个训练实例具有不同的模型架构)的模型相比,DyNet 的实现得到了显著的简化。

2. 静态声明 vs. 动态声明

在本节中,我们更具体地描述了静态声明(§2.1)和动态声明(§2.2)的两种范式。

3.范式编码

3.1 编码范式概述

从用户的角度来看,使用 DyNet 编写程序的目的是创建对应于需要被执行的计算的表达式(Expression)。这首先从基本的表达式开始,基本表达式通常是常量输入值或模型参数(Parameters)。然后,通过进行运算(Operation)从其他表达式进一步构建复合表达式,并且运算链(chain of operations)隐含地为所需的计算定义一个计算图(ComputationGraph)。该计算图表示了符号计算,并且计算的结果是被动的:仅当用户显式地请求它时(在该点触发「前向(forward)」计算)才执行计算。评估标量(即损失值)的表达式也可以用于触发「后向」计算,其以参数为依据来计算计算的梯度。参数和梯度被保存在模型(Model)对象中,训练器(Trainer)用于根据梯度和更新规则来更新参数。

我们下面将简要地介绍这些每种组件:

Parameter 和 LookupParameter:Parameter 是表示诸如权重矩阵和偏置向量之类的实数向量、矩阵或张量。LookupParameters 是我们想要查找的参数向量集,例如词嵌入(word embeddings)。换句话说,如果我们有一个词汇集 V,我们想要查找其嵌入(embeddings),那么就有一个 LookupParameters 对象定义一个 | V | ×d 矩阵,其作为一个嵌入矩阵与 0,...,| V | -1 到 d 维向量的项形成映射。Parameters 和 LookupParameters 被存储在模型中,并可以跨越训练样本(即跨不同的 ComputationGraph 样本)进行保存。

模型(Model):模型是 Parameters 和 LookupParameters 的集合。用户通过从模型中请求 Parameters 来获取它们。然后模型会跟踪这些参数(及其梯度)。模型可以保存到磁盘中也可以通过磁盘加载,也可以被下面要讲到的 Trainer 对象使用。

训练器(Trainer):训练器实现在线更新规则,比如简单随机梯度下降、AdaGrad [16] 或 Adam [34]。Trainer 有指向 Model 对象的指针,所以同时也有其中的参数,并且还可以根据更新规则的需要保存关于参数的其他信息。

表达式(Expression):在 DyNet 项目中,表达式是主要的可以被操作的数据类型。单个表达式代表了一个计算图中的一个子计算。举个例子,一个表示矩阵或者向量的参数对象可以被加进计算图里,这就产生了一个表达式 W 或者 b。同样,一个 LookupParameters 对象 E 可以通过查找操作来查询一个专门的嵌入向量(它也是被加在计算图里的),这就产生了一个表达式 E[i]。这些表达式可以被组合成更大的表达式,例如 concatenate(E[3], E[4]) 或者 softmax(tanh(W ? concatenate(E[3], E[4]) +b))。这里的 softmax、tanh、?、+、concatenate 都是运算,下面详细介绍。

运算(Operations):运算不是对象,而是在表达式以及返回表达式上运行的函数,它用来在后台构建计算图。DyNet 为很多基本的算术原语(加、乘、点积、softmax、...)和常用的损失函数、激活函数等等都定义了相应的运算。当情况适宜时,运算可以通过运算符重载来定义,这使得图的构建能尽可能地直观和自然。

构造器类(Builder Classes):Builder Classes 定义了创建各种「标准化」的网络组件(比如循环神经网络、树结构网络和大词汇量 softmax)的接口。这些都工作在表达式和运算之上,并且提供了各种易用的库。Builder Classes 为各种标准算法提供了高效便捷的实现。不过,直播,从代码层次的意义上来说,它并不是「核心」DyNet 库的一部分,因为 Builder Classes 是更高层次的,它实现在 DyNet 最核心的自动微分功能之上。Builder Classes 将会在后续的§5 中深入讨论。

(责任编辑:本港台直播)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容