【摘要】本文评估了当前热门的深度学习工具,对于想进行深度学习开发的团队来说,可以参考一二。以下为译文:
在硅谷数据科学公司里,我们的研发团队调研了从图像识别到语音识别等不同的深度学习技术。建立了一套收集数据、创建模型,评估模型的技术路线。然而,当开发者研究什么技术可应用时,却找不到一个简明的可供参考的总结材料来开始一个新的深度学习研究项目。
回馈提供工具的开源社区的一个方法是帮助他人评估和选择工具。我们提供下面的图表,以及基于定制的各种标准的解释。
这些排名结合了我们对图像和语音识别应用技术的主观经验以及公开的基准研究。请注意这不是目前深度学习框架详尽的列表,更多的框架可以在这里找到。在未来的几个月,我们将会评估DeepLearning4j, Paddle, Chainer, Apache Signa和Dynet等框架。对已经评估的框架的解释如下:
编程语言: 在开始深度学习时,最好使用熟悉的编程语言开发的框架。 例如,Caffe(C++)和Torth(Lua)的代码库都与Python绑定,但是如果你想使用这些技术,建议你分别熟悉C++或Lua。 相比之下,TensorFlow和MXNet有很好的多语言支持,即使你不精通C++也可以轻松使用。
注:我们没有机会测试Facebook人工智能研究所2017年1月发布的用Python包装后的Torch,PyTorch。该框架是为帮Python程序员利用Torch动态构建神经网络。
教程和培训材料: 深度学习技术的教程和入门材料在质量和数量上有很大的不同。 Theano,TensorFlow,Torch,和MXNet已经有文档齐全的教程,很容易理解和应用。 而微软的CNTK和英特尔的Nervana Neon虽然强大, 但缺乏入门等初级材料。 此外,GitHub社区参与量是一个强大的指标,不仅关乎工具的未来发展,同时也是一个问题或错误通过搜索或Git代码库问题列有多大的可能性或多快被解决的衡量标准。需要注意的是,TensorFlow的教程、培训材料、社区开发者及用户都是非常丰富的。
卷积神经网络建模能力:卷积神经网络(CNN)被用于图像识别,推荐引擎和自然语言处理。一个卷积神经网络由一组不同层组成,这些层把初始的数据输出为之前定义好的评分类别(更多的介绍,参考Eugenio Culurciello的神经网络架构综述)。卷积神经网络也能用于回归分析,例如在自动驾驶中输出转向角的模型。考虑一个技术框架的卷积神经网络的能力包含几个方面:定义模型的机会空间,预制层的可用性,连接这些层的工具和功能的可用性。其中Theano、Caffe、和MXNet有很好的CNN建模能力。也就是说,TensorFlow可以简单的建立在inceptionV3模型上,而Torch强大的CNN包含好用的时域卷积,这与CNN建模能力关联性并不强。
循环神经网络建模能力:循环神经网络(RNNs)被用于语音识别,时间序列预测,图像描述和其他需要处理时序信息的任务。已有的RNN模型没有CNNs那么多,所以如果你有一个RNN深度学习项目,考虑已经实现并且有开放源码的RNN模型是非常重要的。例如,Caffe的RNN资源最少,微软的CNTK和Torch有丰富的RNN教程和现成的模型。而TensorFlow有一些RNN资料,TFLearn和Keras有更多用TensorFlow实现RNN的例子。
架构:为了在特定的框架中创建和训练新模型,有一个易于使用和模块化的前端是非常重要的。TensorFlow, Torch和MXNet有一个简单的模块化的架构使得开发也非常简单。由于TensorFlow包含了TensorBoard网页界面,使得它在训练中和训练后特别易于调试和监控。
速度: Torch和Nervana在开源卷积神经网络基准测试中有最好的性能记录。TensorFlow的性能在大多数的测试里面表现不错,而Caffe和Theano则落在后面。 微软的CNTK声称拥有最短的RNN训练时间。 在另一个基于Torch、TensorFlow、Theano针对RNN的测试中,Theano的表现是最好的。
多GPU支持:大多数深度学习应用需要大量浮点运算。例如,百度的深度语音识别模型需要百亿亿次浮点运算进行训练,那是每秒大于10的18次方的运算啊。像NVIDIA公司Pascal架构的TitanX这样的主流GPU每秒能进行110亿次的浮点运算,在一个足够大的数据集上要用超过一周的时间来训练一个新的模型。为节省建立模型时间,需要多机多GPU。幸运的是,上面提到的大多数技术都提供了这种支持。据报道MXNet有一个最佳的多GPU引擎。
Keras兼容性:Keras是实现快速深度学习原型的一个高水平库。我们发现它是让数据科学家轻松使用深度学习的一个非常好的工具。Keras目前支持TensorFlow和Theano两个后端,将来会得到TensorFlow的官方支持。 鉴于Keras的作者最近表示Keras将继续做为可以支持多个后端的前端,Keras库仍是一个很好的选择。
如果你对深度学习感兴趣,建议你先评估团队成员的技术水平和项目需求。例如,对于一个使用Python开发图像识别应用的团队,建议使用文档丰富,性能不错,原型工具好的TensorFlow。一个以Lua为主的团队需要扩大RNN到生产中去,建议使用速度快和RNN建模能力强的Torch。