我们SVDS的研发团队一直在研究比较从识别列车图像到识别语音的不同深度学习技术。我们需要构建一条获取数据、创建模型,并评估模型性能的管道(pipeline)。然而,我们在研究外头有什么技术时,苦于找不到可供参考的一份简洁的概述性文档,以便启动一个新的深度学习项目。 要回馈为我们提供众多工具的开源社区,一个方法就是帮助别人评估和选择那些工具,并可以借鉴我们的经验。我们给出了下表,同时解释了我们做决定时所基于的各项标准。
这些排名结合了我们的主观经验和这些技术所适用的图像和语音识别应用领域,以及公开的基准测试研究。请注意:这不是要全部列出现有的深度学习工具包,更多的工具包请参阅这里(https://en.wikipedia.org/wiki/Comparison_of_deep_learning_software)。我们的团队会在今后几个月逐一打量DeepLearning4j、Paddle、Chainer、Apache Signa和Dynet。我们在下面解释了如何给评测的工具评分: 语言:开始接触深度学习时,最好使用一套支持你所熟悉的那种语言的框架。比如说,Caffe(C++)和Torch(Lua)都有面向其代码库的Python绑定,但是我们会建议:如果你想要使用那些技术,最好分别精通C++或Lua。相比之下,TensorFlow和MXNet都有出色的多语言支持功能,因而即便你并不精通C++,照样可以充分利用这项技术。 注意:我们没有机会试用新的面向Torch的Python封装器:PyTorch,Facebook人工智能研究实验室(FAIR)在2017年1月份发布了它。这个框架是为Python程序员开发的,旨在充分利用Torch动态构建神经网络的功能。
教程和训练材料:深度学习技术在教程质量和数量以及获得入门材料方面大不一样。Theano、TensorFlow、Torch和MXNet都有说明文档完备的教程,通俗易懂、易于实施。虽然微软的CNTK和英特尔的Nervana Neon是强大的工具,但是我们很难找到入门级材料。另外,我们发现,GitHub社区的参与度是个重要的指标:这不仅表明了工具未来的发展,还表明了通过搜索StackOverflow或软件库的Git Issues,解决某个问题或软件错误的可能性有多大或速度有多快。值得一提的是,在教程数量、训练材料以及开发者及用户社区这些方面,TensorFlow可谓是业界巨头。
CNN建模功能:卷积神经网络(CNN)用于图像识别、推荐引擎和自然语言处理。CNN包括一组不同的层,这些层将初始的数据量转换成预定义类别评分(predefined class scores)的输出评分。想了解更多信息,请参阅尤金尼欧·卡洛西亚罗(Eugenio Culurciello)的神经网络架构概述(https://culurciello.github.io/tech/2016/06/04/nets.html)。CNN还可用于递归分析,比如在自动驾驶汽车中输出转向角度的模型。我们认为,一项技术的CNN建模功能包括几个特点。这些特点包括:定义模型的机会空间、预构建层的可用性,以及可用来连接这些层的工具和功能。我们发现,Theano、Caffe和MXNet都拥有出色的CNN建模功能。话虽如此,TensorFlow也能够轻松增强其InceptionV3模型,Torch拥有出色的CNN资源(包括易于使用的时域卷积),因而让这两项技术凭借CNN建模功能脱颖而出。 RNN建模功能:递归神经网络(RNN)用于语音识别、时间序列预测、图像标题(image captioning),以及需要处理顺序信息的其他任务。由于预构建的RNN模型不如CNN那么众多,如果你有一个RNN深度学习项目,那么考虑之前针对某一项特定的技术实施和开源了什么RNN模型很重要。比如说,Caffe的RNN资源极少,而微软的CNTK和Torch拥有丰富的RNN教程和预构建模型。虽然普通的TensorFlow有一些RNN材料,但TFLearn和Keras包括多得多的RNN实例,这些实例使用TensorFlow。 架构:为了使用某种框架创建和训练新模型,拥有一种易于使用、模块化的前端至关重要。TensorFlow、Torch和MXNet拥有一种简单的模块化架构,它让开发工作显得简单直观。相比之下,Caffe等框架需要做大量的工作才能构建一个新的层。我们发现,TensorFlow在训练过程中和训练之后尤其来得易于调试和监控,原因是它包括TensorBoard web GUI应用软件。 (责任编辑:本港台直播) |