来源:大数据DT

作者:卢誉声

本文约2800字,建议阅读9分钟。

可以预见,深度学习在近年内都会是最流行、最有效的机器学习方法之一。

[ 导读 ]对深度学习做出巨大贡献的Yoshua Bengio,他与Yann Lecun和Geofrey Hinton等人在今年3月获得了图灵奖。近几年,深度学习技术的大爆炸式发展,除了理论方面的突破外,还有基础架构的突破,这些都奠定了深度学习繁荣发展的基础。

可以预见,深度学习不管是现在,还是在之后的一段时间内都会是最流行、最有效的机器学习方法之一。

00 深度学习的贡献

深度学习是一种思想、一种学习模式,深度神经网络是一类模型,两者在本质上是不一样的。但目前大家普遍将深度神经网络认为就是深度学习。

深度神经网络应用之前,传统的计算机视觉、语音识别方法是把特征提取和分类器设计分开来做,然后在应用时再合在一起。比如,如果输入的是一个摩托车图像的话,首先要有一个特征表达或者特征提取的过程,然后把表达出来的特征放到学习算法中进行分类学习。

因为手工设计特征需要大量的实践经验,需要对该领域和数据具有深入见解,并且在特征设计出来之后还需要大量的调试工作和一点运气。另一个难点在于,你不只需要手工设计特征,还要在此基础上有一个比较合适的分类器算法。如果想使特征设计与分类器设计两者合并且达到最优的效果,几乎是不可能完成的任务。

2012年后,深度神经网络给计算机视觉、语音识别、自然语言处理等领域带来了突破性的进展,特别是在人脸识别、机器翻译等领域应用的准确率接近甚至超过了人类的水平。深度神经网络如图1-1所示。

▲图1-1 深度神经网络示意图

深度神经网络最重要的是表示学习的能力,你把数据从一端扔进去,模型从另外一端就出来了,中间所有的特征完全可以通过学习自己来解决,而不再需要手工去设计特征了。

本文对现今和可预见的未来流行的深度学习框架进行介绍,如果你对这些框架有所了解,甚至实践过,那就再好不过了。如果你不了解这些框架或没有使用过,也不必过于担心,一起build from scratch。

01 TensorFlow

TensorFlow是一款基于Apache License 2.0协议开放源代码的软件库,用于进行高性能数值计算。借助其灵活的架构,用户可以轻松地将计算工作部署到多种平台(CPU、GPU、TPU)和设备(桌面设备、服务器集群、移动设备、边缘设备等)。

TensorFlow最初是由Google Brain团队中的研究人员和工程师开发的,可为机器学习和深度学习提供强力支持,并且其灵活的数值计算核心广泛应用于许多其他科学领域。

TensorFlow属于第2代人工智能系统,也是一个通用的机器学习框架,具有良好的灵活性和可移植性等优点。TensorFlow有非常好的伸缩性,同时支持模型并行与数据并行,可以在大规模集群上进行分布式训练。

与以Caffe为代表的第1代深度学习引擎不同,TensorFlow提供了自动微分功能,当添加新的层的时候我们无须自己计算并手写微分代码,极大地方便了网络的扩展。

此外,TensorFlow提供了非常多的语言接口,从C/C++、Python、Java甚至到现在的JavaScript,持的语言非常广泛,因此也非常受欢迎。

接下来我们详细介绍一下TensorFlow的计算模型

TensorFlow将完整的计算任务都抽象成一张图(graph),每个小的计算步骤是一个操作(operation),因此所有的计算任务就是一张由一个个小操作组成的图。

这样讲可能比较抽象,我们使用一个实际的TensorFlow Graph来说明这些概念,如图1-3所示。

图1-3代表了一系列的计算过程。我们先用constant操作定义一个常量,然后分成两条路,一条路先用add操作计算constant加1的结果,然后计算从外部读取一个数据ds1,和add的结果进行乘法,最后用avg操作求add和mul操作的平均值。

另一条路则是先使用mul操作将constant乘以2,然后从外部读取数据ds2,并和mul的结果做加法,然后将结果赋值给一个临时变量int_result。最后使用add操作将avg的结果和int_result相加,得到最后的结果。

▲图1-3 TensorFlow计算图示例

可以看到这个图1-3中有很多元素,比如我们将constant、add、mul称之为操作(operation)。操作是该图中的主要节点。除了操作以外还会有一些数据输入,比如ds1和ds2。我们还可以通过定义变量(variable)保存中间状态,比如int_result。

图中每一个节点负责处理一个张量(tensor)。张量是一个多维数组,表示数学里的多维向量。如果我们要处理一些平面上的散点,那么就可以将需要处理的数据看成一个二维向量(表示点的x和y),我们可以将整个数据处理过程看成Tensor在不同操作节点之间的流动(Flow),这也就是为什么该框架的名字叫作TensorFlow了。

使用TensorFlow的第一步就是将计算任务构造成一张图。但不能只描述计算过程,我们需要编写可执行的任务,因此需要创建一个会话(session)。会话的作用是建立一个执行上下文(context),所有的图都需要在会话中执行,会话会初始化并保存图中需要的变量、图的执行状态、管理执行图的设备(CPU和GPU)等。

所以我们可以看到,TensorFlow的结构很简单,只需要构建一张表示计算的图,并创建会话来执行图即可,TensorFlow帮我们隐藏了其他所有细节,因此我们可以不去关心计算的那些细枝末节。

02 TensorFlow Lite

TensorFlow是目前最完善和强大的深度学习框架,在工业界服务端深度学习领域已经是无可争辩的事实标准,但在移动平台和嵌入式领域中,TensorFlow就显得过于庞大而臃肿,而且计算速度并不能满足移动平台的要求。为了解决这个问题,Google开发了TensorFlow Lite,实现了TensorFlow到移动平台生态体系的延续。

TensorFlow Lite是一种用于设备端推断的开源深度学习框架,其目前是作为TensorFlow的一个模块发布,但我们需要知道TensorFlow Lite和TensorFlow几乎是两个独立的项目,两者之间基本没有共享代码。因此可以说TensorFlow Lite是一个完整而且独立的前向计算引擎框架。

使用TensorFlow Lite需要单独训练一些适用于移动平台的轻量级模型,减少参数数量,提升计算速度。与此同时,TensorFlow Lite还提供了模型转换工具,用于将TensorFlow的模型直接转换为TensorFlow Lite的模型,而且可以实现模型的压缩存储,还能实现模型参数的量化。这样就可以实现在服务器的TensorFlow上训练,在移动平台应用的场景。

此外,TesnorFlow Lite需要我们将其转换后的tflite文件打包到App或者目标存储设备中。TensorFlow Lite启动时会将其加载到移动设备或嵌入式设备中。

最后,TesnorFlow Lite对移动平台的前向计算进行了优化,可以加速浮点数运算,进行半精度浮点数运算,以及8位整数的量化计算,甚至可以通过代理方式在GPU上或者Android的NNAPI上调用。

03 MXNet

Apache MXNet是一个深度学习框架,主要目标是确保深度学习框架的灵活性与执行效率。它允许你混合符号和命令式编程,以最大限度地提高效率和生产力

MXNet的核心是一个动态依赖调度程序,可以动态地自动并行化符号和命令操作。最重要的图形优化层使符号执行更快,内存效率更高。MXNet便携且轻巧,可有效扩展到多个GPU和多台机器。

MXNet支持命令式和符号式两种编程模式,简单、易于上手,同时支持在多端运行,包括多CPU、多GPU、集群、服务器、工作站,甚至移动智能手机。和其他框架一样,MXNet也支持多语言接口,包括C++、Python、R、Scala、Julia、Matlab和JavaScript。

最后MXNet可以非常方便地部署到云端,包括Amazon S3、HDFS和Azure。不过这里值得一提的是,MXNet很好地支持了AWS SageMaker,能够借助一系列工具有针对性地(计算平台、体系结构、网络等)进行模型优化,并非常直接地在Core ML移动平台引擎上使用。

04 PyTorch

PyTorch是这里最年轻的深度学习框架,也是最近发展最为迅猛的研究用深度学习框架,因为其上手简单、灵活强大,如今Caffe2也正式并入PyTorch。使用PyTorch可以非常快速地验证研究思路而为广大研究人员喜爱。

PyTorch是一个以C/C++为核心实现,以Python为胶水语言,编写调用接口的框架。与TensorFlow一样,PyTorch利用Autograd模块自动计算导数,避免了复杂的手动求导。因此PyTorch非常适合深度学习。

编辑:黄继彦

入门大爆炸式发展的深度学习,你先要了解这4个最流行框架相关推荐

  1. 入门大爆炸式发展的深度学习,你先要了解这6个著名框架

    导读:近几年,深度学习技术的大爆炸式发展,除了理论方面的突破外,还有基础架构的突破,这些都奠定了深度学习繁荣发展的基础.本文将对其中涌现出的几个著名的深度学习平台进行简要介绍. 作者:魏溪含 涂铭 张 ...

  2. 深度学习入门笔记(九):深度学习数据处理

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

  3. 深度学习入门笔记(十七):深度学习的极限在哪?

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

  4. GMIS 2017 大会余凯演讲:深度学习引领驾驶革命

    GMIS 2017 大会余凯演讲:深度学习引领驾驶革命 2017-05-27 16:32:37    深度学习   创业公司   人工智能应用   自动驾驶    0 0 0 全球机器智能峰会(GMI ...

  5. 深度学习入门笔记(一):深度学习引言

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

  6. 疲劳驾驶样本集_无人驾驶技术入门(十六)| 初识深度学习之交通标志分类

    前言 在上两期的<无人驾驶技术入门>中,我以车道线检测为例,介绍了计算机视觉领域一些基本的算法.应用图像处理算法和调试算法阈值,就能实现车道线的检测和跟踪. 车道线检测.跟踪的项目,主要是 ...

  7. 我的机器学习入门之路(中)——深度学习(自然语言处理)

    继上一篇<我的机器学习入门之路(上)--传统机器学习>,这一篇博客主要记录深度学习(主要是自然语言处理)这一块内容的学习过程.以下均将自然语言处理简称NLP. 这一块内容的学习路线分为三部 ...

  8. 适合大一大二学生的深度学习实践项目汇总:涵盖图像处理、语音识别、自然语言处理等领域

    摘要:深度学习已经成为人工智能领域的核心技术,无论是图像处理.语音识别还是自然语言处理等多个领域,都有深度学习技术的身影.本文汇总了涉及多个领域的深度学习实践项目,希望能为您提供一个全面的参考,让您在 ...

  9. 何为非侵入式负荷分解-深度学习算法实现

    1 前言 做负荷分解的网络很多,本篇用contrib中的几个网络对AMPds数据集进行训练和测试.本篇内容较短.仅展示部分网络的代码和结果. 2 数据集 AMPds数据集所选电器见下表.电器选择原则如 ...

最新文章

  1. 小型音乐播放器插件APlayer.js的简单使用例子
  2. ASP.NET MVC中实现多个按钮提交的几种方法
  3. Linux - MiniFtp实现
  4. 电子商务时间戳服务解决方案
  5. Android自定义退出弹出框
  6. jquery $(document).ready() 与window.onload的区别
  7. Basic链表与队列的区别
  8. HDU - 4461 The Power of Xiangqi
  9. Binlog同步工具Canal部署使用
  10. 025 资源的隔离与配置
  11. 《四世同堂》金句摘抄(十三)
  12. 【转】ABP源码分析四十三:ZERO的本地化
  13. c# c均值聚类及DBSCAN聚类
  14. 从像素坐标到相机坐标_多视图几何基础——深入理解相机内外参数
  15. 详述一则数据库死锁故障的分析过程
  16. go语言net包rpc远程调用的使用
  17. C++::My Effective C++ (二)
  18. 斐讯K2一键刷华硕固件支持最新固件22.5.10.176
  19. QT开发的虚拟示波器代码分享
  20. OSChina 周六乱弹 —— 成功的解决了发现问题的人

热门文章

  1. 分布式熔断降级平台aegis
  2. TensorFlow实战笔记(17)---TFlearn
  3. 燃爆了!天猫联合天一广场搞事情,800万宁波人坐不住了
  4. 阿里云oss云存储图片上传在wangEditor富文本编辑器上的集成
  5. HTTP详解(1)-工作原理【转】
  6. .NET平台开源项目速览(2)Compare .NET Objects对象比较组件
  7. SIPp工具Linux下安装
  8. JFinal Extensions 2.0 发布,JFinal 扩展
  9. 第四组视频:在bash脚本中使用脚本选项
  10. python如何调用文件进行换位加密_数据文件加密算法–换位加密法 | 学步园