机器学习 | 4款深度学习框架简介,初学者该如何选择?
The following article is from 大数据DT Author 杜振东 涂铭
作者:杜振东 涂铭
来源:大数据DT(ID:hzdashuju)
本文摘编自《会话式AI:自然语言处理与人机交互》,经出版方授权发布。
导读
近几年,随着深度学习爆炸式发展,在人工智能领域除了理论方面的突破外,还有基础架构的突破,它们奠定了深度学习繁荣发展的基础。这其中涌现了几个著名的深度学习平台,本文将对这些平台进行逐一介绍。
Theano是在BSD许可证下发布的一个开源项目,诞生于加拿大魁北克蒙特利尔大学的LISA实验室,是用一位希腊数学家的名字命名的。
Theano是一个Python库,可用于定义、优化和计算数学表达式,特别是多维数组(numpy.ndarray)。在解决包含大量数据的问题时,使用Theano可实现比手写C 语言更快的编程速度。而通过GPU加速,Theano甚至可以比基于CPU计算的C语言快上好几个数量级。
Theano结合了计算机代数系统(Computer Algebra System,CAS)和优化编译器,还可以为多种数学运算生成定制的C语言代码。对于包含重复计算的复杂数学表达式任务,计算速度很重要,因此这种CAS和优化编译器的组合是很有用的。
对于需要将每种不同数学表达式都计算一遍的情况,Theano能够实现编译/解析计算量的最小化,但仍然会给出如自动微分那样的符号特征。
在过去很长一段时间内,Theano是深度学习开发与研究的行业标准。而且由于诞生于学界,Theano最初是为学术研究而设计的,深度学习领域的许多学者至今仍在使用Theano。
但随着TensorFlow在谷歌的支持下强势崛起,Theano日渐式微,使用的人越来越少。在这个过程中标志性事件是:Theano创始者之一Ian Goodfellow放弃Theano转去谷歌开发TensorFlow了。
2017年9月28日,在Theano 1.0正式版发布前夕,LISA实验室负责人、深度学习三巨头之一的Yoshua Bengio宣布Theano将停止继续开发:“Theano is Dead.”
尽管Theano正慢慢退出历史舞台,但作为第一个Python深度学习框架,Theano很好地完成了自己的使命,为深度学习研究人员早期拓荒提供了极大的帮助,同时也为之后深度学习框架的开发奠定了基本设计方向:以计算图为框架的核心,采用GPU加速计算。
总结:深度学习新手可以使用Theano来练习,但对于职业开发者,建议使用其他主流深度学习框架。
2015年11月10日,Google宣布推出全新的机器学习开源工具TensorFlow。TensorFlow最初是由Google机器智能研究部门Google Brain团队基于Google 2011年开发的深度学习基础架构DistBelief构建的。
TensorFlow涉及大量数学运算的算法库,是目前使用最广泛的机器学习工具之一。Google在大部分应用程序中都使用TensorFlow来实现机器学习。例如,我们使用Google照相或Google语音搜索功能时,就是间接使用了TensorFlow模型,它们在大型Google硬件集群上工作,在感知任务方面功能强大。
TensorFlow在很大程度上可以看作Theano的后继者,不仅因为它们有很大一批共同的开发者,更是因为它们还拥有相近的设计理念——基于计算图实现自动微分系统。
TensorFlow编程接口支持Python和C++。随着1.0版本的公布,相继支持了Java、Go、R和Haskell API的alpha版本。此外,TensorFlow可在Google Cloud和AWS中运行。TensorFlow还支持 Windows 7、Windows 10和Windows Server 2016。
由于TensorFlow使用C++ Eigen库,所以库可在ARM架构上进行编译和优化。这也就意味着用户可以在各种服务器和移动设备上部署自己的训练模型,无须执行单独的模型解码器或者加载Python解释器。
作为当前主流的深度学习框架,TensorFlow获得了极大的成功,但在学习过程中,读者也需要注意如下问题。
由于TensorFlow的接口一直处于快速迭代之中,并且版本之间存在不兼容的问题,因此开发和调试过程可能会出现问题(许多开源代码无法在新版的TensorFlow上运行)。 想学习TensorFlow底层运行机制的读者需要做好心理准备,TensorFlow在GitHub代码仓库的总代码量超过100万行,系统设计比较复杂,因此这将是一个漫长的学习过程。 在代码层面,面对同一个功能,TensorFlow提供了多种实现,这些实现良莠不齐,使用中还有细微的差异,请读者注意区分。另外,TensorFlow创造了图、会话、命名空间、PlaceHolder等诸多抽象概念,对普通用户来说难以理解。
总结:凭借Google强大的推广能力,TensorFlow已经成为当今最炙手可热的深度学习框架,虽不完美但是最流行。目前各公司使用的框架也不统一,读者有必要多学习几个流行框架以作为知识储备,TensorFlow就是一个不错的选择。
Keras是一个高层神经网络API,由纯Python编写而成并使用TensorFlow、Theano及CNTK作为后端。Keras为支持快速实验而生,能够把想法迅速转换为结果。Keras应该是深度学习框架之中最容易上手的一个,它提供了一致而简洁的API,能够极大地减少一般应用下用户的工作量,避免用户重复造轮子。
严格意义上讲,Keras并不能算是一个深度学习框架,它更像一个构建于第三方框架之上的深度学习接口。Keras的缺点很明显:过度封装导致丧失灵活性。
Keras最初作为Theano的高级API,后来增加了TensorFlow和CNTK作为后端。为了屏蔽后端的差异性,提供一致的用户接口,Keras做了层层封装,导致用户在新增操作或获取底层的数据信息时过于困难。
同时,过度封装也使得Keras的程序执行十分缓慢,许多Bug都隐藏于封装之中,在绝大多数场景下,Keras是本书介绍的所有框架中运行最慢的一个。
学习Keras十分容易,但是很快就会遇到瓶颈,因为它缺少灵活性。另外,在使用Keras的大多数时间里,用户主要是在调用接口,很难真正学到深度学习的内容。
总结:Keras比较适合作为深度学习框架,但是过度的封装并不适合新手学习(无法理解深度学习的真正内涵),故不推荐。
PyTorch是一个Python优先的深度学习框架,能够在强大的GPU加速基础上实现张量和动态神经网络。
PyTorch是一个Python软件包,提供了如下两种高层面的功能。
使用强大的GPU加速的Tensor计算(类似 Numpy)。 构建基于tape框架的autograd系统深度神经网络。
除此之外,PyTorch提供了完整的官方文档、帮助用户循序渐进地学习的用户指南,以及作者亲自维护的论坛以供用户交流和求教。
Facebook人工智能研究院FAIR对PyTorch提供了强力支持,作为当今世界排名前三的深度学习研究机构,FAIR的力挺足以确保PyTorch获得持续开发、更新的支持,不至于像许多由个人开发的框架那样只是昙花一现。
如有需要,你也可以使用自己喜欢的Python软件包(如Numpy、scipy和Cython)来扩展PyTorch。
相对于TensorFlow,PyTorch有一个显著优点,就是它的图是动态的,而TensorFlow是静态的,不利于扩展。同时,PyTorch的使用非常方便。
总结:如果说TensorFlow的设计是“Make it complicated”,Keras的设计是“Make it complicated and hide it”,那么PyTorch的设计真正做到了“Keep it Simple,Stupid”。
初学者往往纠结于选择哪个深度学习框架作为学习的开始。在这里笔者建议初学者选择容易上手、非过度调用接口的框架。另外对于初学者来说,所选框架应具备易用性强、性能佳、社区完善以及平台支持等特点。
当今行业内各大公司使用的框架也都不尽相同,因此初学者可以考虑掌握多个框架(比如PyTorch和TensorFlow)以应对未来的职场要求。
关于作者
杜振东,国家标准委人工智能技术专家和AIIA(中国人工智能产业发展联盟)技术专家。拥有8年机器学习与文本挖掘相关技术经验,6年中文自然语言处理相关项目实战经验,擅长PyTorch、TensorFlow等主流深度学习框架,擅长运用NLP前沿技术解决真实项目的难题。
涂铭,数据架构师和人工智能技术专家,曾就职于阿里,现就职于腾讯。对大数据、自然语言处理、图像识别、Python、Java等相关技术有深入的研究,积累了丰富的实践经验。
点击阅读原文,进入CCAD数据库
·END·
星标⭐我们不迷路!
想要文章及时到,文末“在看”少不了!
点击搜索你感兴趣的内容吧
往期推荐
数据Seminar
这里是大数据、分析技术与学术研究的三叉路口
推荐 | 青酱
欢迎扫描👇二维码添加关注