首页>参考读物>计算机科学与技术>人工智能

深度学习实战
作者 : [美]杜威·奥辛格(Douwe Osinga)著
译者 : 李君婷 闫龙川 俞学豪 高德荃 译
出版日期 : 2019-04-25
ISBN : 978-7-111-62483-7
定价 : 89.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 258
开本 : 16
原书名 : Deep Learning Cookbook
原出版社: OReilly Media, Inc.
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书的第1章从深度学习相关的基本概念开始,介绍了典型的神经网络结构和各种层的设计特点,然后对深度学习中常见的数据集进行了介绍,最后对数据预处理和数据集的划分进行了细致的阐述。第2章是与深度神经网络调试相关的通用技巧,主要涉及到如何解决遇到的问题,包括排查错误、结果检查、选择激活函数、正则化和Dropout、训练参数设置等技巧。第3章到第15章以实际例子的形式,介绍深度学习在文本处理、图像处理、音乐处理等方面的技巧,涵盖了深度学习主要应用领域和数据类型,内容非常丰富。最后一章作者从实际生产系统使用的角度告诉读者如何在生产系统中部署机器学习应用,这使得本书的内容更加贴近实际,更加完整。

图书特色

图书前言

深度学习简史
当前深度学习的热潮,其根源可令人惊讶地追溯到20世纪50年代。虽然“智能机器”的模糊概念可以进一步追溯到更早期的科幻小说和各类科学设想中,但是到了20世纪50年代和60年代,才真正出现了“人工神经网络”的最初理念,该理念基于有关生物神经元的一个极简模型。在这些模型中,由Frank Rosenblatt提出的感知机系统引起了大家的极大兴趣。通过连接到一个简单的“照相机”回路,它可以学会区分不同类型的物体。该系统的第一个版本以软件形式在IBM计算机上运行,但是其后续的版本都是用纯硬件来实现的。
对多层感知机(Multilayer Perceptron,MLP)模型的兴趣在20世纪60年代持续不断。到了1969年,Marvin Minksy和Seymour Papert出版了《感知机》(Perceptrons,MIT出版社)一书,彻底改变了这种形势。这本书证明了线性感知器不能对非线性函数(XOR)的行为进行分类。虽然该证明存在局限性(该书出版时,非线性感知器模型已被提出,作者也注意到了这一问题),但是该书的出版预示着神经网络模型研究基金的急剧减少。直到20世纪80年代,随着新一代研究人员的逐步崛起,相关研究才得以恢复。
随着计算能力的提高以及反向传播(back-propagation)技术的发展(反向传播技术自20世纪60年代被提出以来,有很多种不同的形式,但是直到80年代才开始普遍应用),人们对神经网络重新产生了兴趣。不仅计算机拥有了训练更大型网络的能力,我们也拥有了有效训练更深层网络的能力。最初的卷积神经网络将这些技术发展与哺乳动物大脑的视觉识别模型结合起来,首次产生了能够有效地识别诸如手写数字和人脸等复杂图像的网络。卷积网络通过将相同的“子网络”应用到图像的不同位置并将这些结果聚合到更高级的特征中来实现这一点。在本书第12章中,我们会详细介绍这方面的内容。
20世纪90年代和21世纪00年代初期,随着支持向量机(SVM)和决策树等更“易于理解”的模型变得流行,人们对神经网络的兴趣再次出现了下降。对于当时许多数据源来说,SVM被证明是非常优秀的分类器,特别是在与人工特征相结合时更是如此。在计算机视觉中,“特征工程”开始变得流行起来。该技术涉及为图片中的小元素构建特征检测器,并人工将其组合成能够识别更复杂形态的模型。后来科研人员发现,深度学习网络也能够学会识别类似的特征,并能够学会以非常相似的方式组合这些特征。在第12章中,我们将会探讨这些网络的内部工作机制,并对深度学习网络所学的内容进行可视化。
21世纪00年代后期,随着图形处理单元(GPU)通用编程的出现,神经网络架构在竞争中取得了长足的进步。GPU包含数千个微处理器,它们可以每秒并行执行数万亿次操作。GPU最初是为计算机游戏开发的,主要目的是实现复杂3D场景实时渲染,事实证明,GPU也能够用于并行训练神经网络,可以实现10倍或更高倍数的计算速度提升。
另外一件促使深度学习领域长足进步的事情,是互联网的发展为其提供了大量可用的训练数据。以往研究人员只能使用数千幅图像训练分类器,现在已经可以提供几千万甚至数以亿计的图像了。结合更大型的网络,神经网络技术现在迎来了绽放光芒的机会。这种优势仅在最近几年才开始持续出现,伴随着技术改进与现实应用,神经网络技术逐步应用到了图像识别之外的很多领域,包括机器翻译、语音识别和图像合成。
为什么是现在
计算能力和改进技术的爆发式发展,使人们对于神经网络的兴趣逐步增加,同时我们也看到了神经网络技术在可用性上取得了巨大的进步。特别是像TensorFlow、Theano和Torch这样的深层学习框架使得非专业人士也能够构建出复杂的神经网络来解决自己的机器学习问题。这使得以往需要数月甚至数年手动编码和辛勤付出(编写高效的GPU内核真的十分困难!)的任务,转变成为任何一个人都可以在一下午(或者几天内)完成的任务。可用性的提升极大地增加了有能力开展深度学习问题研究的人员数量。正如本书在后续章节中将展示的那样,具有更高抽象级别的框架,比如Keras,使得任何具有Python和相关工具知识的人都能够开展一些有趣的实验。
回答“为什么是现在”这个问题的第二个要素是,每个人都可以使用大型的数据集。是的,Facebook和Google在访问数十亿图片、用户评论方面仍占据优势,但是你也可以通过各种数据源获得包含数百万条目的数据集。在第1章中,我们将会探讨各种可选的数据源,并且纵览全书,每章的示例代码通常都会在各章开头向你展示如何获得所需的训练数据。
与此同时,私营公司也开始生产和收集更大数量级的数据,这使得整个深度学习领域在商业上忽然变得越来越令人着迷。一个能辨别猫和狗的模型已经非常不错了,然而一个能够在使用所有历史销售数据的基础上将销售额提升15%的模型,对于一个公司来说则可能意味着生死存亡。
你需要知道什么
如今,对于深度学习来说,有很多平台、技术和编程语言可供选择。在本书中,所有的例子都是用Python编写的,并且大部分代码的实现都依赖于优秀的Keras框架。本书的示例代码可以在GitHub上的Python notebook中找到,每章的代码存放在一个notebook中。因此,对读者来说,具备以下知识技能将有助于阅读本书:
Python
Python 3是首选版本,你也可以使用Python 2.7。我们会用到各类helper库,你可使用pip轻松安装它们。本书涉及的代码大都比较简单易懂,所以即使是一名新手也可以跟着本书进行实践。
Keras
机器学习的繁重工作几乎全部是由Keras完成的。Keras是对TensorFlow或Theano深度学习框架的抽象封装。Keras能够轻松地使用可读的方式定义神经网络。本书中所有代码均在TensorFlow框架下完成了测试,但也适用于Theano框架。
NumPy、SciPy、scikit-learn
在很多技巧中用到了这些很有用且广泛使用的代码库。大多数情况下,从上下文中应该能弄清楚其功能,但是对它们进行快速浏览也不会耽误阅读。
Jupyter notebook
notebook是一种很好的共享代码的方式,它允许在浏览器中将代码、代码的输出和注释混合在一起显示出来。
每章都包括了对应的notebook,其中包括了工作代码。本书中代码省略了如导入一类的细节,因此,最好的方法是从Git上下载代码,启动本地的notebook。首先,检查代码并进入新的目录:
git clone https://github.com/DOsinga/deep_learning_cookbook.git
cd deep_learning_cookbook
然后,设置项目的虚拟环境:
python3 -m venv venv3
source venv3/bin/activate
安装依赖程序包:
pip install -r requirements.txt
如果你有GPU并想使用它们,你需要卸载tensorflow,安装tensorflow-gpu,使用pip可以很容易地做到这一点:
pip uninstall tensorflow
pip install tensorflow-gpu
你还需要兼容GPU的函数库,这可能有点麻烦。
最后,启动IPython notebook服务器:
jupyter notebook
如果一切顺利,这将自动打开一个带有notebook概况的浏览器,每章一个。你可以任意修改代码,如果你要回到原来的基线,可以使用Git很容易地撤销所做的任何修改:
git checkout .ipynb
每章的第1节列出相关的notebook,由于已经按照章节顺序对notebook进行了编号,所以一般来说你很容易找到它们。在notebook文件夹,你还会发现其他3个目录:
Data
包含notebook所需的数据——大多数是开放数据集的例子或者那些太烦琐而无法自己生成的东西。
Generated
用于存储中间数据。
Zoo
包含与每章对应的子目录,每个子目录中是该章保存的模型。如果你没有时间实际训练模型,可以从这里载入这些模型直接运行。
本书如何组织
第1章详细介绍了神经网络如何工作,从哪里获取数据,以及如何进行数据预处理以便于使用。第2章讨论面临的困境以及如何处理。众所周知,神经网络很难调试,而本章介绍一些如何让它们表现良好的诀窍,在阅读本书其余部分面向项目的技巧时将会派上用场。如果你没有耐心读完,你可以跳过这一章,等你陷入困境时再回来阅读。
第3~15章围绕各种媒体类型展开介绍,先是从文本处理开始,然后是图像处理,最后第15章是音乐处理。每章将一个项目分解为几个不同的技巧。通常,每章从数据获取技巧开始,接着是几个帮助你完成本章目标的技巧和一个数据可视化的技巧。
第16章介绍在实际生产系统中使用模型。在notebook上做实验很棒,但最终我们想和实际用户分享我们的结果,让模型在真实的服务器或移动设备上运行。这一章将完成这些内容。
本书的一些约定
下面是本书在印刷方面的一些约定。
斜体字
表示URL、电子邮件地址、文件名和文件扩展名。
等宽字体
用于程序列表,以及在段落内的程序元素,如变量或函数名、数据库、数据类型、环境变量、语句和关键字。
斜体等宽字体
表示一些可被用户指定值替换的或者根据上下文而确定的文本。
表示提示或建议。
表示一般性的注释。

本书代码
本书的每章都带有一个或多个Python notebook,其中包含了本章提到的示例代码。你可以在不运行代码的情况下阅读这些章节,但是在你阅读时运行这些代码会更加有趣。这些代码可以在https://github.com/DOsinga/deep_learning_cookbook中找到。
在shell中执行下面的命令,可以获得并执行技巧中的示例代码:
git clone https://github.com/DOsinga/deep_learning_cookbook.git
cd deep_learning_cookbook
python3 -m venv venv3
source venv3/bin/activate
pip install -r requirements.txt
jupyter notebook
本书是为了帮助你完成工作。所有notebook中附带代码获得了Apache License 2.0授权许可。
我们欢迎但不要求引用本书。引用信息通常包括标题、作者、出版商和ISBN号码。例如“Deep Learning Cookbook by Douwe Osinga (O扲eilly). Copyright 2018 Douwe Osinga, 978-1-491-99584-6”。

上架指导

计算机科学及应用

封底文字

深度学习并没有那么可怕。直到最近,这项机器学习方法还要经过数年的学习才能掌握,但是有了如Keras和TensorFlow这样的框架后,没有机器学习背景的软件工程师也可以快速进入这个领域。通过本书中的技巧,你将学会解决深度学习在生成和分类文本、图像和音乐方面的问题。
本书每章包括完成独立项目所需的几个技巧,如训练一个音乐推荐系统。如果你陷入了困境,作者还在第2章提供了6个技巧来帮助你。本书中的例子用Python语言编写,代码在GitHub上以Python notebook集合的方式提供。

通过本书,你将学会:
■ 创建为真实用户服务的应用
■ 使用词嵌入计算文本的相似性
■ 基于维基百科链接建立电影推荐系统
■ 通过可视化的内部状态了解AI看待世界的原理
■ 建立一个为文本片段推荐表情符号的模型
■ 重用预训练的神经网络构建反向图像搜索服务
■ 比较GAN、自动编码器和LSTM如何生成图标
■ 检测音乐的风格并检索歌曲集

对于那些喜欢实际结果胜过理论的人们,本书是开始深度学习的非常好的方法。它帮助了我的新音乐初创公司Weav的工程师团队快速地熟悉深度学习。对于任何对学习实际机器学习感兴趣的人来说,本书非常完美。
                              ——拉尔斯·拉斯穆森
                              Google地图联合创始人

作者简介

[美]杜威·奥辛格(Douwe Osinga)著:Douwe Osinga曾供职于Google,是一位经验丰富的工程师、环球旅行者和三个初创企业的创始人。他的流行软件项目网站(https://douweosinga.com/projects)涉及包括机器学习在内的多个有趣的领域。

译者序

深度神经网络是一种层数更多、规模更大的人工神经网络,较传统神经网络在处理能力上有大幅的提升。2006年,加拿大多伦多大学的教授杰弗里·辛顿(Geoffrey Hinton)在深度信念网络方面进行了卓越的工作,开辟了深度学习这个新的技术领域。目前,深度学习技术已经成为新一代人工智能技术的研究与开发热点,得到了全球的普遍关注,每天都有相关的报道,每年有大量的论文发表,不断刷新着语音识别、图像分类、商品推荐等各应用领域智能处理水平的纪录。与此同时,深度学习模型难以解释、参数调优困难、参数规模大、训练周期长等问题也困扰着研究和开发人员。
如何让深度学习模型设计更加简洁高效,如何处理模型参数调试中遇到的困扰和难题,如何将深度学习快速地应用到具体的业务领域,这些都是深度学习技术研究与开发者需要掌握的内容。本书作为一本聚焦深度学习实际应用的开发指南,很好地解决了这些问题。本书的作者是一位资深的软件工程师,有着丰富的软件开发和调试经验。本书记录了作者从实际工作中总结出来的很多开发技巧,非常适合开发实际应用的深度学习工程师阅读和参考。
本书的第1章从深度学习相关的基本概念开始,介绍了典型的神经网络结构和各种层的设计特点,然后对深度学习中常见的数据集进行了介绍,最后对数据预处理和数据集的划分进行了细致的阐述。第2章是与深度神经网络调试相关的通用技巧,主要涉及如何解决遇到的问题,包括排查错误、检查结果、选择激活函数、正则化和Dropout、设置训练参数等技巧。第3~15章以实际例子,介绍了深度学习在文本处理、图像处理、音乐处理等方面的技巧,涵盖了深度学习主要应用的领域和数据类型,内容非常丰富。最后一章作者从实际使用的角度告诉读者如何在生产系统中部署机器学习应用,使得本书的内容更加贴近实际。
深度学习的技术还处在不断迭代更新的阶段,每天都有新的研究进展发布,新的开发工具开源,以及新的技术挑战出现。本书的内容是当前深度学习设计开发技巧的总结,需要读者在实践中不断尝试,进而提升自己的技术水平,这样才会不断加深对深度学习技术的理解和把握,创造出更加优秀的算法、模型和应用。希望读者朋友在深度学习的实践中不断总结提炼,贡献出更多优秀的图书作品。
每一次翻译工作都是一次难忘的学习之旅,我们非常珍惜这个机会。非常感谢本书的作者和机械工业出版社华章分社的编辑,是他们辛勤的工作为我们创造了难得的机会,让我们能够和广大读者一起走进深度学习的世界,领略新一代人工智能技术的风采。这里还要感谢公司同事和家人的大力支持,他们的鼓励给了我们不断前进的动力。本书翻译过程中,我们努力表达作者的真知灼见,但因水平有限,难免有词不达意的地方和疏漏之处,敬请读者朋友不吝赐教。

译者
2018年12月

图书目录

前言1
第1章 工具与技术9
1.1 神经网络的类型9
1.2 数据获取19
1.3 数据预处理27
第2章 摆脱困境34
2.1 确定我们遇到的问题34
2.2 解决运行过程中的错误36
2.3 检查中间结果38
2.4 为最后一层选择正确的激活函数39
2.5 正则化和Dropout40
2.6 网络结构、批尺寸和学习率42
第3章 使用词嵌入计算文本相似性44
3.1 使用预训练的词嵌入发现词的相似性45
3.2 Word2vec数学特性47
3.3 可视化词嵌入49
3.4 在词嵌入中发现实体类51
3.5 计算类内部的语义距离55
3.6 在地图上可视化国家数据57
第4章 基于维基百科外部链接构建推荐系统58
4.1 收集数据58
4.2 训练电影嵌入62
4.3 构建电影推荐系统66
4.4 预测简单的电影属性67
第5章 按照示例文本的风格生成文本69
5.1 获取公开领域书籍文本69
5.2 生成类似莎士比亚的文本70
5.3 使用RNN编写代码74
5.4 控制输出温度76
5.5 可视化循环神经网络的活跃程度78
第6章 问题匹配80
6.1 从Stack Exchange网站获取数据80
6.2 使用Pandas探索数据82
6.3 使用Keras对文本进行特征化83
6.4 构建问答模型84
6.5 用Pandas训练模型86
6.6 检查相似性88
第7章 推荐表情符号90
7.1 构建一个简单的情感分类器90
7.2 检验一个简单的分类器93
7.3 使用卷积网络进行情感分析95
7.4 收集Twitter数据97
7.5 一个简单的表情符号预测器99
7.6 Dropout和多层窗口100
7.7 构建单词级模型102
7.8 构建你自己的嵌入104
7.9 使用循环神经网络进行分类106
7.10 可视化一致性/不一致性108
7.11 组合模型111
第8章 Sequence-to-Sequence映射113
8.1 训练一个简单的Sequence-to-Sequence模型113
8.2 从文本中提取对话115
8.3 处理开放词汇表117
8.4 训练seq2seq 聊天机器人119
第9章 复用预训练的图像识别网络123
9.1 加载预训练网络124
9.2 图像预处理124
9.3 推测图像内容126
9.4 使用Flickr API收集一组带标签的图像128
9.5 构建一个分辨猫狗的分类器129
9.6 改进搜索结果131
9.7 复训图像识别网络133
第10章 构建反向图像搜索服务137
10.1 从维基百科中获取图像137
10.2 向N维空间投影图像140
10.3 在高维空间中寻找最近邻141
10.4 探索嵌入中的局部邻域143
第11章 检测多幅图像145
11.1 使用预训练的分类器检测多个图像145
11.2 使用Faster RCNN进行目标检测149
11.3 在自己的图像上运行Faster RCNN152
第12章 图像风格155
12.1 可视化卷积神经网络激活值156
12.2 尺度和缩放159
12.3 可视化神经网络所见161
12.4 捕捉图像风格164
12.5 改进损失函数以提升图像相干性168
12.6 将风格迁移至不同图像169
12.7 风格内插171
第13章 用自编码器生成图像173
13.1 从Google Quick Draw中导入绘图174
13.2 为图像创建自编码器176
13.3 可视化自编码器结果178
13.4 从正确的分布中采样图像180
13.5 可视化变分自编码器空间183
13.6 条件变分编码器185
第14章 使用深度网络生成图标189
14.1 获得训练用的图标190
14.2 将图标转换为张量表示193
14.3 使用变分自编码器生成图标194
14.4 使用数据扩充提升自编码器的性能196
14.5 构建生成式对抗网络198
14.6 训练生成式对抗网络200
14.7 显示GAN生成的图标202
14.8 将图标编码成绘图指令204
14.9 训练RNN绘制图标205
14.10 使用RNN生成图标207
第15章 音乐与深度学习210
15.1 为音乐分类器创建训练数据集211
15.2 训练音乐风格检测器213
15.3 对混淆情况进行可视化215
15.4 为已有的音乐编制索引217
15.5 设置Spotify API219
15.6 从Spotify中收集播放列表和歌曲221
15.7 训练音乐推荐系统224
15.8 使用Word2vec模型推荐歌曲225
第16章 生产化部署机器学习系统228
16.1 使用scikit-learn最近邻计算嵌入229
16.2 使用Postgres存储嵌入230
16.3 填充和查询Postgres存储的嵌入231
16.4 在Postgres中存储高维模型233
16.5 使用Python编写微服务234
16.6 使用微服务部署Keras模型236
16.7 从Web框架中调用微服务237
16.8 Tensorflow seq2seq模型238
16.9 在浏览器中执行深度学习模型240
16.10 使用TensorFlow服务执行Keras模型243
16.11 在iOS中使用Keras模型245

教学资源推荐
作者: [希]西格尔斯·西奥多里蒂斯(Sergios Theodoridis) 著
作者: [日]杉山将(Masashi Sugiyama) 著
作者: [美]马修 T.梅森(Matthew T. Mason)著
参考读物推荐
作者: [美]道格·罗斯(Doug Rose) 著
作者: 吴茂贵 郁明敏 杨本法 李涛 张粤磊 著
作者: [日]石黑 浩(Hiroshi Ishiguro),[日]浅田 稔(Minoru Asada),[日]大和 信夫(Nobuo Yamato) 著