无论是对于深度学习相关专业的初学者,还是已经在企业和组织中从事工业场景应用和研发的开发者来说,选择一个适合自己,适合业务场景需求的深度学习框架显得尤为重要。下边对现有深度框架做一个全面的阐述及解答。
目前,国内外有哪些主流的深度学习框架?分别有什么优缺点?
TensorFlow:谷歌大厂出品,社区资源丰富,用户群体广泛。如果你的业务是实现一个比较成熟的应用场景,选择 TensorFlow 是个不错的选择,毕竟大部分坑前人已经踩过了。如果你还是一名初学者,想要去实现全新的算法,那要慎重选择 TensorFlow,因其发展时间较久,代码库庞大,想要真正看懂它的代码会是一个不小的挑战。
PaddlePaddle:百度出品,跟 TF 类似,PaddlePaddle 也是在百度内部实际应用的工业框架。值得一提的是,PaddlePaddle 为大量工业级模型提供官方支持;大规模分布式训练技术能力强,支持大规模稠密参数和稀疏参数场景的并行训练;基于其中文文档友好、简单易上手的特点,社区活跃度不断提高。本土开发者中文交流非常方便。PaddlePaddle 已经升级为全面的深度学习开发套件,除了核心框架,还开放了 VisualDL、PARL、AutoDL、EasyDL、AI Studio 等一整套的深度学习工具组件和服务平台,更好地满足不同层次的深度学习开发者的开发需求。18 年百度加大了生态投入,在工业制造、农林领域有不少案例,对于想要落地应用场景,特别是针对中文语言处理的场景和大规模推荐场景,PaddlePaddle 或许是个不错的选择。
PyTorch+Caffe2:脸书出品。PyTorch 前身是 Torch(一个基于 Lua 语言的深度学习库)。PyTorch 灵活性相比 TensorFlow 大大增强,支持动态构图,开发者可以随时改变神经网络的结构。PyTorch 今年因其易用性表现突出,越来越受到学术界的青睐。如果你是一名初学者,想要去复现前沿的算法,推荐使用 PyTorch。如果你是工业场景开发者,最好先搜一搜是否已经有使用 PyTorch 的成功落地案例。因为在运算效率、工业部署上,PyTorch 还不算成熟。Caffe2为生产环境设计,提供在各种平台(包括移动设备)的运行时。Caffe2 意在弥补 Pytorch 在生产环境的不足,目前还没有看到太多开发者反馈 Caffe2 的工业表现,需要更多时间验证。
MxNet:已被亚马逊 (Amazon) 选为 AWS 上的深度学习框架,支持动态图计算。优势是高效小巧,更适合自定义需求高的公司和研究者。如果你的工作需要对框架进行修改时,改 MxNet 要比改 TF 高效多了。MXNet 的用户相比其他框架并不算太多,有少量拥戴者。MXNet 在文档质量方便经常被诟病,新手还需要多磨合一下。
Keras:是一个用于快速构建深度学习原型的高层神经网络库,Keras 由纯 Python 编写而成,并基于 Tensorflow、Theano 以及 CNTK 后端。Keras 隐藏了大部分的内部运算,对于新手来说非常友好。如果想要快速入门,建议可以选择 Keras。但真的想成为深度学习大拿,还是要手动从零开始写一个神经网络的代码,否则容易依赖于 Keras 的易使用性而忽略底层原理。
XDL:阿里出品。X-Deep Learning (XDL) 是针对特定工业级场景(比如广告)深度学习问题的解决方案,而不是与其他框架并列的底层框架。实际上,XDL 采用桥接的方式支持使用 TensorFlow 和 MXNet 作为单节点的计算后端。对于已经使用 TensorFlow、MXNet 的开发者来说,如果需要在大规模稀疏场景应用可以选择 XDL 试试, XDL 依赖于阿里提供特定的部署环境,对非阿里系用户不是很人性化。
不同学习阶段、不同岗位的开发者,面对不同的业务场景需求应该选择什么深度学习框架?选择和衡量的标准是什么?
不同类型的用户,选择和衡量的标准会有一定差异。选择框架通常要考虑易用性、性能、社区、平台支持等问题。初学者应该考虑容易上手的框架。偏研究性的开发者,一般选择易用而且有领先的模型基线的框架。偏工业应用的开发者可以考虑使用稳定性高、性能好的框架。比较高阶的用户,往往需要同时掌握多个框架。最新的开源算法可能会基于某个框架,掌握多个框架可以更快复现前沿成果。同时不同框架在不同模型上有性能差异,掌握多个框架也可以选择在某个场景下最适合的框架。
在选择深度学习框架时有哪些经验可以分享?需要考虑哪些因素?
开发者通常用深度学习框架组建网络,去解决实际企业级业务中的具体问题,比如:词法分析、机器翻译等。选择框架时通常需要关注以下一些因素:
(1)框架是否已经官方支持了当前最好的算法,比如中文词法分析任务。
(2)框架是否高效。同样的算法用不同框架实现,训练速度更快,意味着更少的线下资源,更快的迭代速度;预测速度更快,意味着实际部署时可以为企业节省大量的机器资源,也具有更高的响应速度。
(3)框架的接口是否容易使用。
掌握一个深度学习框架,开发者需要做哪些准备?
在开发者已经学习 Python 程序开发和深度学习基础知识的前提下,掌握一个深度学习框架,开发者需要了解框架的基本原理,学习并掌握框架的基本概念和用法。
(1)通常可以先从官方文档开始,通过大致浏览官方文档对框架基本概念和用法有一个大致的了解。
(2)另外可以结合官方提供的快速入门例子,在自己的机器上安装并练习使用。
(3)然后可以再从官方的模型库里面挑选一些算法,进行学习参考。
(4)结合自己具体任务组建网络,查看 API 接口文档,解决实际任务。
深度学习框架能“包治百病”吗?是否适用于所有应用场景需求?
需要提醒大家的是,深度学习框架不能包至百病,深度学习框架能够解决的是适合使用深度学习技术的应用场景。
深度学习(DL)是机器学习(ML)的一个分支,也是当下最流行的机器学习方法,虽然近几年在图像、语音、自然语言处理等应用方向,深度学习技术都取得了突破性的进展,但是我们依然不应该神话深度学习,认为深度学习无所不能。
适合掌握深度学习的任务应具备这样一些特点:
(1)具备大量样本数据。如果样本数据难以获取或者数量太少,我们认为就不适合深度学习技术解决。
(2)样本数据对场景的覆盖度足够完善。深度学习模型的效果完全依赖样本数据表现,如果出现样本数据外的情况,模型的推广性会变差。
(3)结果对可解释性的要求不高。如果应用场景不仅要机器能够完成某项任务,还需对完成过程有明确的可解释性,这样的场景就不那么适合深度学习。
联盟有话说:
目前比较主流的两大深度学习框架是TensorFlow和PyTorch,TensorFlow在工业界用的比较多,PyTorch比较灵活,相对在学业界用的比较多。不过,联盟觉得只要选择一个适合自己的,踏实用心学习就好了,不用考虑其他很多不必考虑的问题,何必给自己增添烦恼呢。
对于有能力或者高端开发者,还是要对流行框架都掌握哟,这样才能跟随AI前沿!