如上一节所述,将 DyNet 与其它神经网络工具包相区别的一个主要特性是,它能够为每个训练样本或 minibatch 有效地创建新的计算图(Computation Graphs)。为了保持计算效率,DyNet 使用了细致的内存管理策略来存储前向传播和反向传播的计算过程中的值(§4.2),因此大部分时间都会用在实际的计算上(§4.3) 4.1 计算图(Computation Graphs) 图 4:公式 g(x, j) = tanh(W1?x+b)+tanh(W2?ej+b) 的计算图的例子,以及相应的代码。 4.2 高效的图构建 4.3 执行计算 5 更高级的抽象结构 如第 3 节所述,DyNet 实现了在张量(tensors)上表示基本(子)可微函数的运算。这和 Theano 和 TensorFlow 库中提供的运算是相似的。除了这些基本运算外,使用可被视为由基本运算组成的更复杂的结构也是很常见的。常见的例子有循环神经网络(RNN)、树结构神经网络(tree-structured networks)和更复杂的计算 softmax 概率分布的方法。在其它库中,这些更高级别的结构或是通过本地提供,亦或是通过第三方库(如 Keras)提供。在 DyNet 中,循环神经网络的本地支持、树结构神经网络和更复杂的 softmax 函数都是通过 Builder 提供的;具体细节会在接下来的章节描述,图 5 中也有所总结。
图 5:DyNet Builders 实现的更高级结构的示例,以及它们的规范使用 5.1 循环神经网络的 Builders 5.2 树结构神经网络的 Builders 5.3 Large-Vocabulary Softmax Builders
图 6:各种 RNN 接口 6 效率工具 DyNet 包含许多可以提高计算效率的功能,j2直播,包括稀疏更新(sparse updates)、minibatching 和跨 CPU 的多处理(multi-processing across CPUs)。 7 实证比较 在本节中,我们将使用 C++ 接口和 Python 接口将 DyNet 和其他三个流行库(Theano [7]、TensorFlow [1] 和 Chainer [62])进行对比。我们选择这些库是因为 Theano 和 TensorFlow 可以说是目前最受欢迎的深度学习库,而 Chainer 的 define-by-run 哲学和 DyNet 相似。 表 1:各个任务的数据和默认设置。 表 2:每个工具箱在 CPU 上的处理速度。速度是以 RNNLM 与 Tagger 处理的词/秒和 TreeLSTM 处理的句/秒进行衡量的。带 +sparse 的行表示 LookupParameters 的稀疏更新(sparse updates),这是 DyNet 中的默认行为,但与其他工具包的执行密集更新(dense updates)的实现不可对比。 表 3:每个工具箱在 GPU 上的处理速度。速度是以 RNNLM 与 Tagger 处理的词/秒和 TreeLSTM 处理的句/秒进行衡量的。 表 4:从程序启动到为每个工具包处理第一个实例的时间(秒)。 表 5:密集或稀疏更新(dense or sparse updates)10 分钟后的处理速度和准确度。 表 6:每个工具包的实现的非注释字符数。 8 使用案例 (责任编辑:本港台直播) |