前言
本书简洁且全面地介绍了现代神经网络、人工智能和深度学习技术,专门为软件工程师和数据科学家设计。它是另外两本著作Deep Learning with Keras[1]和TensorFlow 1.x Deep Learning Cookbook[2]的延续。
本书目标
本书对过去几年中深度学习技术的演进做了概括,并给出了用Python写的数十种可运行的深度神经网络代码,它们都是用基于类Keras[1] API的模块化深度网络库TensorFlow 2.0实现的。
本书将循序渐进地介绍有监督学习算法,包括简单线性回归、经典多层感知器,以及更为复杂的深度卷积网络和生成对抗网络。本书还涵盖无监督学习算法,包括自编码器和生成网络,并对循环网络和长短期记忆网络进行详细解释。此外,本书还会对深度强化学习进行全面介绍,并涵盖深度学习加速器(GPU和TPU)、云开发以及在桌面系统、云服务、移动设备/物联网(IoT)和浏览器上的多环境部署。
实际应用包括将文本分类为预定义类别、语法分析、语义分析、文本合成以及词性标注。书中我们还会探讨图像处理,包括手写数字图像识别、图像分类以及具有相关图像注释的高级对象识别。
声音分析包括识别来自多个扬声器的离散语音。本书还介绍使用自编码器和GAN生成图像,使用强化学习技术构建能够自主学习的深度Q学习网络。实验是本书的精髓。每个网络都增加了多种变体,这些变体通过更改输入参数、网络形状、损失函数和优化算法来逐步提高学习性能。本书还提供在CPU、GPU和TPU上进行训练的对比。本书将介绍新领域AutoML,在该领域中,我们将学习如何高效和自动地构建深度学习模型。第15章专门介绍机器学习相关的数学知识。
机器学习、人工智能和深度学习寒武纪爆炸
人工智能(Artificial Intelligence,AI)为本书讨论的所有内容奠定了基础。机器学习(Machine Learning,ML)是AI的一个分支,而深度学习(Deep Learning,DL)又是ML中的一个子集。下面简要讨论本书中经常出现的这三个概念。
AI表示机器模仿人类通常表现出的智能行为的任何活动。更正式地说,这是一个研究领域,机器旨在复制认知能力,例如学习行为、与环境的主动交互、推理和演绎、计算机视觉、语音识别、问题求解、知识表示和感知。AI建立在计算机科学、数学和统计学以及心理学和其他研究人类行为的科学的基础上。建立AI有多种策略。在20世纪70年代和20世纪80年代,“专家”系统变得非常流行。这些系统的目标是通过用大量手动定义的if-then规则表示知识来解决复杂的问题。这种方法适用于非常特定的领域中的小问题,但无法扩展到较大的问题和多领域中。后来,AI越来越关注基于统计的方法。
ML是AI的一个子学科,它专注于教授计算机如何对特定任务进行学习而无须编程。ML背后的关键思想是可以创建从数据中学习并做出预测的算法。ML有三类:
- 有监督学习,向机器提供输入数据及期望输出,目的是从这些训练实例中学习,以使机器可以对从未见过的数据做出有意义的预测。
- 无监督学习,仅向机器提供输入数据,机器随后必须自己寻找一些有意义的结构,而无须外部监督或输入。
- 增强学习,机器充当代理,与环境交互。如果机器的行为符合要求,就会有“奖励”;否则,就会受到“惩罚”。机器试图通过学习相应地发展其行为来最大化奖励。
DL在2012年席卷全球。在那一年,ImageNet 2012挑战赛[3]发起,其目的是使用大型手工标记数据集的子集来预测照片的内容。名为AlexNet[4]的深度学习模型达到了15.3%的top-5错误率,这与早前的结果相比有了显著改进。根据《经济学人》[5]的说法,“突然之间,人们开始关注深度学习,不仅是在AI社区内部,而且是整个技术行业。”自2012年以来,我们看到了对ImageNet图像进行分类的多个模型的持续进展[5](见图1),错误率低于2%,优于5.1%的预计人为错误率。
图1 ImageNet 2012上不同的深度学习模型实现的top-5准确度
那仅仅是开始。如今,DL技术已成功应用于异构领域,包括但不限于医疗保健、环境工程、绿色能源、计算机视觉、文本分析、多媒体、金融、零售、游戏、模拟、工业、机器人技术和自动驾驶汽车。在每一个领域中,DL技术都可以以一定的准确度解决问题,而这是以前的方法无法实现的。
毫无疑问,人们对DL的兴趣也在增加。有报告[9]显示,“每20分钟就会有新的ML论文发表。机器学习论文的增长率约为每月3.5%,每年50%”。在过去的三年中,我们好像生活在DL的寒武纪大爆炸中,arXiv上论文数量的增长速度超过了摩尔定律(见图2)。正如评论所说:“这使你感到人们相信这是计算的未来价值的来源。”
图2 arXiv上ML论文数量似乎比摩尔定律增长更快(源自:https://www.kdnuggets.com/2018/12/deep-learning-major-advances-review.html
)
arXiv是电子预印本的存储库,预印本尚未进行完整的同行评审。
深度学习模型的复杂性也在增加。ResNet-50是一种图像识别模型(参见第4章和第5章),具有约2600万个参数。每个参数都是用于微调模型的权重。Transformer、gpt-1、bert和gpt-2[7]都是自然语言处理模型(参见第8章),具备在文本上执行各种任务的能力。这些模型的参数从3.4亿个逐渐增加到15亿个(见图3)。近期,Nvidia声称自己能够在短短53分钟内训练出具有83亿个参数的已知最大模型。这项训练使Nvidia可以构建最强大的模型来处理文本信息(https://devblogs.nvidia.com/training-bert-with-gpus/
)。
图3 多种深度学习模型的参数数量增长
除此之外,计算能力也在显著提升。GPU和TPU(参见第16章)是深度学习加速器,它们使得在较短时间内训练出大型模型成为可能。TPU3于2018年5月发布,计算能力约为360 TFLOPS(每秒万亿次浮点运算),是2017年5月发布的TPU2的两倍。一个完整的TPU3 pod可以提供100 PFLOPS(每秒千万亿次浮点运算)的机器学习性能,而TPU2 pod只能达到11.5 TFLOPS。
仅仅不到一年,每个pod就提升了10倍(见图4),从而可以更快地进行训练。
图4 TPU加速器性能(单位:PFLOPS)
然而,DL的增长不仅仅在于更高的准确度、更多的研究论文、更大的模型以及更快的加速器,在过去的四年中,还观察到了一些其他趋势。
第一,灵活的编程框架的使用率增加,例如Keras[1]、TensorFlow[2]、PyTorch[8]和fast.ai。这些框架在ML和DL社区中激增,并提供了一些令人印象深刻的结果,正如我们将在本书中看到的那样。根据2019年Kaggle的“State of the Machine Learning and Data Science”,基于19 717位Kaggle(https://www.kaggle.com/
)用户的回复,Keras和TensorFlow无疑是最受欢迎的选择(见图5)。TensorFlow 2.0是本书讨论的框架,该框架融合了Keras和TensorFlow 1.x的强大功能。
图5 深度学习框架使用率
第二,云上使用带有加速器(参见第16章)的托管服务(参见第12章)的可能性增加。这让数据科学家无须管理基础设施开销,而可以专注于ML问题。
第三,在更多异构系统中部署模型的能力不断增强:移动设备、物联网设备,甚至是台式机和笔记本电脑中通常使用的浏览器(参见第13章)。
第四,对如何使用越来越复杂的DL架构的理解加深,这些DL架构有稠密网络(参见第1章)、卷积网络(参见第4章和第5章)、生成对抗网络(参见第6章)、词嵌入(参见第7章)、循环网络(参见第8章)、自编码器(参见第9章)以及强化学习(参见第11章)等。
第五,新的AutoML技术的出现可以使不熟悉ML技术的领域专家轻松而有效地使用ML技术(参见第14章)。AutoML可以减轻为特定应用领域找到正确模型的负担,缩短模型微调以及确定作为ML模型输入的正确特征集(针对特定应用问题)的时间。
以上5个趋势在2019年达到顶峰,三位深度学习之父Yoshua Bengio、Geoffrey Hinton和Yann LeCun因为概念和工程方面的突破已使深度神经网络成为计算的重要组成部分而获得了图灵奖,ACM A. M.图灵奖旨在奖励那些对计算机领域做出持久和重大技术贡献的个人(引自ACM网站:https://awards.acm.org/
)。许多人认为该奖项是计算机科学的诺贝尔奖。
回顾过去的10年,DL对科学和工业界的贡献令人着迷和激动。有理由相信,今后DL的贡献会不断增加。的确,随着DL领域的不断发展,我们期望DL会提供更多令人兴奋和令人着迷的贡献。
本书旨在涵盖以上5个趋势,展示深度学习的“魔力”。我们将从简单的模型开始,然后逐步引入越来越复杂的模型。
本书读者对象
如果你是具有ML经验的数据科学家或对神经网络有所了解的AI程序员,那么你会发现本书是使用TensorFlow 2.0作为DL的实用切入点。如果你是对DL风潮感兴趣的软件工程师,那么你会发现本书是你扩展该主题知识的基础平台。本书要求读者具备Python的基本知识。
本书内容
本书的目的是讨论TensorFlow 2.0的特性和库,给出有监督和无监督机器学习模型的概述,并提供对深度学习和机器学习模型的全面分析。书中提供了有关云、移动设备和大型生产环境的切实可行的示例。
第1章将逐步介绍神经网络。你将学习如何在TensorFlow 2.0中使用tf.keras层来构建简单的神经网络模型。然后将讨论感知器、多层感知器、激活函数和稠密网络。最后将对反向传播进行直观介绍。
第2章将比较TensorFlow 1.x和TensorFlow 2.0编程模型。你将学习如何使用TensorFlow 1.x的较低级别的计算图API,以及如何使用tf.keras的较高级别的API。新功能将包括动态计算、AutoGraph、tf.Datasets和分布式训练。该章还将提供tf.keras与估算器(estimator)之间的简要比较,以及tf.keras与Keras之间的比较。
第3章将重点介绍最流行的ML技术:回归。你将学习如何使用TensorFlow 2.0估算器来构建简单模型和多回归模型。你将学习使用逻辑回归来解决多类分类问题。
第4章将介绍卷积神经网络(CNN)及其在图像处理中的应用。你将学习如何使用TensorFlow 2.0构建简单的CNN来识别MNIST数据集中的手写字符,以及如何对CIFAR图像进行分类。最后,你将了解如何使用预训练的网络,例如VGG16和Inception。
第5章将讨论CNN在图像、视频、音频和文本处理方面的高级应用。该章将详细讨论图像处理(迁移学习、DeepDream)、音频处理(WaveNet)和文本处理(情感分析、Q&A)的示例。
第6章将重点介绍生成对抗网络。我们将从第一个提出的GAN模型开始,并使用它来伪造MNIST字符。该章将使用深度卷积GAN来创建名人图像,将讨论SRGAN、InfoGAN和CycleGAN等各种GAN架构,涵盖一系列出色的GAN应用程序。最后,该章以用于转换冬季夏季图像的CycleGAN的TensorFlow 2.0实现结束。
第7章将描述什么是词嵌入,并特别参考两个传统的流行嵌入:Word2Vec和GloVe。该章将介绍这两个嵌入背后的核心思想,如何从你自己的语料库生成它们,以及如何在你自己的网络中将它们用于自然语言处理(NLP)应用程序。然后,该章将介绍基本嵌入方法的各种扩展,例如,使用字符三元统计模型代替单词(fastText),用神经网络(ELMO、Google Universal Sentence Encoder)替换静态嵌入来保留单词上下文,语句嵌入(InferSent、SkipThoughts),以及用预训练的语言模型进行嵌入(ULMFit、BERT)。
第8章将描述循环神经网络(RNN)的基本架构,以及它如何很好地适应序列学习任务(如NLP中的序列学习任务)。该章将涵盖各种类型的RNN、LSTM、门控循环单元(Gated Recurrent Unit,GRU)、peephole LSTM和双向LSTM,还将深入介绍如何将RNN用作语言模型。然后将介绍seq2seq模型,这是一种最初用于机器翻译的基于RNN的编码器-解码器架构。接下来将介绍注意力机制,以增强seq2seq架构的性能,最后将介绍Transformer架构(BERT、GPT-2),该架构来自论文“Attention is all you need”。
第9章将介绍自编码器,这是一类试图将输入重新创建为目标的神经网络。该章将涵盖各种自编码器,例如,稀疏自编码器和降噪自编码器。本章将训练降噪自编码器,以消除输入图像中的噪声。之后将演示如何使用自编码器来创建MNIST数字。最后,将介绍构建LSTM自编码器以生成句子向量所涉及的步骤。
第10章深入研究无监督学习模型。该章将涵盖聚类和降维所需的技术,例如,PCA、k-均值和自组织图。该章将详细介绍玻尔兹曼机及其TensorFlow实现。涵盖的概念将扩展到构建受限玻尔兹曼机(Restricted Boltzmann Machine,RBM)。
第11章将重点介绍强化学习。从Bellman Ford等式开始,该章将涵盖折扣奖励以及折扣因子等概念。然后将解释基于策略和基于模型的强化学习。最后,将建立一个深度Q学习网络(Deep Q-learning Network,DQN)来玩Atari游戏。
第12章将讨论云环境以及如何利用它来训练和部署模型。该章将介绍为DL设置Amazon Web Services(AWS)所需的步骤,还将介绍为DL应用设置谷歌云平台所需的步骤以及如何为DL应用设置微软Azure。该章将包括各种云服务,使你可以直接在云上运行Jupyter Notebook。最后,该章将介绍TensorFlow Extended。
第13章将介绍用于移动设备和物联网的TensorFlow技术。首先将简要介绍TensorFlow Mobile,然后将更详细地介绍TensorFlow Lite。该章将讨论Android、iOS和Raspberry Pi(树莓派)应用程序的一些示例,以及部署预训练模型的示例,例如MobileNet v1、v2、v3(为移动和嵌入式视觉应用程序设计的图像分类模型)、用于姿势估计的PoseNet(估计图像或视频中人物姿势的视觉模型)、DeepLab分割(将语义标签(例如狗、猫、汽车)分配给输入图像中每个像素的图像分割模型)和MobileNet SSD对象检测(使用边框检测多个对象的图像分类模型)。该章将以一个联合学习的示例作为结尾,该联合学习示例是一种新的机器学习框架,分布在数百万个移动设备上。
第14章将介绍令人兴奋的领域——AutoML。该章将讨论自动数据准备、自动特征工程和自动模型生成,还将介绍AutoKeras和Google Cloud AutoML及其针对Tables、Vision、Text、Translation和Video的多种解决方案。
第15章将讨论深度学习相关的数学知识。该章将深入探讨进行深度学习时发生了什么。该章以有关深度学习编程和反向传播起源的简短历史开始,接下来介绍一些数学工具和推导过程,这有助于我们理解概念。该章的其余部分将详细介绍反向传播及其在CNN和RNN中的一些应用。
第16章将介绍TPU,TPU是Google开发的一种特殊芯片,用于超快速执行神经网络数学运算。在该章中,我们将比较三代TPU、边缘TPU与CPU和GPU。该章将包含使用TPU的代码示例。
软硬件准备
为了能够顺利地阅读各章,你将需要以下软件:
- TensorFlow 2.0或更高版本
- Matplotlib 3.0或更高版本
- scikit-learn 0.18.1或更高版本
- NumPy 1.15或更高版本
硬件要求如下:
- 32位或64位架构
- 2 GHz以上CPU
- 4 GB RAM
- 至少10 GB的可用硬盘空间
下载示例代码
本书的示例代码可以从http://www.packtpub.com
通过个人账号下载,也可以访问华章图书官网http://www.hzbook.com
,通过注册并登录个人账号下载。
排版约定
本书中使用以下排版约定。
代码体:表示文本、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟URL、用户输入和Twitter的内容,如下所示:“此外,我们将真实标签分别加载到Y_train
和Y_test
中并对它们执行独热编码。”
代码块及命令行如下:
粗体:表示新术语和重要单词。例如:“我们的简单网络开始时的准确度为92.22%,这意味着在100个字符中,不能正确识别的字符大约有8个。”
警告或重要提示。
提示和小技巧。