深度学习大讲堂 2019-07-11
先简单看一下深度学习的定义。
深度学习(Deep Learning, DL)是机器学习的技术和研究领域之一,通过建立具有阶层结构的人工神经网络(Artifitial Neural Networks, ANNs),在计算系统中实现人工智能。
深度学习是机器学习中的一个研究方向,它基于一种特殊的学习机制。其特点是建立一个多层学习模型,深层级将浅层级的输出作为输入,将数据层层转化,使之越来越抽象。这种分层学习思想模拟的是人脑接受外界刺激时处理信息和学习的方式。
机器学习在很多领域突破了传统机器学习的瓶颈,将人工智能推向了一个新的高潮。
深度学习目标:如何方便的表述神经网络,以及如何快速训练得到模型。
MXNet(发音为“mix-net”)起源于卡内基梅隆大学和华盛顿大学。MXNet是一个功能齐全,可编程和可扩展的深入学习框架,支持最先进的深入学习模式。 MXNet提供了混合编程模型(命令式和声明式)和大量编程语言的代码(包括Python、C++、R、Scala、Julia、Matlab和JavaScript)的能力。2017年1月30日,MXNet进入Apache基金会,成为Apache的孵化器项目。
MXNet支持深度学习架构,如卷积神经网络(CNN)和循环神经网络(RNN),包括长短期记忆网络(LTSM)。该框架为成像、手写、语音识别,预测和自然语言处理提供了出色的功能。有些人称MXNet是世界上最好的图像分类器。
MXNet具有强大的技术,包括扩展能力,如GPU并行性和内存镜像、编程器开发速度和可移植性。此外,MXNet与Apache Hadoop YARN(一种通用的,分布式的应用程序管理框架)集成,使MXNet成为TensorFlow的竞争对手。
近期,Amazon宣布将MXNet作为Amazon AWS最主要的深度学习框架。
优点:
1)第一个主流的工业级深度学习工具。
2)它开始于2013年底,由UC Berkely的Yangqing Jia老师编写和维护的具有出色的卷积神经网络实现。在计算机视觉领域Caffe依然是最流行的工具包。
3)专精于图像处理。
缺点:
1)它有很多扩展,但是由于一些遗留的架构问题,不够灵活且对递归网络和语言建模的支持很差。
2)基于层的网络结构,其扩展性不好,对于新增加的层,需要自己实现(forward, backward and gradient update)。
Caffe是领导Facebook AI平台工程的贾扬清的心血结晶。Caffe可能是第一个主流的行业级深度学习工具包,开创于2013年底。由于其优良的卷积模型,它是计算机视觉界最受欢迎的工具包之一,并在2014年获得了ImageNet挑战赛中获得胜利。Caffe在BSD 2-Clause开源许可后发布。
优点:
1) Google开源的其第二代深度学习技术——被使用在Google搜索、图像识别以及邮箱的深度学习框架。
2)是一个理想的RNN(递归神经网络)API和实现,TensorFlow使用了向量运算的符号图方法,使得新网络的指定变得相当容易,支持快速开发。
3)TF支持使用ARM/NEON指令实现model decoding。
4)TensorBoard是一个非常好用的网络结构可视化工具,对于分析训练网络非常有用。
5)编译过程比Theano快,它简单地把符号张量操作映射到已经编译好的函数调用。
缺点:
1) 缺点是速度慢,内存占用较大。(比如相对于Torch)
2)支持的层没有Torch和Theano丰富,特别是没有时间序列的卷积,且卷积也不支持动态输入尺寸,这些功能在NLP中非常有用。
当开源TensorFlow后,谷歌立即获得了大量的关注。TensorFlow支持广泛的功能,如图像、手写、语音识别、预测,以及自然语言处理。TensorFlow于2015年11月9日以Apache 2.0许可开源。
优点:
1)Facebook力推的深度学习框架,主要开发语言是C和Lua。
2)有较好的灵活性和速度。
3)它实现并且优化了基本的计算单元,使用者可以很简单地在此基础上实现自己的算法,不用浪费精力在计算优化上面。核心的计算单元使用C或者cuda做了很好的优化。在此基础之上,使用lua构建了常见的模型。
4)速度最快。
5)支持全面的卷积操作:
- 时间卷积:输入长度可变,而TF和Theano都不支持,对NLP非常有用。
- 3D卷积:Theano支持,TF不支持,对视频识别很有用。
缺点:
1)是接口为lua语言,需要一点时间来学习。
2)没有Python接口。
3)与Caffe一样,基于层的网络结构,其扩展性不好,对于新增加的层,需要自己实现(forward, backward and gradient update)。
4)RNN没有官方支持。
Torch由Facebook的Ronan Collobert和SoumithChintala、Twitter的Clement Farabet(现在在Nvidia),以及Google Deep Mind的KorayKavukcuoglu共同开发。Torch的主要贡献者是Facebook,Twitter和Nvidia。Torch获得BSD 3开源许可。然而,随着Facebook最新宣布其改变航向,使Caffe 2成为主要的深入学习框架,以便在移动设备上部署深入的学习。
Torch以Lua编程语言实现。 Lua不是主流语言,只有在你的员工熟练掌握之前,才会影响开发人员的整体效率。
Torch缺乏TensorFlow的分布式应用程序管理框架或者在MXNet或Deeplearning4J中支持YARN。缺乏大量的API编程语言也限制了开发人员。
优点:
1)2008年诞生于蒙特利尔理工学院,主要开发语言是Python。
2)Theano派生出了大量深度学习Python软件包,最著名的包括Blocks和Keras。
3)Theano的最大特点是非常的灵活,适合做学术研究的实验,且对递归网络和语言建模有较好的支持。
4)是第一个使用符号张量图描述模型的架构。
5)支持更多的平台。
6)在其上有可用的高级工具:Blocks, Keras等。
缺点:
1)编译过程慢,但同样采用符号张量图的TF无此问题。
2)import theano也很慢,它导入时有很多事要做。
3)作为开发者,很难进行改进,因为code base是Python,而C/CUDA代码被打包在Python字符串中。
Theano由蒙特利尔大学学习算法学院(MILA)积极维护。以Theano的创始人YoshuaBengio为首,该实验室拥有约30-40名教师和学生,是深度学习研究的重要贡献者。Theano支持快速开发高效的机器学习算法,并通过BSD许可发布。
Theano架构相当简单,整个代码库和接口是Python,其中C/CUDA代码被打包成Python字符串。对一个开发者来说这很难驾驭、调试和重构。
Theano开创了使用符号图来编程网络的趋势。Theano的符号API支持循环控制,即所谓的扫描,这使得实现RNN更容易、更高效。
Theano缺乏分布式应用程序管理框架,只支持一种编程开发语言。Theano是学术研究的一个很好的工具,在一个CPU上比TensorFlow更有效地运行。然而,在开发和支持大型分布式应用程序时,可能会遇到挑战。
Microsoft Cognitive Toolkit(CNTK)是一种深度神经网络,最初是为了提高语音识别而开发的。CNTK支持RNN和CNN类型的神经模型,使其成为处理图像、手写和语音识别问题的最佳候选。CNTK支持使用Python或C++编程接口的64位Linux和Windows操作系统,并根据MIT许可发布。
CNTK与TensorFlow和Theano的组成相似,其网络被指定为向量运算的符号图,如矩阵的加法/乘法或卷积。此外,像TensorFlow和Theano一样,CNTK允许构建网络层的细粒度。构建块(操作)的细粒度允许用户创造新的复合层类型,而不用低级语言实现(如Caffe)。
像Caffe一样,CNTK也是基于C++的、具有跨平台的CPU/GPU支持。 CNTK在Azure GPU Lab提供了最高效的分布式计算性能。目前,CNTK对ARM架构的缺乏支持,限制了其在移动设备上的功能。
除了上述列出的深度学习框架之外,还有一些框架在下面的列表中。
随着深度学习框架的不断成熟,将会出现TensorFlow,Caffe 2和MXNet之间的竞争是预料之中的。
参考链接:
Tensorflow、Caffe、Caffe2、MXNet、Torch……深度学习框架这么多,本文带你全攻略
https://chuansongme.com/n/1814252552354
MXNet专栏 | 李沐:为什么强大的MXNet一直火不起来?
https://baijiahao.baidu.com/s?id=1551119941115462&wfr=spider&for=pc
DL框架的未来发展,TensorFlow/MXNet/PyTorch, 选哪个?
https://www.zhihu.com/question/46587833