深度学习:核心技术、工具与案例解析(txt+pdf+epub+mobi电子书下载)


发布时间:2021-04-09 01:54:21

点击下载

作者:高彦杰,于子叶

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

深度学习:核心技术、工具与案例解析

深度学习:核心技术、工具与案例解析试读:

前言

为什么要写这本书

随着国内各个AI峰会的召开,各个开源深度学习框架meetup的火爆举行,深度学习技术的发展正在如火如荼地进行之中,很多公司已经将深度学习技术大范围落地并且应用于生产之中。深度学习的研发人员已经从最初的通过优化算法,在公开数据集上取得不俗的成绩,转变到如今在应用的引导之下,设计优化深度学习算法并将其用于生产之中。写一本深度学习技术与实用案例类的技术图书是我持续了很久的想法。由于工作和学习较为紧张,最初只是对参与或学习过的深度学习相关案例进行了总结,但是随着时间的推移,最终我还是打算将其中通用的算法、模块流程以及应用场景抽象出来,进行适当简化并整理成书,这也算是我对深度学习的一个总结和分享。

深度学习是发源于人工神经网络的一种机器学习模型,它立足于更深的模型,具有更强的拟合能力,在计算机视觉、语音识别、自然语言处理等领域均取得了不俗的成果,并在其他应用场景中也逐步获得了傲人的成绩。深度学习已成为当下最受关注的人工智能技术,拥有着庞大的社区支持,应用场景与工具支持也日趋完善。

现在越来越多的同行已经了解并且开始应用深度学习技术。但是对于工程师和研发人员来说,市场上还缺少一本关于深度学习的实用案例类图书,很多深度学习初学者和开发人员只能参考网络上零星的技术博客或文档,这使得学习过程变得零碎且艰难,而本书正是为了解决这些的问题而着意编写的。

本书希望展现给读者一个系统化的视角,秉承大道至简的主导思想,讲解深度学习的基本原理,以及如何在深度学习技术上构建复杂的人工智能应用,帮助读者开启深度学习技术应用之旅。本书特色

从技术层面上讲,本书介绍了人工智能领域中发展势头正盛的深度学习技术和应用。深度学习作为一种机器学习算法,不仅具有模型结构的灵活性,可快速构建适用于不同领域的模型结构与算法,同时具有强大的模型拟合能力,能够在GPU等硬件,TensorFlow等软件层框架的支撑下,发挥人工智能解决问题的能力,依托于深度网络的通用学习能力,快捷地构建广受欢迎的人工智能产品。

从适合读者阅读和掌握知识的角度进行结构安排,从深度学习基本概念和机制介绍入手,结合TensorFlow及其相关深度学习框架,构建相应的网络结构实战案例,并在最后结合不同的应用场景构建人工智能应用。本书所讲内容涵盖较为全面,不仅介绍了基本原理,如何进行深度学习,同时结合应用场景构建应用,还总结了一些实用经验。

书中一些实际操作和应用相关的章节,比较适合人工智能和机器学习开发人员参考,可以作为工作手边书;算法和优化实践方面的章节,则比较适合机器学习和算法工程师,可以分享经验,用于拓展解决问题的思路。读者对象

·深度学习与人工智能初学者

·深度学习与人工智能应用开发人员

·机器学习爱好者

·开源软件爱好者

·其他对深度学习与人工智能技术感兴趣的人员如何阅读本书

本书共计10章,各章内容安排概括如下。

第1章从深度学习的概念出发,介绍深度学习的来龙去脉,阐述深度学习技术的知识图谱以及不同层面的技术概览。

第2章详细介绍了深度学习机制、典型模型原理与设计初衷。

第3章详细介绍了深度学习框架TensorFlow,以实战加深对深度学习技术的理解,为后续使用奠定基础。

第4章详细介绍了TensorFlow的高阶特性与实战优化最佳实践。

第5章从实际出发,详细介绍如何通过深度学习技术构建语音识别器,采用主流深度学习语音识别模型作为实例。

第6章详细介绍了对话机器人领域的技术,以及如何通过深度学习技术构建对话机器人。

第7章详细介绍了深度学习的重要应用领域——人脸识别,以及主流的人脸识别模型与实践。

第8章介绍了自动驾驶领域的相关技术,以及如何通过深度学习进行车辆检测和端到端的自动驾驶解决方案。

第9章详细介绍了深度学习与人工智能中可视化的实例,使得研发人员能够更加直观地诊断优化和呈现结构。

第10章总结了深度学习训练和推断中可能会涉及的、需要注意和调节的优化点,希望他山之石可以攻玉。

如果你有一定深度学习的经验,能够理解深度学习和TensorFlow的相关基础知识和使用技巧,那么可以直接阅读本书第5~10章。如果你是一名初学者,最好从第1章的基础知识开始学起。勘误和支持

由于水平有限,编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果你有更多的宝贵意见,请反馈给我们,我们会尽量为你提供最满意的解答,欢迎读者朋友加QQ群(687690969)进行技术交流。

你可以通过微博@高彦杰gyj,公共号“戏说AI大数据”,邮箱“gaoyanjie55@163.com”联系到高彦杰。

你也可以通过知乎专栏“神经网络学习与Tensorflow.实践”,邮箱“cangye@hotmail.com”联系到于子叶。

期待能够得到你的真挚反馈,在技术之路上互勉共进。致谢

感谢机械工业出版社华章公司的编辑杨福川和张锡鹏,在近半年的时间里始终支持我们的写作,是你们的鼓励和帮助引导我们顺利完成全部书稿。特别致谢

谨以此书献给我们最亲爱的爱人、家人、同事,以及众多热爱深度学习与人工智能技术的朋友们!第1章了解深度学习

本章将介绍什么是深度学习以及与深度学习有关的一些重要知识,比如深度学习的一些基础概念、应用和支撑技术。深度学习的内容非常广泛,所涉及的概念也很多,其发展遵循事物发展的“螺旋上升”规律。深度学习是人工智能技术之一,随着海量数据的累积、计算力的提升以及算法的进步,以及深度学习模型的灵活性和良好的拟合能力,形成了深度学习技术突破性的飞跃和应用。

希望本章能为读者建立全面的深度学习知识体系,为后续的学习和工作打下坚实的基础。1.1 什么是深度学习

深度学习的概念源于人工神经网络的研究,是人工智能的一个分支。包含多隐层的多层感知器就是一种深度学习结构。深度学习是通过层次结构来完成特征从形成到更加抽象的高层特征提取工作的,进而对样本进行预测。深度学习可以解决有监督学习、强化学习、无监督学习等问题。

神经网络算法是具有广泛适用性的一类算法,深度学习是人工神经网络的一个分支,具有深度网络结构的人工神经网络是深度学习最早的网络模型,深度神经网络相比于普通神经网络,其拥有更深更宽的网络结构,在此之上还有卷积层、LSTM等新的网络组件。

深度学习所涉及的组件和网络结构的其他概念将在后续章节进行详细的介绍。1.1.1 深度学习能解决的问题

深度学习具有解决广泛问题的能力,因为其拥有自动学习数据中的重要特征信息的能力。深度学习具备很强的非线性建模能力。众多复杂问题本质上都是高度非线性的,而深度学习实现了从输入到输出的非线性变换,这是深度学习在众多复杂问题上取得突破的重要原因之一。文本、图像、语音等问题都比较复杂,这就需要模型具有很强的非线性建模能力。

分类和回归是人工智能以及机器学习中两个非常重要的问题。

分类希望能够自动识别某种数据的类别。输入是样本,输出是样本应该属于的类别。一般情况下是这样的,首先通过已有的数据、已经标记的分类,通过训练得到可用的分类器模型,然后通过模型预测新输入数据的类别,例如针对不同类别动物的图像进行分类。举例来说,我们首先为每种动物照片指定特定的标签,例如飞机、车、鹿等,然后通过图像分类的算法建立一个分类模型,针对新的照片,分类器可以通过这个模型输出对应的标签。

如图1-1所示,分类器可以将图片分为三类。图1-1 分类问题

回归与分类相似,但是输出需要是连续的数据,根据特定的输入向量预测其指标值。例如,我们有历史股票的时间–价格信息,价格是连续数据,通过数据训练回归模型,最终将未来的时间信息输入到训练好的回归模型,回归模型能够预测未来时间点的价格。如图1-2所示,可以通过深度学习模型,基于历史的收盘价,学习回归模型,预测未来时间点的价格。图1-2 回归问题

深度神经网络能够灵活地对分类或回归问题进行建模和分析,这依赖于其对于特征的自动提取。例如,可以通过卷积层来表达空间相关性,通过RNN表达序列数据的时间连续性。另一个实例就是Word2Vec,通过浅层神经网络可以将单词转换为向量表示。

根据问题和数据的潜在特性,研究人员设计深度学习网络结构如何从输入到输出逐步提取对预测有影响的信息,进而将不同的网络组件组织连接起来。随着大数据的增长、计算力的提升、算法模型的进化,深度神经网络模型的复杂度也变得越来越高,这表现为深度与广度两方面的扩展。1.1.2 深度学习适用的领域

深度学习研究及应用的一个目标是算法及网络结构尽量能够处理各种任务,而深度学习的现状是在各个应用领域仍然需要结合领域知识和数据特性进行一定结构的设计。例如,自然语言处理任务的每一个输入特征都需要对大量的词、句等进行建模,并考虑语句中词汇之间的时间顺序。计算机视觉中的任务对每一个样本都需要处理大量的图像像素输入,并结合图像局部性等特性设计网络结构。下面是深度学习中的几个常见的适用领域。

1.计算机视觉

计算机视觉(Computer Vision)就是深度学习应用中的重要研究方向之一,是解决如何使机器“看”这个问题的科学。因为视觉对人类以及许多动物来说毫不费力,但是对计算机来说这个任务却充满了挑战。深度学习中有许多针对计算机视觉的细分研究和应用方向,图像识别、物体检测、人脸识别、OCR等。

通过以下几个计算机视觉的典型问题和应用,我们可以快速了解计算机视觉能够解决的问题。(1)图像识别

图像识别问题的输入是一张图片,输出图片中要识别的物体类别。自从2012年以来,CNN和其他深度学习技术就已经占据了图像识别的主流地位。在图像识别领域有一些公开的数据集和竞赛驱动着整体技术的发展,例如,ImageNet是目前世界上最大的图像识别数据库,是由美国斯坦福的计算机科学家,模拟人类的识别系统而建立的。(2)物体检测

物体检测问题的输入是一张图片,输出的是待检测物体的类别和所在位置的坐标,通过深度学习方式可以解决。有的研究方法将问题建模为分类问题,有的将其建模为回归问题。如图1-3所示,物体检测可以识别图像中的人、狗、车辆、马等。图1-3 物体检测(3)人脸识别

人脸识别又可以细分为很多子问题,例如,人脸检测是将一张图片中的人脸位置识别出来,人脸校准是将图片中人脸更细粒度的五官位置找出来,人脸识别是给定一张图片,检测数据库中与之最相似的人脸。(4)OCR

从早期的通用扫描文档识别,到银行卡、身份证、票据等证件识别以及车牌识别都属于OCR。

2.语音识别

工业界和学术界掀起的深度学习浪潮在语音识别领域取得了巨大的成功。RNN模型充分考虑了语音之间的相互关系,因此取得了更好的效果。深度学习在语音识别中的作用很大一部分表现在特征提取上,可以将其看成是一个更复杂的特征提取器。当然深度学习的作用不仅仅是特征提取,还逐渐涌现出了基于深度学习的端到端的解决方案。但这并不是说CNN在语音识别中无用武之地,我们一般习惯于利用CNN的良好训练与速度优势,而且其效果并不差。

3.自然语言处理

深度学习在自然语言处理中的应用越来越广泛,从底层的分词、语言模型、句法分析等到高层的对话管理、知识问答、聊天、机器翻译等方面几乎全部都有深度学习模型的身影,并且取得了不错的效果。

从数据上看,经过前些年互联网的发展,很多公司都完成了海量文本数据的积累。当数据量增大时,若模型较浅,则无法对海量数据中的非线性关系进行建模,从而不能带来性能上的提升。以深度神经网络为代表的深度模型,能够随着模型复杂度的增加,对数据进行更为精准的建模,进而获得更好的效果。

从算法上看,首先,Word2Vec的出现,使得我们可以高效地表示词,这在一定程度上缓解了语义问题,降低了输入特征的维度,从而降低了输入层的复杂度。

深度学习模型的灵活性,使得之前比较复杂的包含多流程的任务,可以使用端到端(End to End)的方法进行解决。当采用Encoder-Decoder架构后,模型可以将输入语言直接映射到输出语言,从而完成很多语言学问题。

4.自动驾驶

自动驾驶也是这几年逐渐应用深度学习进行开发的一个重要领域。自动驾驶的人工智能包含了感知、决策和控制等流程和模块。感知是指通过摄像头、激光雷达等传感器的输入,进而解析出周围环境的信息,例如有哪些障碍物,障碍物的速度和距离,道路的宽度和曲率等。决策是根据感知信息判断如何进行下一步的行进规划,控制是将决策信息作用于实车。而自动驾驶中又包含了很多细分子问题,如道路与车道线的检测、前车检测、行人检测和防撞系统,以及End to End的自动驾驶模型等。(1)基于规则(Rule Based)的方式

传统规则式的无人驾驶系统发展到现在,实车试验已经有十几年,研究更是有二三十年。业界和学术界主流还是基于规则系统,从车辆、传感器感知,然后进行决策、控制,最后到车辆,形成一个完整的闭环,每个流程又涉及大量的功能模块。(2)端到端的方式

英伟达在一款汽车应用产品中,用卷积神经网络(CNN)将车前部摄像头捕捉到的原始像素图映射为汽车的方向操控命令。这种强大的端到端技术意味着,只需要人们提供少量的训练数据,系统就能学会自动驾驶技术,无论有没有车道标志线,无论是在普通公路还是高速公路上都是如此。但是深度学习在带来简便的同时也存在着难以解决的问题。1.2 深度学习的技术发展

深度学习近年来的大范围应用和发展,除了要归功于大数据沉淀和计算能力的提升,同时也得益于深度学习模型的灵活性。反过来看传统的机器学习,每个算法都是针对特定的应用。AI工程师和研发人员更多的工作是在进行特征的抽取上。而深度学习则可以有更多样的输入和输出,例如任意维度的张量,甚至大小都是可以变化的。同时模型在设计上也很灵活,能对更加复杂的问题进行建模。我们也可以认为深度学习更像是一种语言,我们通过它来描述对问题的理解。下面将从基础技术、应用等维度展开深度学习技术的发展状况。1.2.1 基础技术发展

我们可以从框架层、硬件层、标准层对深度学习的基础技术进行关注,通过应用场景整体进行驱动后端的技术发展。接下来就从不同的层面对深度学习技术进行全面的了解。

1.框架

深度学习计算框架目前处于百花齐放的状态,也有开源后应用非常广泛的Google开源的TensorFlow、微软开源的CNTK和百度主推的PaddlePaddle、亚马逊主推的MXNet。

框架的多样性导致了深度学习框架前端用户接口的多样化,微软也推出了Visual Studio Tools for AI,可以在一套开发工具内集成各种框架进行开发。

深度学习框架的发展与编程语言的发展比较类似,随着编程语言的多样化与CPU架构的变化,有了后来的LLVM,将语言的前端与后端分离开来,为新语言和新硬件提供了非常好的支持。对于深度学习,类似于LLVM,产生了NNVM项目,其尝试将深度学习的前端与后端进行解耦。

2.硬件

深度学习的执行作业需要大量的矩阵和向量计算,基于GPU、FPGA、ASIC等异构硬支撑深度学习运算的场景在各大公司不断进行尝试。例如GPU适合模型训练,CPU由于大量存在也经常用作云端模型预测,但很多厂商也开始走FPGA路线。ARM主要用于手机等低功耗的场景,但很可能其很快就会被定制的FPGA/ASIC所取代。虽然目前的主流硬件是Nvidia GPU,但Intel正在试图通过下一代的神经引擎迎头赶上。

3.标准

随着框架和模型的发展,越来越多的公司和生产环境产生了大量不同标准的模型,模型和框架之间的转换是工程师和研究人员想要解决的问题。微软和Facebook发布了一个全新的开源项目——ONNX,欲借此打造一个开放的深度学习开发工具生态系统。该项目的目的是让不同的神经网络开发框架做到互通互用。早前,Microsoft Cognitive Toolkit、PyTorch和Caffe2均已宣布支持ONNX。后来,AMD、ARM、华为、IBM、英特尔、高通等同时宣布支持ONNX。研究人员可以轻易地在当前顶尖的机器学习工具之间进行转换,并为项目选择最好的组合方式。1.2.2 应用技术发展

深度学习在不同应用场景下的发展也十分迅速,其在语音、计算机视觉、自然语言处理等领域都取得了不俗的成绩,同时在原有机器学习的场景下,研究人员也在不断尝试使用深度学习的方案优化原有的解决方案。

1.深度学习在语音识别领域的发展

传统语音识别系统的代表方法是GMM-HMM等架构和方法。之后微软成功地将深度学习应用到语音识别系统中,相比之前的最优方法,单词错误率降低了很多。随后微软基于上下文相关的深度神经网络——隐马尔可夫模型,成功识别大词汇量语音,改变了语音识别系统的原有框架。目前许多国内外知名的语音研究机构,如微软、讯飞、Google等公司都在积极研究深度学习在语音识别上的应用。在应用层面,苹果Siri、微软小娜等应用,对开发者开放了语音识别API,语音识别的应用也在如火如荼地发展中。

2.深度学习在计算机视觉领域的发展

在声音、图像、文本三个领域中,深度学习在图像识别领域对识别效果的提升最为显著。公开数据集和竞赛,如ImageNet等,促进了深度学习在图像识别领域的进展。深度神经网络朝着更深层、更宽的网络结构,更快的计算方式和更高的利用率平台架构,更广泛的视觉应用领域发展。深度学习在计算机视觉领域的外延逐渐拓展开来,我们可以看到以下的应用。

·互联网领域:核身平台、直播美颜等。

·安防领域:机场安检、车牌定位、目标追踪等。

·日常生活:门禁系统、人脸识别、表情识别等。

如图1-4所示,在安防领域经过人脸检测、关键点定位与人脸对齐、人脸特征提取比对与认证可以实现人脸识别的身份识别系统。图1-4 人脸识别核身系统

3.深度学习在自然语言处理领域的发展

自然语言处理问题是深度学习在除了语音和图像处理之外的另一个重要的应用领域。数十年以来,自然语言处理的主流方法是基于统计的模型进行处理。我们可以看到深度学习对NLP的贡献。深度学习在NLP的细分领域取得了很大进展,比如机器翻译、问答系统、聊天机器人、情感分析等。同时深度学习也面临了很多挑战,即如何与领域知识、语言学知识结合;如何通过增强学习的方式利用环境提升系统;如何利用上下文学习和用户画像体现个性化的结果。

如图1-5所示的是用户体验与微软小冰进行对话的场景,小冰背后大量使用了深度学习技术。图1-5 对话机器人微软小冰1.3 深度学习的知识点汇总

如下列举内容所示,深度学习所涉及的知识点非常广泛,有基础理论、深度学习网络结构、测试基准数据集、开发框架、优化算法,以及机器学习中类似的问题——分类问题、回归问题、过拟合和欠拟合等。

深度学习知识点汇总

·应用问题

计算机视觉、语音识别、自然语言处理等。

·机器学习问题

分类、回归、特征提取等。

·数据集

ImageNet、Coco、MNIST等。

·工具

TensorFlow、CNTK、MXNet等。

·理论

优化算法、BP、BPTT、线性代数等。

·基础架构

训练平台、在线推断平台、云平台深度学习服务、GPU、FPGA等。1.3.1 深度学习的预备技术

1.编程语言

深度学习框架的底层实现语言大多是C++/C这样可以达到高运行效率的语言。操作语言更简单易用,按照发展趋势,Python将是未来深度学习的操作平台语言。同时很多框架都可以通过脚本的方式配置网络并且训练模型。

2.编程框架

·以TensorFlow、Caffe、CNTK、Torch、MXNet为主的深度学习功能性平台。这类平台提供了非常完备的基本模块,可以让开发人员快速创建深度神经网络模型并且开始进行训练,可以解决现今深度学习中的大多数问题,通常提供命令式、声明式的编程接口,或者提供可以通过配置文件配置的深度神经网络。但是这些模块很少将底层运算功能直接暴露给用户。

·以Keras为主的深度学习抽象化平台。Keras本身并不具有底层运算协调的能力,Keras依托于TensorFlow或者Theano进行底层运算,而Keras自身提供了神经网络模块的抽象化和训练中的流程优化。

·以NNVM为代表的深度学习编译器。NNVM是一个神经网络比较高级的中间表示模块,深度学习领域的编译器,它包含了图的表示以及与执行无关的各种优化。

·以Visual Studio Tools for AI为代表的集成化AI开发工具,可以在一个IDE下进行深度学习全流程以及多种框架的开发。

3.数学基础

要想学好深度学习需要有一定的数学基础,读者可以参考相应的书籍进行前置数学基础的学习与补充。深度学习主要涉及的数学知识点是高等数学、线性代数和概率论。高等代数中是导数、极值等知识点对应的求损失函数的最优值。线性代数中的向量和矩阵运算对应于深度学习中的数据和特征表示,以及基本的运算。概率论中的概率与条件概率、分布等知识点对应通过概率图对问题进行建模。1.3.2 深度学习的技术构成

1.深度学习中的特征表达

深度学习将AI工程师从繁重的特征工程中解脱出来,得益于一些自动化能学习模型中的特征。常见的一些特征表达网络结构有强化学习、CNN、Encoder、LSTM等。End to End模型将原有的细化模块通过端到端的深度学习解决方案,减少了特征工程与数据预处理的繁重工作。

2.深度学习模型

深度学习网络结构灵活,但其大多是由很多基本的网络结构组成而来的,分别是多层感知机(MLP,Multi-Layer Perceptron)、卷积神经网络(CNN,Convolutional Neural Network)以及循环神经网络(RNN,Recurrent Neural Network)。

MLP的结构特点是输入层与输出层之间存在一个或多个隐层。输入层用于获取外部输入信号,只有隐层和输出层的神经元为计算节点。每层都对上一层的输入进行加权处理,然后通过激活函数进行非线性变换,参数通过反向传播进行训练。

CNN最初应用于图像数据,根据图像数据特点进行近似与优化。除了通用的网络结构,CNN还包含了几个特有的网络组件,例如,卷积层、池化层、全连接层等。神经网络参数通过反向传播算法进行训练。

RNN应用于时序数据,例如文本和语音数据,RNN针对时序数据特点进行相应的网络结构设计。RNN由多个Cell按照时序串联而成,每个Cell都可以通过LSTM、GRU等进行实现。

3.深度学习应用

深度学习应用比较广泛,已经取得了比较好的应用效果的场景有图像识别、人脸识别、图像检测、OCR、语音识别、强化学习、自然语言处理等。

4.深度学习模型求解

深度学习模型求解中通常会涉及一些常用的算法,这些算法分别是遇到特定问题场景后对原有优化算法进行近似与优化,整体架构类似梯度下降,但对步长与梯度进行不同方式的优化产生了不同的变种。常用的优化算法有SGD、Adam、RMSprop等算法。

5.深度学习模型泛化

过拟合现象在深度学习训练过程中是比较容易出现的现象,为了解决过拟合的问题,通常可以通过Dropout、正则化、Data Augmentation、Batch Normalization等方式进行解决。1.3.3 深度学习向其他行业与技术领域的延伸

深度学习最初在互联网行业得到了大范围的应用与技术提升,随后逐步扩展深入到各行各业。接下来我们将通过深度学习技术在医疗、制造业和安防等领域的发展对其进行了解。

1.医疗

医疗领域可以获取的数据非常多样,常见的有基因数据、影像数据、疾病诊断文本数据等,深度学习逐步在以下几个领域进行了延伸。

·基因数据

通过基因数据可以对人类的健康和性格信息等进行解码。传统基因测序流程复杂,深度学习逐渐在基因分析领域崭露头角。

·影像数据

英伟达也将人工智能应用到发现新药物方面。英伟达凭借其技术,利用中心100亿份医学影像,进行深度学习训练开发,用于疾病的检测、诊断、治疗等场景。

·诊断文本数据

将自然语言处理技术应用到文本分析和诊断中,达到辅助医生进行诊疗的目的。

在医疗AI领域,各个巨头也在逐步布局。IBM Watson将人工智能应用到以肿瘤为重心,包括慢性病管理、精准医疗、体外检测等九大医疗领域。谷歌旗下的DeepMind将用人工智能研发医院支持系统,例如床位和需求管理软件、财务控制产品,以及面向初级医生的消息服务和任务管理工具。百度人工智能推出了百度医疗大脑。toC方面,百度医疗大脑可以模拟医生问诊流程,与用户进行多轮交流,依据用户的症状,反复验证之后给出相应的建议;toB方面,则为医院提供患者就诊过程中的症状描述,提醒医生更多的可能性,辅助基层医生完成问诊。阿里云发布了ET医疗大脑,可以在患者虚拟助理、医学影像、精准医疗、药效挖掘、新药研发、健康管理等领域承担医生助手的角色。

2.制造业

深度学习的多种技术都可以应用在制造业中。例如工程岩体的分类,目前主要是有经验的工程师通过仔细判断来进行分类,效率比较低,并且因为人为原因会有不同的判断偏差,图像识别技术可以进行辅助判断。对于汽车零部件厂商或汽车保险行业,目前深度学习技术应用于检查生产出的零件磨损种类与等级情况,从而实现无人化检测。在工业生产车间,深度学习技术可以大幅改善工业机器人的作业性能,提升制造流程的自动化和无人化。

3.安防

在现实生活中,安防系统已经开始使用越来越多的摄像头以及安检仪。这些都为深度学习在安防场景下的潜在应用做好了铺垫。

深度学习可以应用在安检仪、人脸识别核身、车牌检测、目标检测等多种应用场景中。

深度学习在进行图像检测和识别时,无须人为设定具体的特征,只需要准备好足够多的图进行训练即可,通过逐层的迭代就可以获得较好的结果。从目前的应用情况来看,只要加入新数据,并且有充足的时间和计算资源,随着深度学习网络层次的增加,识别率就会得到相应的提升,比传统方法的表现更好。1.4 深度学习工具与平台介绍

深度学习如火如荼地发展,各种深度学习框架相继开源。社区活跃并且应用广泛的深度学习工具包括TensorFlow、Keras、CNTK、Caffe、MXNet等。框架之间的用户抢夺愈演愈烈,目前较为火热的是TensorFlow,其在用户和使用范围上有较大的优势。开源框架的流行程度由很多因素共同决定。例如,开源产品本身优异的质量,背后企业成熟的社区运作,快速的迭代更新,活跃的社区和反馈,最终形成良性循环。1.4.1 深度学习框架

1.TensorFlow

TensorFlow是Google推出的深度学习框架,TensorFlow的用户可以快速设计深度学习网络,将底层细节进行抽象,而不用耗费大量时间编写底层CUDA或C++代码。

实现特点:TensorFlow支持自动求导,用户可以方便设计新的损失函数,并进行求解。TensorFlow内核通过C++进行开发,有较好的性能保证。为了兼容用户和降低学习曲线,TensorFlow也提供了Java、Python和Go的接口。本书后续内容将会调用TensorFlow Python接口进行讲解。

高层接口支持:随着社区的发展以及TensorFlow内部的支持,为了提升开发人员的生产力,TensorFlow逐步形成了一些高层的编程接口,如内置的TF.Learn和TF.Slim,这样用户可以更加简洁快速地设计和实验新的深度神经网络结构。在Python接口方面也兼容Scikit-learn的estimator接口,这样用户可以通过Scikit-learn完成参数搜索、交叉验证等机器学习流水线中的较为重要的环节。

平台支持:在TensorFlow的底层也可以基于CPU或者GPU进行模型训练,在单GPU的条件下,大多数的深度学习框架都依赖于cuDNN。对于大规模数据的深度学习,大数据量使得单机GPU的训练难以完成,需要分布式GPU集群来进行并行计算。

官网链接:https://www.tensorflow.org/。

2.CNTK

CNTK是微软开源的深度学习框架,是最早支撑语音识别的深度学习应用。它将神经网络描述成在有向图上的一系列计算步骤。在这个有向图中,叶子结点表示输入层或网络参数,其他的结点则表示成在输入层上的矩阵操作。CNTK是微软在Cortana数字助理和Skype翻译应用中使用的语音识别的系统框架。

模型支撑:在CNTK上可以很容易地实现及结合当今流行的模型,例如前馈神经网络(DNN)、卷积神经网络(CNN)、循环神经网络(RNN/LSTM)。在实现随机梯度下降学习时能够自动计算梯度。

设备支持:CNTK还能通过多个GPU或服务器实现并行计算。

官网:https://docs.microsoft.com/en-us/cognitive-toolkit/。

3.Caffe2

Caffe2是一个应用广泛的深度学习框架,在TensorFlow发布之前其一直是深度学习领域最为火热的项目。

Caffe2的核心概念是Layer,在深度神经网络中,每个模块都是一个Layer。Layer接收输入的向量化数据,经过计算后输出数据,Layer之间的组合与串联形成了复杂的深度学习网络结构。每个Layer都要定义两种运算:正向运算和反向传播算法。

Caffe2的优势具体如下。

接口简洁:容易上手,设计和书写网络均可通过配置文件的形式进行定义。训练速度快,底层通过cuDNN使用GPU加速网络训练。项目结构(清晰)且成模块化,能较快拓展到新的模型和学习任务上。

Model Zoo:Caffe2拥有大量己训练好的经典模型(AlexNet、VGG、Inception,等),收藏在Model Zoo中(github.com/BVLC/caffe/wiki/Model-Zoo)。在计算机视觉领域,Caffe2的应用较为广泛,可以用来做图片分类、位置检测、人脸识别等。

官网链接:https://caffe2.ai/。

4.MXNet

MXNet是DMLC推出的一款开源的深度学习框架,是亚马逊AWS主推的一款深度学习框架,AWS官方推荐使用MXNet进行深度学习编程。

接口支持:通过MXNet的命令式和符号式进行编程,可以使得效率和灵活性达到最大化。上层接口支持C++、Python、R、Julia、Go等语言,应用非常广泛。

设备支持:MXNet的核心组件是动态的依赖调度器,能将计算任务并行到多GPU或者分布式集群上。

官网链接:https://mxnet.apache.org/。

5.Pytorch

Torch是运行在LuaJIT上的高效科学计算库,可以进行深度学习网络的训练和推断。Torch创建较早,在Facebook开源深度学习组件之后,Torch得到了广泛的应用。Torch底层通过C++开发,上层通过Lua脚本语言进行调用。PyTorch运行在GPU或CPU之上,其具有基础的张量操作库,内置的神经网络库,模型训练功能,支持共享内存的多进程并发库。

模型支持:包含大量的机器学习、计算机视觉、视频、音频、语音处理的库。

设备支持:支持设计复杂的深度学习网络拓扑结构,并且可以并行化到CPU和GPU上。

官网链接:http://pytorch.org/。1.4.2 深度学习基础架构

深度学习技术发展迅速,深度学习框架层出不穷。为了方便算法工程师使用各类深度学习技术,减少繁杂的诸如运行环境部署运维等工作,提升GPU等硬件资源的利用率,节省硬件投入成本,对下我们需要通过AI基础平台管理GPU服务器集群,对上提供深度学习作业管理和监控。

1.PAI

PAI(Platform for AI)是一个由微软开源的、为人工智能作业设计的集群管理系统和资源调度平台。系统吸收了微软内部深度学习平台等成熟的设计经验,为深度学习产品应用或研究提供了支持。

PAI具有以下几个特点。

·支持AI作业,在GPU集群上运行深度学习作业,支持常用的主流深度学习框架。扩展性较好,提供的接口便于用户在集群上运行扩展新的框架。

·支持针对GPU资源的调度优化,提供丰富的监控指标,方便用户诊断问题和运维集群。

·吸收微服务的思想,内部服务组件和作业都包装为Docker容器,通过HDFS共享训练数据,训练中间结果及模型。

Github链接:https://github.com/Microsoft/pai。

如图1-6所示,PAI架构采用和集成主流集群管理系统和深度学习框架。图1-6 PAI基础架构

2.XLearning

奇虎360系统部大数据团队与人工智能研究院联合开发了深度学习调度平台——XLearning。

XLearning平台将大数据与深度学习相融合,基于Hadoop Yarn完成了对Tensor-Flow、MXNet、Caffe、Theano、PyTorch、Keras、XGBoost等常用深度学习框架的集成,是典型的“AI on Hadoop”的实现。XLearning从2017年4月份正式开发上线运行,经过多个版本的迭代更新,为各学习框架的使用者提供了统一、稳定的调度平台,实现了资源共享,极大地提高了资源利用率,并且具有良好的可扩展性和兼容性。目前已经在公司搜索、人工智能研究院、商业化、数据中心等业务部门广泛使用。

官网链接:https://github.com/Qihoo360/XLearning。1.4.3 深度学习开发工具

在深度学习和机器学习的开发与测试过程中,用户疲于在多种框架之间进行切换,可以通过下面的工具进行一站式深度学习的开发。

Visual Studio Tools For AI & Visual Studio Code Tools For AI

微软发布了Visual Studio Tools for AI,包含了基于Visual Studio的插件和基于Visual Studio Code的跨平台的插件,这是微软Visual Studio 2017 IDE的扩展,可以让开发人员和数据科学家将深度学习模型嵌入到应用程序中。

Visual Studio Tools for AI工具支持CNTK、TensorFlow、Caffe2等多种框架的开发。

微软还通过一个称为Visual Studio Code Tools for AI的跨平台扩展为其Visual Studio代码编辑器提供AI支持。

同时为物联网设备和Azure云平台等基础架构进行相应的集成,以便于用户将本地测试与平台运行训练集成到一套流水线中。

官网链接:https://www.visualstudio.com/downloads/ai-tools-vs/。1.4.4 深度学习辅助工具

在深度学习或迁移学习的过程中,我们可能会遇到多框架模型之间的转换问题,以及用户想可视化相应的模型。我们可以通过MMdnn工具进行相应的支持。

MMdnn

MMdnn是一套工具集,可以帮助用户在不同的深度学习框架之间进行协同开发。其包含深度学习模型转换、模型可视化等辅助深度学习开发的一系列工具。MMdnn现支持Caffe、Keras、MXNet、TensorFlow、CNTK、PyTorch和CoreML模型之间的转换。

官网链接:https://github.com/Microsoft/MMdnn。1.4.5 深度学习云平台服务

随着越来越多的公司将基础架构迁移到云平台,越来越多的深度学习开发人员也在基于云平台进行相应的服务开发。我们以微软Azure为例介绍其提供的基本深度学习服务。

微软Azure

Azure是微软提供的公有云平台,其提供了深度学习从下到上的一系列服务。(1)GPU虚拟机

Azure提供了多种类型针对GPU进行优化的虚拟机,其上挂载了单个或多个英伟达GPU。其中NC、NCv2和ND系列虚拟机是针对计算密集型和网络密集型应用进行相应优化的虚拟机,适用于深度学习和人工智能的应用。具体型号和配置可以参考下面的链接查询。

参考链接:https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sizes-gpu。(2)模型训练服务

Azure Batch AI是Azure Batch针对深度学习训练的一种服务。其底层用于管理GPU虚拟机,对用户提供作业提交接口,并进行训练作业管理。

官网链接:https://azure.microsoft.com/en-us/services/batch-ai/。(3)模型管理与部署

当用户训练好模型,后续的版本管理、部署、追踪、更新等都是产品化的人工智能流水线非常需要的。Azure机器学习模型管理服务,使得用户可以管理和部署机器学习的模型。其提供的功能具体如下。

·模型版本管理

·产品模型跟踪

·模型部署

·本地模型测试

·自动重训练模型

官网链接:https://docs.microsoft.com/en-us/azure/machine-learning/preview/model-ma-n-a-g-ement-overview。(4)深度学习应用API

微软认知服务(Microsoft Cognitive Services)集合了多种智能API以及知识API。服务集合了多种来自Bing、前“牛津计划”等项目的智能API。应用了这些API的系统可以让开发者集成大公司领先的模型和AI能力,能够更加快速方便地构建和使用深度学习技术的应用。

·图像

支持智能表标识图像、描述图像、人脸识别等。

·自然语言

支持自然语言处理、情感分析等。

·语音

支持语音识别等。

·知识

支持语义搜索、实体链接、推荐等。

·搜索

可以调用Bing搜索的API,支撑搜索场景。

官网链接:https://www.msra.cn/zh-cn/research/cognitive-services。1.5 本章小结

本章首先介绍了什么是深度学习,之后介绍了深度学习的适用领域,使得读者首先能够对整个深度学习有一个全面的了解。接下来逐步深入介绍深度学习技术的发展,以及深度学习基础技术和应用技术的发展,使得读者可以快速了解深度学习技术的前沿。为了能够让读者建立深度学习整体的知识树和体系化的知识结构,本章还介绍了深度学习的知识图谱。本章的最后介绍了深度学习的底层支撑技术和框架。

深度学习的算法原理,以及经典的网络结构CNN、RNN分别是什么?读者可以通过后续章节一探究竟。1.6 参考资料

·PAI链接:https://github.com/Microsoft/pai。

·微软Azure链接:https://azure.microsoft.com。第2章深度学习技术

本章将介绍深度学习技术的基本概念组件以及其中会涉及的技术要点,同时结合CNN、RNN等经典深度神经网络结构进行介绍。

深度神经网络涉及的组件较多,本章将结合各个组件的不同,结合网络结构对各个组件逐一进行理解,这有助于较快理解和掌握深度学习中涉及的技术点。

本章将涉及感知器、激活函数、多分类器等基本深度神经网络组件,也会涉及CNN中的卷积层、池化层等结构以及RNN中的LSTM等基本结构,最后还将介绍经典的优化算法。2.1 深度学习基础

深度学习起源于神经网络算法,属于最近几年人工智能的热点研究方向,学术界和工业界大量的研发人员都投入到了深度学习基础技术与应用的研发之中。在多个应用场景与应用领域,深度学习技术正在不断取得新的突破。

传统机器学习的处理方法一般需要进行大量的特征工程,利用预处理之后的数据训练一个模型,进而完成分类或回归等问题。相比而言,深度学习可以通过各种可训练的层,我们也可以将其看作是特征提取器,进而替代人工进行特征工程,达到自动化和提升机器学习的过程。同时深度学习通过多层非线性变换和组合,得到了更加有效的特征表示,获得了更强的模型拟合能力。

深度学习相比较于传统人工神经网络算法,包含了以下一些不同之处。第一是深度神经网络隐藏层层数更多。一般可以认为3个隐藏层以上就是一种深度学习结构,但是会引起参数爆炸造成模型时间与恐惧复杂度无法接受,为了解决这个问题,研发人员结合不同数据的特点设计了一些优化的网络组件,进而有了第二点的设计。第二是针对图像、文本等数据设计了相应的优化的网络结构,例如卷积层、池化层等,其大大减少了计算量与自由参数数量,提升了计算速度。第三是由于深度神经网络层数增多,相当于在参数一定的情况下,能够获得更多的参数组合,相比于单纯提升单隐藏层参数的神经网络参数其有更强的模型拟合能力。

我们可以通过图2-1对比不同的机器学习方式,了解其中的共性与差异。图2-1 机器学习与深度学习发展历程

图2-1显示了不同AI方式的对比区别,基于规则的系统、传统机器学习系统、表征学习系统和深度学习系统。从图2-1中可以看到从左到右,自动化学习所占的比重越来越高,人工编程或设计特征的工作越来越少。阴影框表示能够从数据中自动学习的组件(模型或深度学习中的层等)。

同时我们还可以看到,深度学习之所以深的原因是模型将特征工程和模型融合在一起了。2.1.1 感知器

理解深度神经网络,应该先理解神经网络的基本组成单元——神经元。神经元模型产生于感知器(Perceptron)模型,这个模型是神经网络具有代表性的模型。如图2-2所示的即为感知器模型。图2-2 感知器

如图2-2所示,感知器包含以下几个组成部分。

输入和权值:图2-2中的input代表输入,weight代表权重。一个感知器可以接收多个输入,然后将每个输入乘以权值,并求和(图2-2中的sum),最后传到下一步计算。

激活函数:图2-2中的activation function位置代表激活函数,感知器的激活函数可以有很多选择,例如Sigmoid、ReLU函数等。图2-2中使用阶跃函数作为例子。

输出:将激活函数的输出作为感知器的输出。2.1.2 激活函数

激活函数设计的初衷是能够向神经网络加入非线性因素,使得神经网络可以更好地拟合复杂问题。随着深度学习的发展,越来越多的激活函数将被设计出来。

Sigmoid函数曾广泛地应用于全连接神经网络中,其公式形式以及优缺点简介如下:

·优势:导数计算简单,梯度下降更加容易实现与计算。

·劣势:由图2-3所示的Sigmoid函数几何图形可以看到,自变量取值在0附近时,函数斜率较大;当远离0的两侧取值时,斜率趋近于0,容易发生梯度消失,迭代算法的收敛速度很慢,有些情况下甚至不会收敛。同时其输出均值不为0,这也是其劣势所在。图2-3 Sigmoid函数几何图形

为了弥补Sigmoid等激活函数计算梯度时产生的问题,更多的激活函数被设计了出来,由图2-4中,我们可以看到几种激活函数的几何形状对比。图2-4 Sigmod函数几何图形

ReLU(Rectified Liner Units)是一种效果更好、收敛更快的激活函数。函数如下:

ReLU的取值范围为[0,∞],这样ReLU就可以将取值变换到整个正数范围,这会导致训练过程中数值无限增长的问题,而Sigmod只能是[0,1]。

ReLU能够缓解梯度消失的问题。Sigmoid的导数只有在0附近的时候才有比较好的激活性,在正负饱和区其梯度都接近于0,所以这会造成梯度弥散,而ReLU函数的梯度在大于0的部分为常数,所以不会产生梯度消失现象。Relu函数在参数为负数时的导数为0,所以一旦神经元激活值为负,那么梯度就会为0,从而这个神经元不会经历训练,也就是我们所说的稀疏性。

ReLU函数的导数计算更快,程序实现就是一个if-else条件判断语句,而Sigmoid函数需要进行浮点运算。虽然程序分支结构并不是推荐的结构,但是由于e指数计算复杂,因此实际上修正线性函数是更加快速的选择。

AlexNet的论文中证明,对于相同的网络结构,ReLU为激活函数,收敛速度相比Tanh快6倍以上。

由于以上的优点,ReLU成为了现有大部分CNN首选的的激活函数。2.1.3 输入层、隐藏层、输出层

神经网络结构如图2-5所示。图2-5 神经网络结构

将多个相同的神经元组织成层,并且多个层之间还可以组合成深度学习的网络结构。图2-5中的每个圆圈都是一个神经元,每条边表示两个神经元之间的连接,边上带有权重。神经元被分成了多层,层与层之间的感知器有边进行连接,但是在一般情况下,层内之间的神经元是没有边进行连接的。最左边的层(Layer L1)称为输入层,输入层接收传入神经网络的输入数据;最右边的层(Layer L3)是输出层,负责输出预测结果。输入层和输出层之间的层称为隐藏层(Layer L2),隐藏层可以有多个。

有很多隐藏层的神经网络称为深度神经网络。2.1.4 前向传播与反向传播求导

如图2-6所示的为一个最为简化的前向传播与反向传播的过程,其过程可以推广到更为复杂的深度学习网络结构。图2-6a所示的为前向传播的过程,使用x,y作为输入,通过激活函数f作用产生输出z。图2-6b展示的为反向传播的过程。L代表损失函数,其接收预测值输出z和样本的真实值,用于求损失函数对x的导数,和损失函数对y的导数。由于L和x之间有函数的嵌套,因此我们可以通过链式法则,逐层进行导数的求解,如图2-6b所示,dL/dx=dL/dz×dz/dx,同理,通过链式法则可以求解L对y的导数。对应神经网络结构,x和y经常表示为w权重,求解的原理也相同。图2-6 前向传播与反向传播2.2 CNN

卷积神经网络(CNN)是深度学习技术中重要的网络结构之一,其在计算机视觉问题中的应用取得了非常好的效果,并且在ImageNet、Coco等竞赛数据集上取得了不俗的成绩。通过深度学习CNN的处理方式,我们可以发现CNN相比于图像处理算法的优点在于,CNN可以直接输入原始图像,这就避免了对图像复杂的前期预处理与特征工程。同时CNN相较于传统的神经网络全连接的方式,规避了产生的参数量过大的问题,CNN可以通过局部连接、权值共享等方法进行优化,提升计算速度并节省空间占用。

例如,CNN处理图像识别这个典型的问题,图片被识别不仅仅取决于图片本身,还取决于图片是如何被观察也就是如何进行特征的提取。CNN的设计初衷也是来源于人类对视觉信息的识别过程。例如,人脸识别中经过层层的卷积之后,所能够学习和提取的特征形状、概念也变得越来越抽象和复杂,CNN会尽可能地寻找最能解释训练数据的特征提取方式。

CNN图像处理的过程就是在进行信息抽取,巨大的网络可以逐层进行抽取并不断获取关键的图像特征,同时整个过程相比于传统机器学习来说是自动化的。2.2.1 前馈网络解决图像存在的问题

如果训练前馈神经网络,使用物体位于中间的数据训练模型,则会造成模型只对中间位置的节点的权重进行调节。如果物体位于其他位置,则模型将会无法进行识别。

为了解决各个位置的物体识别问题,可以构建大量物体位于不同位置的数据,对模型进行训练,同时还需要增加网络层数,提高模型拟合能力。

那么是否有办法优化模型,减少扩充数据集等代价,将学习到的物体规律扩展到图像的其他位置,进而不同位置共享相同的权重?因为不管是左侧的物体也好,还是右侧相同的物体也罢,大家都是形状相同的物体。

深度学习CNN通过卷积层和池化层可以将不同位置的特征都提取出来,进而消除前馈神经网络对位置的依赖性,进而大大提升了模型的效率,减少构建数据集的开销。

接下来的几个章节将介绍卷积神经网络的基本组件。2.2.2 卷积神经网络

如图2-7所示的是CNN的通用结构,CNN通用结构可能包含图中所示的一些组件,组件个数和排布方式由具体模型和试用数据及应用场景确定。CNN中可能包含卷积层、池化层、Flatten层、全连接层和输出层等网络结构,具体每种网络结构的作用,我们可以在后续的章节中进行详细介绍。首先我们需要了解图像的几个不变性,进而才能理解后续各个组件的设计初衷。图2-7 CNN通用结构2.2.3 图像的几个不变性

2.2.1节前馈神经网络解决图像的问题中,我们可以了解到位置不变性造成模型需要增加训练数据和提高拟合能力的问题,图像中其实还存在其他类型的不变性问题,如图2-8所示。而我们希望模型对同样的物体,不管是位置不同,分辨率不同,还是放置方向不同等情况都能将其准确地识别出来。图2-8 图像数据不变性

我们希望所建立的网络能够尽可能地满足这些不变性特点。一般的思路是通过数据增强或优化模型结构来解决相应问题。

·平移不变性(Translation Invariance)

解决:卷积层、权值共享、池化层。

·旋转视角不变性(Rotation/Viewpoint Invariance)

解决:数据增强,对数据进行旋转Rotation。卷积层和池化层。

·尺寸不变性(Size Invariance)

解决:Inception。2.2.4 卷积

卷积层是CNN中的重要的组件,它不仅能够通过各种卷积核提取图像特征,还能够通过卷积优化传统全连接层的计算量。

1.基本结构

如果使用过图像处理软件Photoshop,就会发现其内部有一些滤镜,例如锐化、模糊、高反差识别等,它们会用一个矩阵来处理图像的每个小片,进而得到一个画面的转换,CNN的卷积计算正是通过类似于这种方式进行的特征提取。例如,PS中的低通滤镜通常可以用来降噪,高通滤镜可以得到图像的细微纹理。之所以通过这样的方式也是因为图像的特征大多存在于相邻像素之间,对应到CNN的卷积核就是,通过计算小区域内像素之间的关系进而来提取局部特征。

输入图像,在深度方向上由很多个slice组成,对于其中一个slice,可以对应很多神经元,神经元的权重参数(weight)表现为卷积核的形式,即一个方形的滤波器(filter)(如图2-9或图2-10中的3×3部分),这些神经元各自分别对应图像中的某一个局部区域(local

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载