:::: MENU ::::

TalkingData's Blog

现在开始,用数据说话。

Posts Tagged / 深度学习

  • 十二 15 / 2017
  • 0
Tech

锐眼洞察 | TensorFlow在企业中的应用——深度学习生态概述 ③(翻译)

作者:Sean Murphy & Allen Leis

原文:Considering TensorFlow for the Enterprise

译者:TalkingData Heisatis

本译文禁止商用,转载请注明来源与译者!

导语:本文翻译自 O’Reilly 的一篇报告,介绍了 TensorFlow 在企业中的应用,对深度学习生态进行了概述。报告篇幅较长,译文将分为三篇发布,本文为第三篇

第一篇回顾:锐眼洞察 | TensorFlow在企业中的应用——深度学习生态概述 ①(翻译)

第二篇回顾:锐眼洞察 | TensorFlow在企业中的应用——深度学习生态概述 ②(翻译)

屏幕快照_2017-12-11_下午6.36_.00_.png

第三章:深度学习框架及生态系统探索

虽然令人印象深刻,但TensorFlow本身“仅仅”是一个使用数据流图进行数值计算的开源库。 如第2章所述,有许多开源竞争者可以用来构建,训练和运行复杂神经网络的推理; 未来甚至会出现更多。深度学习框架的生态系统是围绕着这个框架本身的,不仅由原作者创建,而且还由社区建立,在不断发展的空间中形成了一个长期的解决方案。 这是TensorFlow丰富而不断增长的生态系统,迫使许多人使用它。 对每个TensorFlow组件的详细使用将超出本报告的范围,但我们将努力介绍相关的部分,并提供一些更大的整体难题的视角。

Python是生态系统力量的一个很好的例子。该语言的卖点之一是其“能力内置”的理念; 它带有一个标准的库,使许多任务(如发出HTTP请求)变得简单。即使采用这种方法,Python也将其一些成功归功于其生态系统。 Numpy和Scipy图书馆为数字和科学计算奠定了坚实的基础,扩展了语言的核心功能和使用它的社区。像scikit-learn这样的库,几乎可以作为机器学习领域的算法的参考实现,而Pandas是基于Python的数据分析的事实标准,它们建立在Numpy和Scipy的基础之上,为了帮助Python争夺数据科学首选编程语言的宝座。像Enthought和Continuum Analytics这样的公司创建了Python的分发版本,其中包括许多外部依赖造成安装困难的关键库。这简化了Python的部署,拓宽了用户群体。 IPython Notebook已经发展成为Jupyter(Julia Python R)来支持Python以外的新语言。 Jupyter正在成为数据科学,深度学习和人工智能的标准IDE。支持基于Python的深度学习库,也不仅扩展了Python的生态系统,而且也因为这个生态系统而成为可能。

我们将TensorFlow生态系统划分为几个功能类别。 第一组通过使用TensorFlow设计,构建和训练神经网络更容易,从而增加了库的直接效用。 这方面的几个例子是预建的或预训练的深度神经网络,用于跟踪训练进度的图形界面(TensorBoard)以及TensorFlow(Keras)的更高级别API。 第二类包含可以预判行为并易于管理的工具。下一个类别是用于连接到其他流行的开源项目(如Hadoop、Spark、Docker和Kubernetes)并与之交互的组件。 最后一类是减少训练深度神经网络的时间和成本的技术,因为这通常是需要进一步发展的部分。

这个部分大致上遵循TensorFlow工作流程的三个阶段:(1)数据准备、(2)训练、(3)推理和模型服务。 我们不会把太多的精力放在准备用于TensorFlow的数据上;假设从其他类型的机器学习过渡到现在的企业已经有了清理,准备训练数据的机制。 图3-1显示了生态系统如何与整个工作流程保持一致。

3-1.png

图3-1 TensorFlow生态系统各个部分与整个工作流程之间的一致性

1. 改进网络设计和训练

以下工具和开源项目能够帮助软件工程师和数据科学家设计、构建和训练深度学习模型,力求为TensorFlow用户创造即时的价值。如果您是新手,我们建议您以相关的预建神经网络为出发点,然后仔细研究Keras,这可以简化复杂网络的创建并为模型提供一些便捷性。 如果您的应用程序涉及序列数据(文本、音频、时间序列等),请不要跳过Tensor2Tensor。 无论你的经验水平如何,期望你使用TensorBoard。

估计

TensorFlow为机器学习(tf.estimator)提供了一个更高级别的API。 它包含许多内置的模型——线性分类、线性回归、神经网络分类、神经网络回归以及组合模型,并支持更快速地配置、训练、预测和评估。

预建神经网络

深度神经网络设计仍然是一种学术追求和艺术形式。 为了加速DL的使用,TensorFlow附带了许多可供即时使用的示例神经网络。 在开始任何项目之前,请检查此目录以查看是否有可用的跳转启动。 特别值得一提的是Inception网络,这是一种卷积神经网络,在2014年的ImageNet大规模视觉识别挑战中,在分类和检测方面都表现出最好的效果。

Keras

Keras是一个用Python编写的高级API,专为人类在尽可能短的时间内构建和实验复杂的神经网络而设计。 您可以使用Keras作为TensorFlow的模型定义抽象层,也可以与其他TF相关的工具兼容。 有趣的是,Keras提供了一个将网络从一个深度学习库转移到另一个深度学习库的潜在可移植性途径,与实现标准模型抽象最接近。 目前它不仅能够在TensorFlow上运行,还能在Theano、Microsoft Cognitive Toolkit以及最近的MXNet上运行。 此外,Keras是Deeplearning4J的Python API。

用于TensorFlow的机器学习工具包

该工具包提供了开箱即用的高级机器学习算法(参见下面的列表),该算法受流行的scikit-learn库的启发,可立即使用,优于使用TF的低级API重写算法。

  • 神经网络(DNN,RNN,LSTM等)
  • 线性和逻辑回归
  • K-means聚类
  • 高斯混合模型
  • WALS矩阵分解
  • 支持向量机(L1和L2正则化)
  • 用于上下文优化的随机双重坐标上升
  • 随机森林
  • 决策树

重要的是,所有这些算法都具有分布式实现,并且可以并行执行跨机器,与非并行实现相比,性能显著提高。

Tensor2Tensor(T2T)

T2T是一个建立在TensorFlow之上的开源系统,用于支持最先进的深度学习网络的开发和训练,特别关注sequence-to-sequence模型(用于翻译文本或为图像提供说明)。这个在2017年发布的库正在被Google Brain团队积极使用、开发、维护和支持。 它还包括以下内容:

  • 许多包含不同类型的数据的数据集(文本,音频和图像)
  • 超参数配置
  • 最近的一些学术论文中的最佳模型,包括:

- “Attention Is All You Need”

– “Depthwise Separable Convolutions for Neural Machine Translation”

– “One Model to Learn Them All”

该软件的目标是提供比基本TensorFlow API更高的抽象级别,并将许多最佳实践和交易中的难学“技巧”封装到软件中,在所有软件之间实施标准化接口。

TensorBoard

机器学习通常很难形象化,神经网络一直被批评为黑盒子,几乎没有透明的内部工作。 深度网络图可能难以可视化。 很多图层中的数据流很难原位观察甚至后验。 从实践者的角度来看,了解和调试神经网络可能是非常困难的。

TensorBoard是一个可视化工具的集合,提供对TensorFlow图形的洞察,并允许开发人员或分析人员了解、调试和优化网络。 这些工具的用户界面是基于浏览器的。 它提供了三个核心功能:

图表结构的可视化

理解一个神经网络的第一步,可以由几十层,几十万个节点或更多的网络组成,从视觉上检查和验证网络的结构。

摘要的可视化

TensorBoard允许您附加总结,以捕获在训练和执行过程中流过图表的各种张量。 这些张量可以表示输入数据或网络权重,直方图显示网络权重或网络中其他张量如何随时间变化。

嵌入式可视化器

TensorBoard还允许您在三维界面中显示机器学习结果。

通用的功能是很方便使用的,例如学习期间的图表汇总统计。 您还可以深入了解特定图层的输出以运行您自己的分析。 这使得可以在这些值作为下一层的输入之前审查来自一层的输出分布。 TensorBoard读取序列化的TensorFlow事件数据。 尽管某些功能和可视化功能是在没有设置的情况下自动提供的,但其他功能和可视化功能需要更改代码才能捕捉要显示的数据,并且您可以选择收集摘要信息的节点或对象。

谷歌有持续的TensorBoard发展的大目标。 首先,TensorFlow调试器将与TensorBoard集成在一起,以便您可以通过此工具可视化调试信息。 接下来,TensorBoard即将支持允许复杂和定制可视化的插件,这些插件可用于在各种问题领域中查询具有独特可视化需求的特定神经网络类型。 最后,Google计划发布一个“组织级”的TensorBoard,不仅为个人而且为团队设计,以便结果可以迅速传播,共享的发展历史可以继续保持。

TensorFlow调试器

TensorFlow带有一个专门的调试器(tfdbg),它可以在通过TensorFlow图形进行训练和推理时自动检测任何数据。 TensorFlow(tdb)有一个有趣的第三方开源调试器,具有强大的可视化功能。 这被作者描述为:“TDB之于TensorBoard,就像GDB之于printf。 两者在不同的情况下都是有用的。”然而,作者Eric Jang显然是被Google Brain聘用的,外部的努力已经被放弃了。

2. 部署网络用于预测

由于需要大量的计算需求,深度学习训练通常会承担大部分压力。 但是,如果没有人使用深度神经网络,那么最新的深度神经网络是没有价值的。 以强大、可扩展和高效的方式提供预测功能对于深度学习库和生态系统的成功至关重要。

TensorFlow Serving

训练结束后,企业将面临如何运行深度学习网络和机器学习模型的决策。 将会有一些用例,例如在研究、实验或者异步预测/分类活动中,交互性是不需要的。 然而,在许多情况下,企业将希望为面向用户的应用程序提供实时预测(如移动应用程序中的对象检测,例如HBO硅谷的“Not Hotdog”应用程序),人为决策支持或自动化指挥和控制系统;这就要求将先前训练过的网络投入生产进行预测。

部署机器学习模型带来的需求在设计生产系统方面打开了潘多拉盒子。 我们如何提供最高水平的表现? 如果我们需要为不同的操作公开多个模型呢? 我们如何管理部署过程或处理多个模型版本的配置管理?

TensorFlow Serving提供了一个面向生产的高性能系统来解决这个模型部署的问题;它托管TensorFlow模型并允许远程访问它们以满足客户端请求。 重要的是,所提供的模型是可版本化的,使得用新的权重或迭代更新网络变得容易,同时维护独立的研究和生产分支。 您无法通过浏览器发出HTTP请求来与TensorFlow服务进行通信。 相反,构建在C++上的性能的服务器实现了gRPC接口。 gRPC是Google的远程过程调用框架,旨在以可扩展的方式高效地连接数据中心内的服务。 因此,需要建立一个客户端来与服务器通信。 深度学习和机器学习模型必须以Google的protobuf格式保存。 TensorFlow服务可以在CloudML中或通过使用Docker / Kubernetes进行(自动)扩展。

进程内服务

在某些情况下,组织可能不想部署TensorFlow Serving或不能使用TensorFlow Serving RPC服务器来为模型提供服务。在这些情况下,通过在应用程序中包含核心TensorFlow库,您仍然可以直接使用保存的模型。进程内服务提供了一种非常轻量级的机制来提供预测功能,但TensorFlow Serving所提供的好处却没有,比如自动请求批处理或模型版本控制。

举个例子,我们来考虑一个用Python库Flask构建的基本网站。该网站将允许用户使用深度卷积神经网络来上传图像并识别图像内的对象。从我们的角度来看,有趣的部分发生在用户上传照片之后,并且经过训练的卷积神经网络被加载之后。一旦收到照片,Flask服务器将显示网络输入照片,执行预测,并返回结果。所有的预测能力都将由TensorFlow库提供,这些库很容易被基于Flask的Web服务器调用。类似的方式也可以用在移动设备上(请参阅http://tensorflow.org/mobile)

3. 与其他系统集成

企业正在考虑采用的新技术的一个重要方面是如何适应现有的企业基础架构。 尽管当今的大数据格局非常拥挤和复杂,但是有一些明显的技术在许多行业的大数据栈中发挥作用。

数据摄取选项

深度学习的关键是大量的数据,必须清理、调整,然后用于训练神经网络。为了达到这个目的,数据集是必须事先准备的。 幸运的是,我们有很多选择。 首先,TensorFlow支持在TFRecords中的协议缓冲区上建立自己的本地TensorFlow格式(tf.Example和tf.SequenceExample)。 请注意,Apache Beam对TFRecords有本地支持。 其次,稍微慢一些,TensorFlow内置了读取JSON,逗号分隔值(CSV)和Avro数据文件的功能。 最后,最终用户可以使用Python来读取数据,包括Pandas数据表中的数据。 因为最后一个选项最慢,所以最好进行测试和实验。 最后,TensorFlow支持几种不同的分布式存储选项,包括Apache Hadoop HDFS、Google Cloud Storage和Amazon Elastic File System。

TensorFlowOnSpark

雅虎非常友好地开放源代码,允许分布式TensorFlow训练和预测运行在为Apache Spark构建的集群上。 从企业角度来看,这可能非常强大,因为许多希望使用TensorFlow的公司可能已经在使用Spark进行数据分析和机器学习 。 因此,组织可以重新使用现有的集群资产,而不是单独设置单独的基础设施来进行深入学习,从而使转换变得更加容易。 此外,这可以减轻将数据从一个集群转移到另一个集群的需求——这是常常一个痛苦且耗时的过程。

从策略的角度来看,TensorFlowOnSpark与TensorBoard兼容,甚至在集群设置训练期间配置Spark执行器来运行Tensorboard。 该API是最小的,使其快速学习和使用,只需要很少的变化便能通过现有的TensorFlow代码运行。

TensorFlowOnSpark提供了三个方面的手段:

  • 在spark中启动/配置TensorFlow群集
  • 通过将Spark的弹性分布式数据集(RDD)转换为feed_dict将数据馈送到TensforFlow图
  • 完成后关闭TensorFlow群集

为了最大限度地利用Spark,你需要运行TensorFlow程序,这个程序将完全饱和资源;否则,性能不会像任何分布式应用那样线性扩展。 在缺点方面,TensorFlowOnSpark并不完全符合所有的社区项目(如Keras)。 此外,在Java虚拟机(JVM)中运行的Spark可能会在失败时提供一些相对难以理解的错误消息。 无论如何,如果您的企业已经在使用Spark群集,这可能是运行分布式TensorFlow进行训练的最简单方法。

“Ecosystem” Repo

“Ecosystem” Repo是Google公司在GitHub上的一个Apache 2.0许可的开放源代码存储库,其中包含将TensorFlow与众多开源软件集成在一起的示例:

Docker:

Dockerfiles中的一组示例,用于构建具有各种TensorFlow配置的容器。

Kubernetes:

用于在Kubernetes上运行分布式TensorFlow的YAML模板文件。

Marathon (on top of Mesos):

在Marathon中运行的TensorFlow的配置文件,Mesos的容器流程,它是一个集群管理器。

Hadoop:

使用TRRecords格式实现Apache Hadoop MapReduce的InputFormat / OutputFormat。

Spark-tensorflow-connector:

用于读取和写入Spark 2.0+ SQL DataFrame中的TensorFlow记录(TFRecords)的库。

考虑“生态系统”回购的一个起点,探索如何将TensorFlow与其他软件集成在一起。

4. 加速训练和预测

训练深度神经网络需要大量的计算能力,通常超过了通用微处理器集群可以提供的功能。 然而,随着深度学习的价值越来越明显,寻求更高性能的硬件变得至关重要。 GPU很快就被用于这个任务,后来,为这个用例专门设计的定制硬件也在开发中。 需要注意的是,如果没有足够的训练数据和足够的计算能力,深度学习将是无关紧要的,并且如今也不会取得的如此令人印象深刻的成功。

GPU和CUDA

使用图形处理单元(GPU)以大规模并行方式执行浮点计算已经引起了近二十年来重视性能的程序员的兴趣。 实际上,GPU上的通用计算(GPGPU)这个术语是在2002年创造的。NVIDIA一直是这个用例的一个长期推动者,并为公司的GPU开发了其专有的计算统一设备架构(CUDA)作为并行计算平台和编程模型。

训练深度学习网络已经成为这个领域的杀手级应用,NVIDIA借助NVIDIA深度学习软件开发套件(NVIDIA Deep Learning Software Development Kit)增强了其CUDA产品,该套件包含一个GPU加速的神经网络(称为cuDNN)所需的关键原语库。训练深度网络,与英特尔最快的CPU相比,使用NVIDIA提供的最快的GPU可以提供10到100倍的加速。

张量处理单元

在2016年5月世界了解Google IO的谷歌张量处理单元(TPU)之前,GPU被用于加速深度神经网络的基准。第一代TPU于2016年5月在Google I / O会议上宣布, 加速预测工作量(不是训练)使用量化的整数算术,而不是浮点。 第一个第一代TPU的优秀技术概况在网上发布,过去一年中提供了一篇非常全面的技术文章,可在线获得。重要的是,这个第一代TPU已经在Google的数据中心 一年多的时间,并帮助谷歌的AlphaGo赢下了世界冠军李世乭。

第二代TPU于2017年发布,可进行预测和训练,并进行浮点运算。 每个单独的处理器提供45 teraflops的性能,并被安排到一个四芯片,180 个teraflop的设备。 64个这样的设备组装成一个容器,提供了11.5千万亿次的深度学习性能。对于任何面向服务器的处理器来说,这两个芯片的关键在于它们不仅提供令人印象深刻的浮点性能,而且 比传统处理器消耗更少的电力。

为什么这对企业来说很重要? 因为TPU降低了模型训练所需的成本和时间。 尽管Google没有出售TPU的计划,但通过Google的云产品可以提供这种功能。 此外,考虑到公司控制整个堆栈,Google有一些有趣的选择可以在软件和硬件上进行优化。 Google并不是这个领域唯一的公司。 英特尔于2016年8月收购了一家定制芯片加速深度学习的小公司Nervana。

Google Cloud TPU和CloudML

Cloud TPU是目前提供alpha版本的Google Cloud服务,使用户能够使用第二代TPU对机器学习模型进行训练和预测。 您可以使用标准虚拟机和自定义虚拟机类型连接到Cloud TPU,该产品还与其他Google云端平台产品(包括Google Compute Engine和BigQuery)完全集成。这是企业利用Google TPU的最直接方式。Google还通过云计算机学习引擎(Cloud ML)的一些功能间接公开TPU。

5. 本章小结

对于任何采用深度学习的企业来说,面临的问题是如何融入组织现有的工作流程和数据通道。 TensorFlow数据流水线由三个阶段组成:(1)数据准备、(2)模型训练、(3)模型服务和预测。 这三个都直接从TensorFlow库和新兴的生态系统获得了大量的支持。 这个数据流水线与企业中的传统机器学习流水线非常相似,但有一个显着的区别。 对于深度学习模式,模型训练会花费更多的时间和资源。 生态系统试图通过支持多个GPU甚至Google自己的TPU来弥补这种情况。

参考资料:

  • Christian Szegedy, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott E. Reed, Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke, and Andrew Rabinovich, “Going Deeper with Convolutions”, Computer Vision and Pattern Recognition (2015).
  • N.P. Jouppi et al., “In-Datacenter Performance Analysis of a Tensor Processing Unit”, Proceedings of the 44th Annual International Symposium on Computer Architecture (June 2017): 1-12.
  • Patrick Kennedy, “Google Cloud TPU Details Revealed,” STH, May 17, 2017, https:// www.servethehome.com/google-cloud-tpu-details-revealed/.
  • Cloud TPUs – ML accelerators for TensorFlow | Google Cloud Platform.

结论

本报告试图介绍深度学习,以及它的使用和使用TensorFlow的企业会遇到的核心问题。我们首先介绍了深度学习的情况,特别是与更传统的机器学习技术相比较,并且盘点了一些使用了深度学习技术的最新应用。如果您的组织对使用音频、视频、图像或自由文本数据感兴趣,深入学习是值得探索的。接下来,我们盘点了深度学习的各种框架,特别关注以企业为中心的库,包括微软的Cognitive Toolkit、MXNet和Deeplearning4J。最后,我们讨论了TensorFlow库和现有的生态系统,以了解各种组件如何补充图书馆的核心功能,并协助网络训练和预测。我们希望这个概述能够帮助企业内的决策者和技术领导者驾驭不断发展的深度学习世界。

关于作者

Sean Murphy是PingThings Inc.的联合首席执行官,这是一家以人工智能为核心的创业公司,将先进的数据科学和机器学习带入全国的电网。在获得马里兰大学数学与电子工程双学士学位后,Sean在约翰·霍普金斯大学(Johns Hopkins University)的生物医学工程专业毕业,获得荣誉学位。他在约翰霍普金斯大学应用物理实验室担任高级科学家十多年,主要从事机器学习、高性能、云计算、图像分析和异常检测。从科学转向MBA课程,他毕业于牛津大学。他利用自己的商业头脑创建了一家电子邮件分析公司和一家数据科学咨询公司。 Sean还曾担任A系列资助的医疗保健分析公司的首席数据科学家,以及精品研究生教育公司Manhattan Prep的研究和指导主任。他是多个学术领域的多本书和数十篇论文的作者。

Allen Leis是一位经验丰富的数据工程师,有时也是一名数据科学家,位于华盛顿。他以前的工作需要为美国海军、美国参议院和非营利组织开发网络系统,他目前致力于数据分析的技术“狂野西部”以及机器学习。 Allen目前担任各种数据科学初创公司的顾问和软件工程师,以引导他们的数据摄入、清洗和机器学习。 除了投身于解决大数据工程和分布式计算问题,他平常会参与乔治敦大学数据科学证书课程的教学,或沉迷于马里兰大学计算机科学研究生的课程。

(全文完,感谢阅读)

  • 十二 15 / 2017
  • 0
Tech

锐眼洞察 | TensorFlow在企业中的应用——深度学习生态概述 ②(翻译)

作者:Sean Murphy & Allen Leis

原文:Considering TensorFlow for the Enterprise

译者:TalkingData Heisatis

本译文禁止商用,转载请注明来源与译者!

导语:本文翻译自 O’Reilly 的一篇报告,介绍了 TensorFlow 在企业中的应用,对深度学习生态进行了概述。报告篇幅较长,译文将分为三篇发布,本文为第二篇

第一篇回顾:锐眼洞察 | TensorFlow在企业中的应用——深度学习生态概述 ①(翻译)

屏幕快照_2017-12-11_下午6.36_.00_.png

第二章:选择一个深度学习框架

当决定采用深度学习时,第一个问题就是你应该选择哪个深度学习库(以及为什么)?深度学习已经成为许多大型科技公司的重要差异化因素,每一个都已经发展或正在倡导一个特定的选择。如谷歌的TensorFlow,微软的认知工具包(又名CNTK)。亚马逊正在支持学术界建造的MXNet,这导致有人质疑其内部开发的DSSTNE(Deep Scalable Sparse Tensor Network Engineer)的寿命。百度拥有并列分布式深度学习(PADDLE)库。 Facebook有Torch和PyTorch。英特尔拥有BigD等等。毫无疑问未来还会有更多选择出现。

我们可以对各种深度学习库进行评估,包括性能,支持的神经网络类型,易用性,支持的编程语言,作者,社区的支持等等。为了提高竞争力,每个库应该支持使用图形处理单元(GPU),最好是多个GPU和分布式计算集群。表2-1总结了十几种可用的顶级开源深度学习库。

图2-1.png

表2-1 12个选定深度学习框架的一般信息和GitHub统计信息(每个适用列中的“最佳”值以粗体突出显示)

支持的编程语言

几乎所有表内列出的框架都是用C ++实现的(可以使用Nvidia的CUDA进行GPU加速),但是在Lua中有后端的Torch和为Java虚拟机(JVM)写了后端的Deeplearning4J。使用这些框架的一个重要问题是他们支持哪些编程语言进行魔性训练,允许神经网络从数据中学习并更新内部权重的计算密集型任务,以及支持哪种语言进行推断,通过之前训练得到模型和新数据获得预测值。

由于推断是生产中比较常见的任务,人们可能会争辩说,库支持推理的语言越多,插入现有企业基础架构就越容易。一般来说训练过程需要专业技术,支持的语言可能会比较有限。理想情况下,一个框架需要可以支持这两个任务的同一套语言。

不同类型的网络

有许多不同类型的神经网络,学术界和工业界的研究人员几乎每天都在开发具有相应新缩写词的新网络类型。例如前馈网络、全连接网络、卷积神经网络(CNN)、受限玻耳兹曼机器(RBM)、深度信念网络(DBN)、自动去噪编码器、堆叠去噪自动编码器、生成对抗网络(GAN) 、循环神经网络(RNN)等等。如果要用图形或列表来表示不同的神经网络类型/结构,神经网络俱乐部是一种初步的选择。

已经受到广泛关注的两种网络类型是卷积神经网络,其能够处理图像作为输入,以及可以处理时序数据的循环神经网络及其变体(例如LSTM),支持将句子中的文本、时间序列数据、音频流等等作为输入。企业选择的深度学习库应该支持最广泛的网络,至少需要尽量与业务需求相关。

部署和操作选项

尽管机器学习和深度学习通常需要大量的训练数据,但深度学习确实预示着从大数据向大型计算的过渡。 对于企业来说,这可能是最大的问题和潜在的障碍,从更传统的机器学习技术过渡到深度学习。训练大规模的神经网络可能需要几周甚至几个月的时间;因此即使是50%的性能增益也能带来巨大的收益。 为了使这个过程变得可行,训练网络需要大量的原始计算能力,这些计算能力通常以一个到多个GPU,或专用处理器的形式出现。 理想情况下,一个框架将支持单CPU、多CPU、GPU环境以及他们的异构组合。

无障碍的帮助

提供帮助的程度对于库的实用性和成功性而言是非常重要的组成部分。 文档量是衡量平台是否成功(及其潜在寿命)的有力指标。大量的文档促使用户容易选择和使用库。 随着生态系统的不断发展,在线教程、电子书籍和在线图书、视频、在线和离线课程,甚至会议等多种形式的文档都是需要的。特别要注意的是企业商业支持的问题。尽管上述所有库都是开源的,但只有一个库提供直接的商业支持:Deeplearning4J。 第三方很可能会更愿意提供咨询服务来支持每个库的使用。

1. 企业级的深度学习

从十几个深度学习框架中进行选择,我们对其中四个更适合企业生产环境部署的库进行了深入研究:TensorFlow、MXNet、Microsoft Cognitive Toolkit和Deeplearning4J。 为了大致估算受欢迎程度,图2-1显示了按Google搜索量衡量的搜索词相对全球范围内的兴趣。

图2-2.png

图2-1 在深度学习开源框架中,全球搜索“随时间推移的兴趣” 最大相对值(100)出现在在2017年5月14日这周

TensorFlow

Google在处理大规模数据方面有着丰富的历史经验,运用机器学习和深度学习为消费者和企业创造有价值的服务。 当Google发布开源软件时,业界都会比较关注,特别是有新版本发布时。 2011年,Google内部使用名为DistBelief的系统进行深度学习,该系统能够使用“大规模机器集群在深度网络中分发训练和推理”。凭借多年运营这个平台的经验, Google最终于2015年11月发布了 TensorFlow。

TensorFlow是用于表达机器学习算法的界面,以及用于执行这种算法的实现。 使用TensorFlow表达的计算可以在各种各样的异构系统上执行,从移动设备(例如手机和平板电脑)到大型分布式系统(数百台机器)以及数千个计算设备(如GPU)。 该系统是灵活的,可以用来表达各种各样的算法,包括深度神经网络模型的训练和推理算法,它已经被应用在十几个计算机科学等研究领域,进行机器学习系统部署和投产, 例如语音识别,计算机视觉,机器人学,信息检索,自然语言处理,地理信息提取和计算药物成分等。

有些人认为这是一个赢家通吃的领域,可以说TensorFlow已经赢得了开发者的心。 虽然这个声明可能还为时过早,但TensorFlow目前拥有令人印象深刻的源动力。 几乎所有的指标都显示,TensorFlow都是深度学习领域最活跃的开源项目。 现在已经产生了相当多有关TensorFlow的书籍和高端会议。以Google搜索量衡量,已经获得了全球范围内广泛的关注和兴趣,并且具有最多的有关活动聚会。 对竞争对手来说,这种领先将很难被超越。

MXNet

MXNet是我们将深入研究的最新的深度学习框架。 它于2017年1月进入Apache孵化,截至2017年10月的最新版本是目前已经发布 1.0 正式版。 问题是,由于其比较新而且竞争对手很强大,企业是否应该考虑到这种替代性的深度学习框架呢? 亚马逊在2016年11月宣布:“Apache MXNet是AWS 选择的深度学习框架”。 MXNet背后的创始机构之一,卡内基梅隆大学和CMU机器学习系教授Alexander Smola博士,2017年7月加入亚马逊可能并非巧合。

为了进一步证明MXNet 的竞争力,最新的框架版本允许开发人员将MXNet深度学习模型转换为Apple的CoreML格式,这意味着数十亿iOS设备现在可以为使用MXNet的应用程序提供推理功能。 另外请注意,苹果公司是与上述任何一个深度学习框架都没有关联的大型科技公司。

什么是MXNet,它是如何改进现有的库的?

MXNet是一个多语言机器学习库,用于简化机器学习算法的开发,特别是深度神经网络。 嵌入在宿主语言中,它将声明性符号表达式与命令张量计算相结合。它提供了自动分化来推导梯度。 MXNet具有计算和内存的高效性,可运行在各种异构系统上,从移动设备到分布式GPU集群。

MXNet是由许多顶尖大学(包括CMU,麻省理工学院,斯坦福大学,纽约大学,华盛顿大学和阿尔伯塔大学)合作而成的。从其最近的开发情况看,作者有机会已有的深度学习框架中学习并改进。 框架努力提供灵活性能。 开发人员可以混合使用符号和命令式编程模型,并且可以通过动态依赖调度程序来并行化两者。 开发人员还可以利用预定义的神经网络层来构建复杂的网络,代码很少。 重要的是,MXNet远不止支持Python。 它也具有完整的Scala、R、Julia,C ++、甚至Perl的API。 最后,MXNet代码库很小,专为在GPU和CPU上进行高效扩展而设计。

微软认知工具包(CNTK)

尽管互联网崛起,微软仍然是企业领域的主要厂商之一。 因此,微软研究院推出深度学习框架应该是不足为奇的。 以前称为“计算神经工具包”(CNTK),该工具包显然是从微软研究院的世界级语音识别团队中涌现出来的,然后推广到其他问题集。 2014年出现了第一篇综合报告,2016年1月在Github上发布了该软件。2016年,该软件在会话语音识别领域取得了人类的表现。 与竞争对手相比,该工具包有望实现高效的可扩展性和令人印象深刻的性能。

Deeplearning4J

Deeplearning4J在这个列表中有些奇怪的框架。 尽管Python已经成为深度学习的近乎事实上的首选语言,但Deeplearning4J是在Java中开发的,旨在使用JVM并与基于JVM的语言(如Scala、Clojure、Groovy、Kotlin和JRuby)兼容。 请注意,底层计算采用C / C ++和CUDA编码。 这也意味着Deeplearning4J可以同时支持Hadoop和Spark。 其次,许多早期的深度学习框架是由学术界出现的,而第二波则是由大型科技公司兴起的。 Deeplearning4J是不同的,因为它是由一个位于旧金山的小型科技创业公司(Skymind)在2014年创建的。尽管Deeplearning4J是开源的,但还是有一家公司愿意为使用该框架的客户提供付费支持。

2. 行业观点

Jet.com提供了深度学习库选择的一个有趣的例子。 Jet.com是一家从上到下采用微软技术栈的公司,是美国为数不多的专注于F#编程语言的商店之一(他们也使用C#和.NET框架)。 对于云服务,该公司使用Microsoft Azure。 尽管重度依赖微软,Jet.com还是使用TensorFlow进行深度学习。 该公司最初是从Theano开始的,但在TensorFlow 发布之后迅速转换到了TensorFlow。

TensorFlow运行在具有在Microsoft Azure云中运行的GPU的虚拟实例上。

作为一家技术创业公司,PingThings在选择不同的技术方面有很大的余地。 Google在这个领域的突出地位以及大量的文档和教程都是选择TensorFlow的强大动力。 然而,PingThings正在与国家科学基金会(NSF)和高级研究计划署能源(ARPA-E)资助的项目与多个研究机构的合作者合作,同时在公用事业部门内部署硬件。 因此,Google设计TensorFlow来平衡研究和大规模运营的需求是非常重要的事实。 Tensor2Tensor(我们稍后讨论的生态系统的一部分)特别吸引人,因为它专注于序列数据。 MXNet是一个有趣的新选项,未来的发展将受到关注,特别是考虑到其卓越的性能和亚马逊的支持。

3. 本章小结

TensorFlow做得非常好:有竞争力的性能,对不同神经网络类型的强大支持,大量的硬件部署选项,支持多GPU、多种编程语言选项等等。然而,库的魅力超越了这个功能集。Google通过分布式文件系统和Map-Reduce计算框架的结合,在帮助启动大数据革命方面发挥了重要作用,并在今天继续领跑业界。 此外,谷歌内部有许多成功的技术迭代,然后看到广泛的发布。受欢迎的容器编排系统Kubernetes就是这样一个例子,它是早期内部系统(如Borg和Omega)的多年经验和教训的结果。谷歌在网络技术和软件工程方面的推进规模,学术界和工业界之间的平衡,似乎特别适合于深度学习的淘金热。

TensorFlow继承了这种合理性,目的是充分灵活地进行深入的研究,同时也足够强大,以允许其模型的生产部署。未来可能会出现更新的框架,可以借鉴TensorFlow的经验教训,改进库的各个方面,提供多种编程方法,或提供更高的性能。上述许多库都试图做一个或多个这样的事情。 然而,TensorFlow正在不断应用这些教训,努力提高性能并探索新的方法。 只要Google的重量和努力落在TensorFlow后面,它将继续成为深度学习库的一个强大、安全、实际上默认的选择,特别是考虑到我们在第3章中描述的生态系统。

参考资料:

  1. J. Dean et al., “Large Scale Distributed Deep Networks,” Advances in Neural Information Processing Systems 25 (2012).
  2. M. Abadi, A. Agarwal, P. Barham, E. Brevdo, Z. Chen, C. Citro, G.S. Corrado et al., “TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems”, preliminary white paper (2015).
  3. T. Chen et al., “MXNet: A Flexible and Efficient Machine Learning Library for Hetero‐ geneous Distributed Systems”, NIPS Machine Learning Systems Workshop (2016).
  4. A. Agarwal et al. (2014). “An Introduction to Computational Networks and the Com‐ putational Network Toolkit”, Microsoft Technical Report MSR-TR-2014-112 (2014).

(未完待续)

  • 十二 13 / 2017
  • 0
Tech

锐眼洞察 | TensorFlow在企业中的应用 ——深度学习生态概述 ①(翻译)

作者:Sean Murphy & Allen Leis

原文:Considering TensorFlow for the Enterprise

译者:TalkingData Heisatis

本译文禁止商用,转载请注明来源与译者!

导语:本文翻译自 O’Reilly 的一篇报告,介绍了 TensorFlow 在企业中的应用,对深度学习生态进行了概述。报告篇幅较长,译文将分为三篇发布,本文为第一篇

屏幕快照_2017-12-11_下午6.36_.00_.png

简介

很多企业考虑在自己的业务场景中应用通常所说的深度学习特别是TensorFlow框架,本报告就从这些企业的角度分析TensorFlow深度学习框架及其生态系统。许多企业对深度学习不是很感冒,而是将技术视为对现有数据分析流水线的扩充或替换。 我们发现,使用深度学习的决定引发了复合决策的分支连锁反应。 在考虑这个转变时,我们强调这些分支,并提供可用的选项,希望为考虑旅程的人们指明方向。 更具体地说,我们考察采用深度学习的潜在理由,研究各种可用的深度学习框架,最后从特定方面分析TensorFlow及深度学习生态。

由于TensorFlow的流行,这个框架不乏教程、报告、概述、演练,甚至还有书籍(如O’Reilly自己的Learning TensorFlow或TensorFlow深度学习)。 我们不会深入研究神经网络的基础知识、线性代数、神经元类型、深度学习网络类型,甚至如何用TensorFlow来启动和运行。本报告旨在帮助企业学习和决策。

我们从高层观点和两个不同的企业角度提供这些信息。其中一个观点来自与沃尔玛有限公司(Walmart,Inc.)2016年秋季收购的大型网上购物平台Jet.com的关键技术人员的讨论Jet.com使用深度学习和TensorFlow来改进目前由其他算法实现的诸多工作。第二个来自工业物联网(IIoT)创业公司PingThings,它将包括机器学习和人工智能(AI)在内的以时间序列为中心的数据平台,从发电到电力分配。虽然PingThings是一家创业公司,但公司与来自电网传输和分配部分的传感器的流式时间序列数据交互。这需要与公共事务部门、大型的传统企业进行广泛的合作;因此,PingThings面临着一家大公司相应的信息技术关注和需求。

第一章:选择使用深度学习

在采用深度学习这项新技术之前,企业首先需要明确的问题是,什么是深度学习?为什么要用这项技术?对于第一个问题,微软研究院李登做出了如下简要回答:

深度学习是一类机器学习技术,从2006年开始大量开发,其分层体系结构中的非线性信息处理的许多阶段被用于模式识别和特征学习。

术语“深度”是指网络中隐藏层的数量,通常大于一些相对较少的数目(例如5或7)。

我们不纠结于这个问题,因为有很多关于深度学习的书籍和文章可以参考。 但是,第二个问题仍然存在:如果现有的数据科学手段已经不但有效而且具备相当的操作性,为什么要费时费力,并且消耗组织资源来进行实现这项技术转换。

1. 一般原理

从一般角度来看,投资深度学习有很大的理由。真正的技术革命,即影响社会多个部分的革命,都是通过从根本上改变特定能力或任务的成本曲线来实现。以传统的微处理器为例,在计算机出现之前,执行数学计算(加法、乘法、平方根等)对于人们来说是昂贵且耗时的。随着数字计算机的出现,算术成本急剧下降,这产生了两个重要影响。第一,所有依靠计算的东西,最终都会被降低成本并广泛使用。第二,许多以前限制问题解决方案的的假设不再有效(一个关键的假设就是数学计算成本很高)。出现了很多新机会,用曾经被认为不可能或财务上不可行的新方法来回顾旧问题。因此,计算机的普及让许多问题可以被重新定义为数学问题

可以说这种由深度学习所代表的“人工智能”的最新浪潮是技术上的一个阶段性变化。人工智能并不是永远改变计算的成本,而是不可逆转地降低了做出预测的成本。由于预测的成本下降以及预测的准确性提高,基于预测的商品和服务的价格会下降(同时质量可能会提高)。 一些现代服务,如天气预报,显然是基于预测。 其他如企业物流和运营等将继续沿着这个方向发展。 亚马逊根据本地客户下周订单确定本地仓库库存的能力将不再是例外,而是新常态。

此外,其他问题也将转化为预测问题。 拿自动驾驶汽车这个非常不受约束的问题来说吧。软件需要考虑的路况情况数几乎是无限的,并且永远不能在软件中明确列举。 然而,如果把问题重新定义为预测人类驾驶员在特定情况下会做什么,那么这一挑战性的问题就更容易处理。根据当今企业运营对预测的依赖程度,无论企业的实力依赖于企业内部还是外部,深度学习都将成为下一代成功企业的推动因素。

2. 特定的激励措施

采用深度学习可以提供显著的优势。深度学习和人工智能这么受关注,是因为它们可以提供可重复的优秀结果。深度学习是机器学习的一个子集,也可以被认为是AI的一个子集(图1-1)。

图1-1.png

图1-1 时变维恩图:人工智能,机器学习和深度学习间的关系

基于深度学习的解决方案不仅在某些任务中的性能超过了其他机器学习技术,与人类的能力相近,甚至在某些情况下超过了人的能力。例如,我们来看看自动机器翻译(从一种语言到另一种语言的文本翻译)性能改进的意义。早期,这种类型的软件比较新颖的,只在有限的少数情况下可能有用。随着翻译准确性的提高,翻译的经济性开始发生变化,适合自动翻译的案例也随之增多。由于翻译的准确性接近人工翻译,潜在的经济影响大了很多。一个翻译人员可以快速查看软件翻译的输出,从而增加翻译输出。 可以减少给定翻译任务量所需的翻译人数。最终,由于基于软件的方法超出了人工翻译的性能,翻译人员完全被软件所取代,软件可​​以每周七天,每天24小时按需运行。截至2016年底,Google翻译服务完全转移到了Google神经机器翻译系统——一种深度长短期记忆网络(LSTM)。

让我们再来看一些其他可以证明深度学习技术给企业带来潜在影响的例子。

3. 使用序列数据库

音频和文本是两种典型的序列数据库,这类数据相邻字母/音频片段之间距离越近,关系越紧密。格式自由、非结构化的文本对于传统算法处理方法来说是一个具有挑战性的数据类型。其他结构化数据的例子包括作为时间序列的浮点值捕获的传感器数据流。 如果企业拥有传统工程学或足够的科学背景,可以将序列数据库视为一维信号或时间序列。

自动语音识别

高斯混合模型(GMM)一直用于将语音转录成文本,直到深度神经网络和递归神经网相继出现,并且在过去近五年的时间内收到最好的效果。任何在Android手机上使用过Google智能助理的人都会亲身体验到这项技术的功能,它的业务影响是巨大的。

4. 使用图像和视频

图像是在二维空间数据关系密切的数据源。它的固有性质即假设图像中彼此相邻的点比相隔更远的点具有更强的关系。视频数据可以被看作一系列图像,且元素的空间关系在每个帧内保持,并且常常在后续帧中继续保持。

图像分类

图像分类是计算机科学和计算机视觉领域的一个经典问题。 为了对输入图像进行分类,算法从一组有限的预定义类别中为图像分配一个标签。 请注意,图像分类假定每个图像中都有一种物体。

图像分类一直被认为是计算机科学中一个非常具有挑战性的问题,因此每年都要进行视觉识别竞赛。在ImageNet大规模视觉识别挑战赛LSVRC-2010中,多伦多大学的深度卷积神经网络以6000万个参数和65万个神经元取胜。在2012年的比赛中,同一个网络的变体赢得了15.3%的错误率, 显着超过了第二名竞争对手的26.2%的错误率。 这种性能的飞跃是非常罕见的,有助于建立以卷积神经网络为主的技术方法。

自动游戏

Google的DeepMind团队表明,一个神经网络可以学习从古老的Atari 2600游戏机上玩七种不同的视频游戏,表现比以前的所有算法都要好,甚至胜过三个人类游戏专家。这个卷积神经网络是使用控制台直接馈送(基本上和人类玩家视角相同)和一个强化学习的变体Q- learning进行训练的。用视频反馈训练人工智能来执行有目标的复杂任务对企业有重大的意义。

自动黑白图片/视频着色

卷积神经网络已被用来对黑白照片进行着色,以前这种时间密集型操作过程有专家完成。加利福尼亚大学伯克利分校的研究人员用“全自动系统”和“人工辅助”两种方式“攻克了幻化彩色照片的幻觉问题”。尽管大多数企业没有对老电影着色的需求,但这一研究方法不仅证明了以深度学习技术为基础如何自动化地完成以前需要创造性专业知识才能完成的任务,也证明了人工智能和人类能够协作加速时间密集型任务的完成。

模仿毕加索

生成对抗网络(GANs)在深度学习领域中引起了相当大的轰动,并基于两种模式竞争来改善整体效果。 用原文的话说:

“生成模式可被看作造假者团队,试图生产假币同时避免被检测,而鉴别模型类似于警察,试图检测假币。两种模式间的竞争促使两边同时改进他们的方法,直到伪造品与真品无法区分。”

GANs被用来“学习”毕加索等著名画家的风格,然后把照片转换成模仿画家风格的画作。

5. 企业举例

为了更好地了解如何使用深度学习,让我们来看看行业内的几个例子。

Jet.com

Jet.com为这些新技术和能力如何转化为企业利益提供了一个很好的创新的例子。 Jet.com提供数百万种待售产品,其中许多是由第三方合作伙伴提供的。每个新产品都属于上千类别中的一类。过去,这种分类依赖文本描述和合作伙伴提供的信息。有时候这些信息是不正确、不准确或不一致的。 但是,通过使用TensorFlow和深度学习,Jet.com将产品的照片集成到分类通道中,显著提高了分类的准确性。因此,深度学习允许将新的数据类型(图像)快速集成到传统的数据分析流程中,以改善业务运营。

Jet.com使用深度学习解决的另一个问题是在搜索框中处理文本输入。例如,如果客户在搜索框中键入“矮脚电视柜”,则系统必须精确地解析这种自然语言来定位该客户意图的项目。

6. 潜在的缺点

和其他新技术一样,深度学习也有其缺点,特别是从企业角度来看。每一种新技术都存在一个共同的最首要的问题,其中有少数新技术尤其如此。例如大量的报道表明,数据科学家的数量急剧减少,深度学习专家更是极端缺乏。此外,大多数技术公司,谷歌、Facebook、微软、亚马逊、Twitter等,正在为这个稀缺人才而战,这既增加了人力成本,也增加了薪水成本。

从技术的角度来看,深度学习有几个潜在的缺点。首先,用最简单的技术解决问题几乎总是最好的。如果线性回归是有效的,那就用它来代替更为复杂的深度学习方法。其次,在需要时,深度学习需要大量的资源。训练神经网络不仅需要大数据集(精通机器学习的企业都会具备),而且还需要更大的计算力来训练网络。这意味着要么有多个图形处理单元(GPU),或者GPU的云资源。如果企业的理想用例在深度学习的范围之内,那么回报可能会很大。但是,取决于外部需求是多远,深度学习本身不会为产品和项目的成功与否提供保证。

最后,更广泛的领域被称为数据科学的原因。尽管有一些与预建网络直接支持的企业相关的用例(例如图像分类),但是很多企业都有兴趣通过深入的学习网络来扩展这些想法并开发相邻的功能。这应该被认为更多的是研究和开发工作,而不是一个伴随风险的工程计划。

7. 本章小结

深度学习代表了涉及许多不同数据模式(包括文本、图像、视频和声音)的许多任务的机器学习领域,或者具有可被利用的结构或空间构建特征的任何数据。而且,深度学习已经在一定程度上取代了特征提取和特征工程的重要问题,并选择了合适的神经网络结构。随着深度学习的不断发展,对网络和网络组件的性能和性能属性的更好的理解将会出现。深度学习的使用将转向更多的工程问题,以解决以下问题:我们如何将所需的神经元类型,网络层和整个网络组合成一个能够处理业务挑战的系统。

最终,问题不在于企业是否会使用深度学习,而在于每个组织如何参与到技术发展过程中来。许多公司可能已经使用了深度学习的服务。对于那些可以直接受益于深度学习产品和服务的公司来说,一个现实的问题是“我们要购买技术/服务”还是“我们要发明创造技术/服务”?如果存在提供满足性能要求的必要功能的高级API,企业可以应该使用它。但是,如果这是不可能的,企业必须发展内部的核心能力。如果选择后一种方法,那么下一个问题是,我们可以简单地通过微调来在已有技术成果来实现,还是我们需要发明全新的系统、架构、图层或者神经元类型来推进现有技术?这个问题的答案决定了企业需要准备何种人力资源。

参考资料:

  1. Li Deng, “Three Classes of Deep Learning Architectures and Their Applications: A Tutorial Survey”, APSIPA Transactions on Signal and Information Processing (January 2012).
  2. Ajay Agrawal, Joshua S. Gans, and Avi Goldfarb, “What to Expect from Artificial Intel‐ ligence,” MIT Sloan Management Review Magazine (Spring 2017).
  3. Yonghui Wu et al., “Google’s Neural Machine Translation System: Bridging the Gap between Human and Machine Translation”, technical report (October 2016).
  4. A. Krizhevsky, I. Sutskever, and G. Hinton, “ImageNet Classification with Deep Convo‐ lutional Neural Networks”, Advances in Neural Information Processing Systems 25 (2012).
  5. V. Mnih, K. Kavukcuoglu, D. Silver et al, “Playing Atari with Deep Reinforcement Learning”, NIPS Deep Learning Workshop (2013).
  6. R. Zhang, P. Isola, and A. Efros. “Colorful Image Colorization”, in ECCV 2016 (oral), October 2016.
  7. I. Goodfellow, J. Pouget-Abadie, M. Mirza, B. Xu, D. Warde-Farley, S. Ozair et al., “Gen‐ erative Adversarial Nets”, Advances in Neural Information Processing Systems 27 (2014).

(未完待续)

  • 十一 27 / 2017
  • 0
Tech

锐眼发现 | 十分钟看懂图像语义分割技术

作者:沈MM,微信公众号「沈MM的小喇叭」(ID:VoiceOfShenMM)

            本文参考了知乎专栏,部分图片来自

转载自:雷锋网

 

大多数人接触 “语义” 都是在和文字相关的领域,或语音识别,期望机器能够识别你发出去的消息或简短的语音,然后给予你适当的反馈和回复。嗯,看到这里你应该已经猜到了,图像领域也是存在 “语义” 的。

今天是 AI 大热年,很多人都关注与机器人的语音交互,可是有没有想过,将来的机器人如果不能通过图像来识别主人,家里的物品、宠物,那该多没意思。说近一些,假如扫地机器人能够机智地绕开你丢在地上的臭袜子而扫走旁边的纸屑,一定能为你的生活解决不少麻烦。

没错,图像语义分割是 AI 领域中一个重要的分支,是机器视觉技术中关于图像理解的重要一环,是不是听上去即重要又牛 X 闪闪的。

近年的自动驾驶技术中,也需要用到这种技术。车载摄像头探查到图像,后台计算机可以自动将图像分割归类,以避让行人和车辆等障碍。

十分钟看懂图像语义分割技术

十分钟看懂图像语义分割技术

图像语义分割

图像语义分割的意思就是机器自动分割并识别出图像中的内容,比如给出一个人骑摩托车的照片,机器判断后应当能够生成右侧图,红色标注为人,绿色是车(黑色表示 back ground)。

十分钟看懂图像语义分割技术

所以图像分割对图像理解的意义,就好比读古书首先要断句一样

在 Deeplearning 技术快速发展之前,就已经有了很多做图像分割的技术,其中比较著名的是一种叫做 “Normalized cut” 的图划分方法,简称 “N-cut”。

N-cut 的计算有一些连接权重的公式,这里就不提了,它的思想主要是通过像素和像素之间的关系权重来综合考虑,根据给出的阈值,将图像一分为二

下图是将像素间的关系信息简单描述成为距离,根据距离差距来划分图像的示例:

十分钟看懂图像语义分割技术

在实际运用中,每运行一次 N-cut,只能切割一次图片,为了分割出图像上的多个物体,需要多次运行,下图示例了对原图 a 进行 7 次 N-cut 后,每次分割出的结果。

十分钟看懂图像语义分割技术

但是可以很明显的看到这种简单粗暴的分割方式并不准确,趴在地上的运动员肢体在 b 图中分割出来,而他的手臂则在 h 图中被分割,显然是错误的。

N-cut 技术的缺陷很明显,于是有了一种更新的优化方式,这种优化方式为了避免机器不能很好的分割类似上面例子中 “衣服和肢体颜色反查太大导致分割错误” 的情况,增加了人机交互,在分割过程中,需要人工干预参与完成。

这种需要人机交互的技术叫 Grab Cut

[敲黑板]~~ 注意,PS 里就使用了这种技术。

这种技术其实是这样的,给定一张图片,然后人工在想要抠图(也就是我们说的分割)的区域画一个红框,然后机器会对略小于这个框的内容进行 “主体计算”,嗯,这个 “主体计算” 是我起的名字,为了你们更好的理解背后复杂的设计和公式,因为机器会默认红框中部是用户期望得到的结果,所以将中部作为主体参考,然后剔除和主体差异较大的部分,留下结果。

十分钟看懂图像语义分割技术

此技术中,抠出来的部分叫 “前景”,剔除的部分叫 “背景”。

有时候还挺好用的,但是稍微复杂一点的时候问题就来了:比如要抠下面这个戴头盔的大兵,头盔颜色和背后岩石颜色很相近,结果机器就会把头盔部分剔除,同样脖子附近的山岩也被当做了前景而保留了进来。

十分钟看懂图像语义分割技术

此时又需要进行人工干预了,需要手动在图像上进行标注,画白色线表示是希望保留的前景,红色表示背景,指导辅助机器进行判断,再次运算后,得到了较好的期望结果。

虽然看上去 Grab Cut 给出的结果还不错,但缺点也很明显,首先,它同 N-cut 一样也只能做二类语义分割,说人话就是一次只能分割一类,非黑即白,多个目标图像就要多次运算。其次,它需要人工干预,这个弱点在将来批量化处理和智能时代简直就是死穴

OK,人类的智慧是无止境的,DeepLearning(深度学习)终于开始大行其道了。

深度学习

深度学习是机器学习的一个分支,主要指深度神经网络算法,深度神经网络比普通神经网络层次更多,能够更好地捕捉数据中的深层次关系,得到的模型较为准确,主要用来进行特征学习。

先别急着晕,我们先来看看神经网络是怎么工作的。

神经网络是模仿人的神经元而建立的人工神经元系统,多输入单输出,同时输出又作为下一个神经元的输入……(请自行脑补那张牙舞爪妖孽的神经元细胞~ 什么?没见过?文科生,拖出去~~)

下图表示的是一个单个神经元:

十分钟看懂图像语义分割技术

把这些单个神经元组织在一起,便形成了神经网络。下图便是一个三层神经网络结构:

十分钟看懂图像语义分割技术

上图中最左边的原始输入信息称之为输入层,最右边的神经元称之为输出层(上图中输出层只有一个神经元),中间的叫隐藏层

深度神经网络系统中的层数比较多,达到 8-10 层(普通神经网络的层数通常 3-4 层)。

在此前使用的图像识别算法中,主流的技术是卷积神经网络算法(Convolutional Neural Networks),简称 CNN卷积神经网络就是一种深度神经网络

但是在 2015 年的 CVPR 上发表了一篇很牛 X 的论文(路人甲:请问 CVPR 是神马?答:CVPR 可以简单理解为这个领域的最重量级的会议:国际计算机视觉与模式识别会议),提出了 FCN 即 全卷积神经网络(Fully Convolutional Networks)。

为什么说这个 FCN 论文很牛叉呢?看起来只是多了一个字而已呀,有什么不得了的呢?

嗯,不得不说,真是 “差之毫厘,谬以千里” 啊。

我还是先来帮大家复习一下卷积。

我查了很多书,卷积有各种各样的公式,还有各种各样的推导算法,但是为了降低本文的难读指数,所以我直接跳到卷积的物理意义,不要太 care 那些公式,其实卷积的物理意义,就是 “加权叠加”。

在对图像处理进行卷积时,根据卷积核的大小,输入和输出之间也会有规模上的差异。

来看一张动图(仅做示例)

十分钟看懂图像语义分割技术

上图左边 5*5 的方块视为图像输入,黄色移动的 3*3 以及里面的数字(*1/*0)是卷积核,该卷积核按照步长为 1 的顺序依次从原始输入的左上角一直移动计算叠加到右下角,卷积核一共移动 9 次。

九次的位置对应到右侧的 3*3 的相应格内,格中的数字便是卷积值,(此处是卷积核所覆盖的面积内元素相乘再累加的结果)。

9 次移动计算完毕后,右侧 3*3 的新矩阵为此次卷积层的计算结果。

如果这么说还是不太好理解,没关系,我有更直观的办法 ^_^。

在实际计算过程中,输入是一张原始图片和滤波器 filter(一组固定的权重,也就是上面我们说的卷积核对应的实际意义)做内积后得到新的二维数据。

不同的滤波器 filter 会得到不同的输出数据,比如轮廓、颜色深浅,如果想提取图像的不同特征,需要用不同的滤波器 filter 提取想要的关于图像的特定信息。

十分钟看懂图像语义分割技术

上图为一个卷积层中的卷积处理过程,注意上下两次卷积核内容是不同的,所以得到两种处理结果。

等号右边的新的二维信息在 CNN 网络中,会作为下一个卷积层的输入,即在下一个卷积层计算时,右边的图像会作为输入的原始图像。

在 CNN 网络中,一共会进行 5 次卷积层计算。

路人甲:那最后会得到一个什么鬼?

沈 MM:咳咳,在连续的 5 个卷积层计算后,紧跟这的是 3 个全连接层。

路人甲:什么是全连接层?

沈 MM:全连接层,并不是一个二维图像,而是—— 一个一维向量

路人甲已哭晕在厕所。

这三个一维向量的前两个向量长度是 4096,最后一个向量长度是 1000.

为什么是 1000?

因为在 CNN 网络中,有 1000 个分类,最后的这个向量中的 1000 个元素表达的信息是:这张原始输入图片中的东西可能是这 1000 个分类中的物体的概率。

是的,一张图,算了半天,最后给出的是,这张图是个什么玩意的答案。

十分钟看懂图像语义分割技术

右侧绿色箭头指向的表示最后一个全连接层的向量中,表示各种物体的概率,上图被识别为一辆车。

好了,上面说的是卷积神经网络 CNN 的处理过程(相信我我已经很简化了)。

那么全卷积神经网络呢?

大家应该注意到,CNN 的输入是图像,输出是一个结果,或者说是一个值,一个概率值。

FCN 提出所追求的是,输入是一张图片是,输出也是一张图片,学习像素到像素的映射

十分钟看懂图像语义分割技术

上图上半部分是 CNN 网络,下半部分是 CN 网络

那么 “全卷积” 又体现在哪里呢?

CNN 网络中的后三层,都是一维的向量,计算方式不再采用卷积,所以丢失了二维信息,而 FCN 网络中,将这三层全部转化为 1*1 的卷积核所对应等同向量长度的多通道卷积层,使后三层也全部采用卷积计算,整个模型中,全部都是卷积层,没有向量,所以称为 “全卷积”。

FCN 将第 6 层和 7 层分别从 4096 长度的向量转化为 4096 通道的卷积层,第 8 层则是 21 通道的卷积层。之所以第 8 层从 1000 缩减到 21,是因为 FCN 使用的识别库是 PASCAL VOC,在 PASCAL VOC 中有 20 种物体分类,另外一个 background 分类。(关于 PASCAL VOC 参见附录

再多说一句,以下(甚至全文)所用到的分割图片中不同的颜色就表示不同的物体类别,一共有 21 种颜色:

十分钟看懂图像语义分割技术

CNN 的识别是图像级的识别,也就是从图像到结果,而 FCN 的识别是像素级的识别,对输入图像的每一个像素在输出上都有对应的判断标注,标明这个像素最可能是属于一个什么物体 / 类别。

在此处特别要指出的是,在实际的图像语义分割测试时,输入是一个 H*W*3 的三通道彩色图像,而输出是一个 H*W 的矩阵。

这就可以简单看做每一个像素所携带的信息是多维的,比如颜色,就分为 3 层,分别对应 R、G、B 三个值。(不知道什么是 RGB 的,鉴定为文科生,请迅速撤离,谢谢)

所以在进行卷积的时候,每一个通道都是要独立计算的,计算完之后再叠加,得到最终卷积层结果。

如果卷积核移动的步长为 1,那么卷积是按照像素排列去挨个计算的,计算量可想而知会有多么庞大。但是在实际中,相邻的像素往往都是一类,按照像素依次计算就显得冗余,所以在卷积之后会对输出进行一次池化(pooling)处理

那么什么又是池化呢?

来,我们再来看一张动图:

十分钟看懂图像语义分割技术

池化简单来说就是将输入图像切块,大部分时候我们选择不重叠的区域,假如池化的分割块大小为 h*h,分割的步长为 j,那么一般 h=j,就像上图,如果需要重叠,只需要 h>j 即可。

对完整图像切分,再取切分区域中所有值的均值或最大值作为代表该区域的新值,放入池化后的二维信息图中。得到的新图就是池化结果。

在 CNN 和 FCN 的网络模型中,每一个卷积层,都包含了 [卷积 + 池化] 处理,这就是传说中的 “下采样”,但这样处理之后的结果是:图像的像素信息变小了,每一层的像素信息都是前一层的 1/2 大小,到第五层的时候,图像大小为原始图像的 1/32

在 CNN 算法里,这并没有什么要紧的,因为 CNN 最终只输出一个结果:“这个图上是个啥”,但是 FCN 不同,FCN 是像素级别的识别,也就是输入有多少像素,输出就要多少像素,像素之间完全映射,并且在输出图像上有信息标注,指明每一个像素可能是什么物体 / 类别。

所以就必须对这 1/32 的图像进行还原

这里用到个纯数学技术,叫 “反卷积”,对第 5 层进行反卷积,可以将图像扩充至原来的大小(严格说是近似原始大小,一般会大一点,但是会裁剪掉,为什么会大的原理略复杂,这里先不提,以后写进阶版再放进来)。

——这个 “反卷积” 称为 “上采样”。(和下采样对应)

十分钟看懂图像语义分割技术

在技术上,我们可以对任一层卷积层做反卷积处理,得到最后的图像,比如用第三层 (8s-8 倍放大),第四层 (16s-16 倍放大),第五层 (32s-32 倍放大) 得到的分割结果。

十分钟看懂图像语义分割技术

来看一张各层还原后的对比图,分别是:

十分钟看懂图像语义分割技术

通过对比可以很明显看到:在 16 倍还原和 8 倍还原时,能够看到更好的细节,32 倍还原出来的图,在边缘分割和识别上,虽然大致的意思都出来了,但细节部分(边缘)真的很粗糙,甚至无法看出物体形状。

为什么会这样呢?

这里就涉及到一个感受域(receptive field)的概念。较浅的卷积层(靠前的)的感受域比较小,学习感知细节部分的能力强,较深的隐藏层 (靠后的),感受域相对较大,适合学习较为整体的、相对更宏观一些的特征

所以在较深的卷积层上进行反卷积还原,自然会丢失很多细节特征。

于是我们会在反卷积步骤时,考虑采用一部分较浅层的反卷积信息辅助叠加,更好的优化分割结果的精度:

十分钟看懂图像语义分割技术

尽管 FCN 的提出是一条很牛叉的路,但还是无法避免有很多问题,比如,精度问题,对细节不敏感,以及像素与像素之间的关系,忽略空间的一致性等问题。

于是更牛的大牛就出现了。

有牛人提出一种新的卷积计算方式,开始称为 “带 hole” 的卷积,也就是使用一种 “疏松的卷积核” 来计算,以此来取代池化的处理。

上面已经讲过,池化操作能够减少计算量,同时也能防止计算结果过拟合,那么单纯取消池化操作又会使单层网络的感受域缩小,但如果使用 “疏松的卷积核” 来处理卷积,可以达到在不增加计算量的情况下增加感受域,弥补不进行池化处理后的精度问题。

括弧:这种带洞的卷积方式后来起了一个高雅的名字叫做:“Dilated Convolutions”。

这种方式人为加大了卷积核内部元素之间的距离,可参考下图:

十分钟看懂图像语义分割技术

红点表示卷积核的元素,绿色表示感受域,黑线框表示输入图像。

a 为原始卷积核计算时覆盖的感受域,b 为当卷积核覆盖的元素间距离增大的情况,不再在连续的空间内去做卷积,跳着做,当这个距离增加的越大时,单次计算覆盖的感受域面积越大。

上图不太好理解的话再来看一张图:(个人觉得下面这个图非常好理解)

十分钟看懂图像语义分割技术

上层绿色点表示输入层像素点,下层黄色是输出层(单次计算时的层级关系),当卷积核元素间距为 0 时(相邻),123 对应输出 A,234 对应输出 B,345 对应输出 C,那么输出 ABC 三个元素结果的感受域只覆盖了 12345 这几个原始像素点。

如果采用稀疏的卷积核,假设间距为 1(相当于卷积计算时跳一个像素再取值计算),如图示,那么结果 A 对应的输入是 135,结果 B 对应的输入是 246,结果 C 对应的输入是 357,同样输出 ABC 三个结果,在原始图像上取的像素点的长度就多了。

这是水平 X 轴方向上的扩展,在 Y 轴上也会有同样的扩展,感受域在没有增加计算(相对于池化操作后)的情况下增大了,并且保留了足够多的细节信息,对图像还原后的精度有明显的提升。

看一下对比图:

十分钟看懂图像语义分割技术

第一列是原始图像,最后一列是手工标注的训练输入图像,第二列为 FCN 在 1/8 倍数下的还原,第三列则是采用了新的卷积算法的还原图像,可以很明显看到,第三列对细节的分割明显优于第二列 FCN 8 倍的图像。

刚才还提到了第二个问题,即像素与像素之间的逻辑关系的问题,毕竟前面再牛叉的算法也只是单纯的计算没有根据物理意义进行判断在输出的标注里这些结果是否合法(符合现实逻辑)。

很多以深度学习为框架的图像语义分割系统都使用了一种叫做 “条件随机场”( Conditional Random Field,简称 CRF)的技术作为输出结果的优化后处理手段。其实类似技术种类较多,比如还有马尔科夫随机场 (MRF) 和高斯条件随机场 (G-CRF) 用的也比较多,但原理都较为类似。

简单来介绍一下 “条件随机场” 的概念。

FCN 是像素到像素的影射,所以最终输出的图片上每一个像素都是标注了分类的,将这些分类简单地看成是不同的变量,每个像素都和其他像素之间建立一种连接,连接就是相互间的关系。

于是就会得到一个 “完全图”:

十分钟看懂图像语义分割技术

上图是以 4*6 大小的图像像素阵列表示的简易版。

那么在全链接的 CRF 模型中,有一个对应的能量函数:

十分钟看懂图像语义分割技术

嗯,不要问我这个公式里各种符号是啥,我看不懂。但是我知道这个公式是干嘛滴:

其中等号右边第一个一元项,表示像素对应的语义类别,其类别可以由 FCN 或者其他语义分割模型的预测结果得到;而第二项为二元项,二元项可将像素之间的语义联系 / 关系考虑进去。

这么说太抽象,举个简单的例子,“天空”和 “鸟” 这样的像素在物理空间是相邻的概率,应该要比 “天空” 和 “鱼” 这样像素相邻的概率大,那么天空的边缘就更应该判断为鸟而不是鱼(从概率的角度)。

通过对这个能量函数优化求解,把明显不符合事实识别判断剔除,替换成合理的解释,得到对 FCN 的图像语义预测结果的优化,生成最终的语义分割结果。

优化后的对比图:

十分钟看懂图像语义分割技术

上图第二列是 FCN 网络 8 倍还原分割结果,第三列是将 CRF 植入 FCN 处理后的结果。

可以很明显的看到,第三列的物体识别无论是轮廓细节分割还是物体识别,都优于第二列,特别是第二行的沙发中有奇怪的红色东西的识别,在进行 CRF 优化之后,还原成了绿色的沙发。

OK,说了这么多,终于快要讲完了(好累)。

以上就是目前较为前沿的图像语义分割技术。

目前的这种机器学习方式还属于监督性学习,牛叉闪闪的科学家们还是希望将来可以实现半监督或弱监督式学习,这样更类似人类的学习认知方式。

在这条道路上,还有很多有趣的东西,比如示例级别(instance level)的图像语义分割问题也同样热门。

该类问题不仅需要对不同语义物体进行图像分割,同时还要求对同一语义的不同个体进行分割(例如需要对图中出现的九把椅子的像素用不同颜色分别标示出来)。

十分钟看懂图像语义分割技术

另外,在目前的计算技术水平下(硬件软件),使用 FCN 训练建模的时间大约需要三周,这也说明在这个领域里还有很多值得探索和需要解决的问题。

对此有兴趣的同学们自己去继续研究吧,哈哈。

曾有一个业界大牛说过这样一段话,送给大家:

“华人在计算机视觉领域的研究水平越来越高,这是非常振奋人心的事。我们中国错过了工业革命,错过了电气革命,信息革命也只是跟随状态。但人工智能的革命,我们跟世界上的领先国家是并肩往前跑的。能身处这个时代浪潮之中,做一番伟大的事业,经常激动的夜不能寐。”

AI 的浪潮即将席卷而来,你,准备好了么?

—— 附录的分割线 —–

PASCAL VOC(patternanalysis,statistical modelling and computational learning visual objectclasses) 模式分析,统计建模,计算学习,视觉物体分类。

PASCAL VOC 挑战赛是视觉对象的分类识别和检测的一个基准测试,提供了检测算法和学习性能的标准图像注释数据集和标准的评估系统。从 2005 年至今,该组织每年都会提供一系列类别的、带标签的图片,挑战者通过设计各种精妙的算法,仅根据分析图片内容来将其分类,最终通过准确率、召回率、效率来一决高下。如今,挑战赛和其所使用的数据集已经成为了对象检测领域普遍接受的一种标准。

委员会所提供的图片集包括 20 个目录:人类;动物(鸟、猫、牛、狗、马、羊);交通工具(飞机、自行车、船、公共汽车、小轿车、摩托车、火车);室内(瓶子、椅子、餐桌、盆栽植物、沙发、电视)。都是一些日常中最常见的物体,为的就是能更好的体现算法的实用性。

后记 

很多人跟我说过,不要写那么长的文章,因为现在没人会看长文。

可是我却 “变本加厉” 写这么长的技术文章。

为了写这文章,中秋三天都在家里查资料,码字。除了图片在网上能找到现成的,其他没有从哪里照搬过原话,6 千 6 百多字全是基于自己的理解然后尽量浅显易懂滴写出来~

但还是太技术了,因为这本身就是技术。

18 号我做了一个关于此项技术非学术性非正式的小范围交流,会上大家也觉得偏技术流,于是我又根据交流过程中一些没有阐述清楚的点补全了这篇文章,即便不会有多少人看,却也还是要写,要发的。

因为什么呢? 执着吧。

其实我也想写诸如 “一张图看懂全卷积神经网络” 这样粗浅易读的东西,但是我对信息的精炼程度还达不到一张图就能讲清楚的水平,能力有限。

嗯,就酱。

 

  • 十一 01 / 2017
  • 0
Tech

锐眼发现 | 一文读懂深度学习与机器学习的差异

作者:Faizan Shaikh

原文:Deep Learning vs. Machine Learning

转载自:微信公众号「开源中国」(微信号:「oschina2013」)

翻译:Tocy, rever4433, soaring, mskf

 

如果你经常想让自己弄清楚机器学习和深度学习的区别,阅读该文章,我将用通俗易懂的语言为你介绍他们之间的差别。

机器学习和深度学习变得越来越火。突然之间,不管是了解的还是不了解的,所有人都在谈论机器学习和深度学习。无论你是否主动关注过数据科学,你应该已经听说过这两个名词了。

为了展示他们的火热程度,我在 Google trend 上搜索了这些关键字:

mlvsdl

如果你想让自己弄清楚机器学习和深度学习的区别,请阅读本篇文章,我将用通俗易懂的语言为你介绍他们之间的差别。下文详细解释了机器学习和深度学习中的术语。并且,我比较了他们两者的不同,别说明了他们各自的使用场景。

什么是机器学习和深度学习?

让我们从基础知识开始:什么是机器学习?和什么是深度学习?如果你对此已有所了解,随时可以跳过本部分。

什么是机器学习?

一言以蔽之,由 Tom Mitchell 给出的被广泛引用的机器学习的定义给出了最佳解释。下面是其中的内容:

“计算机程序可以在给定某种类别的任务 T 和性能度量 P 下学习经验 E ,如果其在任务 T 中的性能恰好可以用 P 度量,则随着经验 E 而提高。”

是不是读起来很绕口呢?让我们用简单的例子来分解下这个描述。

示例 1:机器学习和根据人的身高估算体重

假设你想创建一个能够根据人的身高估算体重的系统(也许你出自某些理由对这件事情感兴趣)。那么你可以使用机器学习去找出任何可能的错误和数据捕获中的错误,首先你需要收集一些数据,让我们来看看你的数据是什么样子的:

johnson_figure7

图中的每一个点对应一个数据,我们可以画出一条简单的斜线来预测基于身高的体重

例如这条斜线:

Weight (in kg) = Height (in cm) – 100

…这些斜线能帮助我们作出预测,尽管这些斜线表现得很棒,但是我们需要理解它是怎么表现的,我们希望去减少预测和实际之间的误差,这也是衡量其性能的方法。

深远一点地说,我们收集更多的数据 (experience),模型就会变得更好。我们也可以通过添加更多变量(例如性别)和添加不同的预测斜线来完善我们的模型。

示例2:飓风预测系统

我们找一个复杂一点的例子。假如你要构建一个飓风预测系统。假设你手里有所有以前发生过的飓风的数据和这次飓风产生前三个月的天气信息。

如果要手动构建一个飓风预测系统,我们应该怎么做?

Storm_Prediction_Center_Outlook_17_Nov_2013_1200z

首先我们的任务是清洗所有的数据找到数据里面的模式进而查找产生飓风的条件。

我们既可以将模型条件数据(例如气温高于40度,湿度在80-100等)输入到我们的系统里面生成输出;也可以让我们的系统自己通过这些条件数据产生合适的输出。

我们可以把所有以前的数据输入到系统里面来预测未来是否会有飓风。基于我们系统条件的取值,评估系统的性能(系统正确预测飓风的次数)。我们可以将系统预测结果作为反馈继续多次迭代以上步骤。

让我们根据前边的解释来定义我们的预测系统:我们的任务是确定可能产生飓风的气象条件。性能P是在系统所有给定的条件下有多少次正确预测飓风。经验E是我们的系统的迭代次数。

什么是深度学习?

深度学习的概念并不新颖。它已经存在好几年了。但伴随着现有的所有的炒作,深度的学习越来越受到重视。正如我们在机器学习中所做的那样,先来看看深度学习的官方定义,然后用一个例子来解释。

“深度学习是一种特殊的机器学习,通过学习将世界使用嵌套的概念层次来表示并实现巨大的功能和灵活性,其中每个概念都定义为与简单概念相关联,而更为抽象的表示则以较不抽象的方式来计算。”

这也有点让人混乱。下面使用一个简单示例来分解下此概念。

示例1: 形状检测

先从一个简单的例子开始,从概念层面上解释究竟发生了什么的事情。我们来试试看如何从其他形状中识别的正方形。

circle-square

我们眼中的第一件事是检查图中是否有四条的线(简单的概念)。如果我们找到这样的四条线,我们进一步检查它们是相连的、闭合的和相互垂直的,并且它们是否是相等的(嵌套的概念层次结构)。

所以,我们完成了一个复杂的任务(识别一个正方形),并以简单、不太抽象的任务来完成它。深度学习本质上在大规模执行类似逻辑。

示例2: 猫 vs. 狗

我们举一个动物辨识的例子,其中我们的系统必须识别给定的图像中的动物是猫还是狗。阅读下此文(https://www.analyticsvidhya.com/blog/2017/04/comparison-between-deep-learning-machine-learning/,以了解深度学习在解决此类问题上如何比机器学习领先一步。

机器学习和深度学习的对比

现在的你应该已经对机器学习和深度学习有所了解,接下来我们将会学习其中一些重点,并比较两种技术。

数据依赖性

深度学习与传统的机器学习最主要的区别在于随着数据规模的增加其性能也不断增长。当数据很少时,深度学习算法的性能并不好。这是因为深度学习算法需要大量的数据来完美地理解它。另一方面,在这种情况下,传统的机器学习算法使用制定的规则,性能会比较好。下图总结了这一事实。

dl3

硬件依赖

深度学习算法需要进行大量的矩阵运算,GPU 主要用来高效优化矩阵运算,所以 GPU 是深度学习正常工作的必须硬件。与传统机器学习算法相比,深度学习更依赖安装 GPU 的高端机器。

特征处理

特征处理是将领域知识放入特征提取器里面来减少数据的复杂度并生成使学习算法工作的更好的模式的过程。特征处理过程很耗时而且需要专业知识。

在机器学习中,大多数应用的特征都需要专家确定然后编码为一种数据类型。

特征可以使像素值、形状、纹理、位置和方向。大多数机器学习算法的性能依赖于所提取的特征的准确度。

深度学习尝试从数据中直接获取高等级的特征,这是深度学习与传统机器学习算法的主要的不同。

基于此,深度学习削减了对每一个问题设计特征提取器的工作。例如,卷积神经网络尝试在前边的层学习低等级的特征(边界,线条),然后学习部分人脸,然后是高级的人脸的描述。更多信息可以阅读神经网络机器在深度学习里面的有趣应用。

6872876-screen-shot-2017-10-11-at-120200-pm

问题解决方式

当应用传统机器学习算法解决问题的时候,传统机器学习通常会将问题分解为多个子问题并逐个子问题解决最后结合所有子问题的结果获得最终结果。相反,深度学习提倡直接的端到端的解决问题。

举例说明:

假设有一个多物体检测的任务需要图像中的物体的类型和各物体在图像中的位置。

c2

传统机器学会将问题分解为两步:物体检测和物体识别。首先,使用一个边界框检测算法扫描整张图片找到可能的是物体的区域;然后使用物体识别算法(例如 SVM 结合 HOG )对上一步检测出来的物体进行识别。

相反,深度学习会直接将输入数据进行运算得到输出结果。例如可以直接将图片传给 YOLO 网络(一种深度学习算法),YOLO 网络会给出图片中的物体和名称。

执行时间

通常情况下,训练一个深度学习算法需要很长的时间。这是因为深度学习算法中参数很多,因此训练算法需要消耗更长的时间。最先进的深度学习算法 ResNet完整地训练一次需要消耗两周的时间,而机器学习的训练会消耗的时间相对较少,只需要几秒钟到几小时的时间。

但两者测试的时间上是完全相反。深度学习算法在测试时只需要很少的时间去运行。如果跟 k-nearest neighbors(一种机器学习算法)相比较,测试时间会随着数据量的提升而增加。不过这不适用于所有的机器学习算法,因为有些机器学习算法的测试时间也很短。

可解释性

至关重要的一点,我们把可解释性作为比较机器学习和深度学习的一个因素。

我们看个例子。假设我们适用深度学习去自动为文章评分。深度学习可以达到接近人的标准,这是相当惊人的性能表现。但是这仍然有个问题。深度学习算法不会告诉你为什么它会给出这个分数。

当然,在数学的角度上,你可以找出来哪一个深度神经网络节点被激活了。但是我们不知道神经元应该是什么模型,我们也不知道这些神经单元层要共同做什么。所以无法解释结果是如何产生的。

另一方面,为了解释为什么算法这样选择,像决策树(decision trees)这样机器学习算法给出了明确的规则,所以解释决策背后的推理是很容易的。因此,决策树和线性/逻辑回归这样的算法主要用于工业上的可解释性。

机器学习和深度学习用于哪些领域?

维基百科上关于机器学习的文章概述了所有使用机器学习的领域。这些包括:

  • 计算机视觉:用于车牌识别和面部识别等的应用。
  • 信息检索:用于诸如搜索引擎的应用 – 包括文本搜索和图像搜索。
  • 市场营销:针对自动电子邮件营销和目标群体识别等的应用。
  • 医疗诊断:诸如癌症识别和异常检测等的应用。
  • 自然语言处理:如情绪分析和照片标记等的应用。

shivon-zilis-Machine_Intelligence_Landscape_12-10-2014

上图恰当地总结了机器学习的应用领域,涵盖了整个机器智能的更广泛的话题。

使用机器学习/深度学习的公司的一个主要例子是Google。

在上图中,你可以看到 Google 正在将机器学习应用于其各种产品。机器学习/深度学习的应用是无尽的 – 你仅需寻找正确的时机!

 

突击测试

为了评估你是否真的了解这个区别,我们将进行一次测验。 你可以在这个帖子中发布你的答案。

请务必涉及以下步骤,以保证是完整的对各个场景进行回答。

  • 你将如何使用机器学习解决以下问题?
  • 你如何使用深度学习解决以下问题?
  • 结论:哪种方法是更好的?

场景1:

你必须建立一个用于自动驾驶车辆的软件组件。你构建的系统应该从相机中获取原始像素数据,并预测你应该引导车轮的角度是多少。

场景2:

给定一个人的信用和背景信息,你的系统应该评估出此人是否应该有资格获得贷款。

场景3:

你必须创建一个可以将俄语消息翻译成印地语消息的系统,以便俄语代表能够与当地的群众通信。

在此找到针对上述问题的各种数据科学家的讨论记录和观点。

未来发展趋势

本文概述了机器学习和深度学习及其差异。在本节中,我将分享我对机器学习和深度学习未来发展的观点。

  • 首先,随着业内对数据科学和机器学习使用的日益增长的趋势,对于每个想要生存下来的公司来说,重视机器学习将变得非常重要。苹果正在 iPhone X 中使用机器学习,这标志着这项技术的发展方向。
  • 深入学习让我们每天都感到惊讶,并将在不久的将来继续如此。这是因为深度学习是被证明为最先进的性能最好的技术之一。
  • 针对机器学习和深度学习的研究将是持续的。但与前几年的研究仅限于学术界不同的是,机器学习和深度学习方面的研究将在业界和学术界都有爆发式的发展。而且拥有比以往更多的资助,更有可能成为人类整体发展的主旋律。
随时欢迎您 联系我们