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

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

时间:2017-01-18 21:33来源:668论坛 作者:本港台直播 点击:
参与:杨旋、袁泽林、赵华龙、吴攀 近日,来自卡内基梅隆大学、日本奈良先端科学技术大学、Google DeepMind、以色列巴伊兰大学、艾伦人工智能研究所、IBM T.J. Watson 研究中心、澳大利

参与:杨旋、袁泽林、赵华龙、吴攀

近日,来自卡内基梅隆大学、日本奈良先端科学技术大学、Google DeepMind、以色列巴伊兰大学、艾伦人工智能研究所、IBM T.J. Watson 研究中心、澳大利亚墨尔本大学、约翰·霍普金斯大学、谷歌、华盛顿大学、微软和英国爱丁堡大学的研究者共同发表了一篇重磅论文《DyNet: The Dynamic Neural Network Toolkit》,正式介绍了动态神经网络工具包 DyNet;该工具包也已在 GitHub 上开源:。机器之心对这篇论文进行了摘要性的介绍,论文原文可点击文末「阅读原文」下载。

报码:【j2开奖】重磅论文 | 动态神经网络工具包DyNet:比Theano和TensorFlow更快

摘要:在本论文中,我们将介绍 DyNet——一个基于网络结构的动态声明(dynamic declaration of network structure)的用于实现神经网络模型的工具包。在 Theano、CNTK 和 TensorFlow 等工具包中所用的静态声明策略(static declaration strategy)中,用户需要首先定义计算图(computation graph,即计算过程的符号表示),然后样本会被传递给执行该计算的引擎并计算其导数。而在 DyNet 的动态声明策略中,计算图的构建(construction)基本上是透明的,通过执行用于计算网络输出的程序代来隐式地构造;对于任意一个输入,用户都可以自由得使用不同的网络结构。因此,动态声明有助于实现更复杂的网络架构;特别的,DyNet 允许用户使用他们喜爱的编程语言(C ++ 或 Python)以一种他们惯用的方式来实现他们的模型。在动态声明中,有一件充满挑战的事情:由于对于每个训练样本都要重新定义符号计算图,所以其构建的开销必须要低。为了实现这一点,DyNet 使用了一个经过优化的 C ++ 后端和轻量级的图表示(graph representation)。实验表明,DyNet 的速度与静态声明工具包相当甚至比其更快,并且明显快于另一个动态声明工具包 Chainer。DyNet 根据 Apache 2.0 许可证进行了开源,可以在这里访问:

1. 引言

深度神经网络现在是机器学习开发者的工具箱中不可或缺的工具,它在图像理解 [39]、语音的识别与合成 [29,65]、游戏 [45,54]、语言建模和分析 [6, 14 ] 等领域中拥有重要的地位。首先,深度学习将应用特定的特征工程(加上理解良好的模型,这是经典的「浅度」学习的范式)替换成了应用特定的模型工程(model engineering,通常结合了输入的不太复杂的特征)。因此,深度学习范式在不断发展新的模型变体。要开发有效的模型不仅仅需要洞察力和进行分析,还需要实现一些新模型并评估其在实际任务上的表现。因此,快速的原型设计、高效轻松的维护和正确的模型代在深度学习中至关重要。

深度学习模型以两种模式操作:在给定输入的情况下计算预测值(或者是预测上的分布),或者在监督学习训练的时候计算相关模型参数的预测误差「损失」的导数,用于使用梯度下降方法的某些变体来最小化和类似输入之间后续的误差。因为实现模型需要同时实现模型预测的代码和进行梯度计算和学习的代码,所以模型开发是一个非常困难的工程挑战。通过使用简化神经网络计算的工具,可以减少这种挑战的难度。这些工具包括 Theano [7]、TensorFlow [1]、Torch [13]、CNTK [64]、MxNet [10] 和 Chainer [62],它们提供了神经网络功能原语(例如线性代数运算、非线性变换等)、参数初始化和程序优化以及表达特定任务预测和误差的复合能力——这些预测和误差然后会被自动微分(autodiff)以获取驱动学习算法所需的梯度。最后的自动微分(autodiff)组件可以说是它们最重要的节省劳动的功能,因为如果要改变计算训练输入损失值的函数,那么其导数的计算过程也要做出相应的改变。如果工程师独立地维护这些代码路径,则它们很容易导致它们不能同步。此外,由于对复合表达式的微分的算法相对简单 [63,31],所以使用 autodiff 算法代替手写代码计算导数是个不错的选择。

简言之,由于这些工具有效地解决了一些关键的软件工程问题,它们让深度学习取得了成功。不过仍然存在一些问题:因为工程(engineering)是深度学习实践的关键组成部分,什么工程问题是现有工具无法解决的呢?它们能让程序员比较自然地实现自己的想法吗?它们是否便于调试?它们是否方便大型项目的维护?

在本论文中,我们将推荐一个基于几个流行工具包的编程模型——即将网络架构的声明和执行(我们称为静态声明)进行分离,在这其中必然会存在一些严重的软件工程风险,特别是在处理动态结构化网络架构(例如,可变长度的序列和树形结构的递归神经网络)的时候。作为一种替代方案,我们提出了一个替代的编程模型,它可在 autodiff 库中进行统一声明和执行。

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