本书系统地讲解了深度学习的基本知识、建模过程和应用,并以深度学习在推荐系统、图像识别、自然语言处理、文字生成和时间序列中的具体应用为案例,详细介绍了从工具准备、数据获取和处理到针对问题进行建模的整个过程和实践经验,是一本非常好的深度学习入门书。
俞栋、张察博士亲笔作序力荐,谷歌、微软、Twitter、Facebook、Airbnb等公司多位博学数据科学家倾情力荐。
本书从如何准备深度学习的环境开始,手把手地教读者如何采集数据,如何运用一些常用,也是目前被认为有效的一些深度学习算法来解决实际问题。覆盖的领域包括推荐系统、图像识别、自然语言情感分析、文字生成、时间序列、智能物联网等。不同于许多同类的书籍,本书选择了Keras作为编程软件,强调简单、快速的模型设计,而不去纠缠底层代码,使得内容相当易于理解。读者可以在CNTK、TensorFlow和Theano的后台之间随意切换,非常灵活。即使你有朝一日需要用更低层的建模环境来解决更复杂的问题,相信也会保留从Keras中学来的高度抽象的角度审视你要解决的问题,让你事半功倍。
谢梁
现任微软云计算核心存储部门首席数据科学家,主持运用机器学习和人工智能方法优化大规模高可用性并行存储系统的运行效率和改进其运维方式。具有十余年机器学习应用经验,熟悉各种业务场景下机器学习和数据挖掘产品的需求分析、架构设计、算法开发和集成部署,涉及金融、能源和高科技等领域。曾经担任美国道琼斯工业平均指数保险业成分股的旅行家保险公司分析部门总监,负责运用现代统计学习方法优化精算定价业务和保险运营管理,推动精准个性化定价解决方案。在包括Journal of Statistical Software等专业期刊上发表过多篇论文,担任Journal of Statistical Computation and Simulation期刊以及Data Mining Applications with R一书的审稿人。本科毕业于西南财经大学经济学专业,博士毕业于纽约州立大学计量经济学专业。
鲁颖
现任谷歌硅谷总部数据科学家,为谷歌应用商城提供核心数据决策分析,利用机器学习和深度学习技术建立用户行为预测模型,为产品优化提供核心数据支持。曾在亚马逊、微软和迪士尼美国总部担任机器学习研究科学家,有着多年使用机器学习和深度学习算法研发为业务提供解决方案的经验。热衷于帮助中国社区的人工智能方面的研究和落地,活跃于各个大型会议并发表主题演讲。本科毕业于复旦大学数学专业,博士毕业于明尼苏达大学统计专业。
劳虹岚
现任微软研究院研究工程师,是早期智能硬件项目上视觉和语音研发的核心团队成员,对企业用户和消费者需求体验与AI技术的结合有深刻的理解和丰富的经验。曾在Azure和Office 365负责处理大流量高并发的后台云端研究和开发,精通一系列系统架构设计和性能优化方面的解决方案。拥有从前端到后端的丰富经验:包括客户需求判断、产品开发以及最终在云端架构设计和部署。本科毕业于浙江大学电子系,硕士毕业于美国南加州大学(USC)电子和计算机系。
目录
1 准备深度学习的环境 1
1.1 硬件环境的搭建和配置选择 . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1 通用图形处理单元 . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.2 你需要什么样的 GPU 加速卡 . . . . . . . . . . . . . . . . . . . . 6
1.1.3 你的 GPU 需要多少内存 . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.4 是否应该用多个 GPU . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.2 安装软件环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.2.1 所需软件列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.2.2 CUDA 的安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.2.3 Python 计算环境的安装 . . . . . . . . . . . . . . . . . . . . . . . . 13
1.2.4 深度学习建模环境介绍 . . . . . . . . . . . . . . . . . . . . . . . . 15
1.2.5 安装 CNTK 及对应的 Keras . . . . . . . . . . . . . . . . . . . . . 17
1.2.6 安装 Theano 计算环境 . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.2.7 安装 TensorFlow 计算环境 . . . . . . . . . . . . . . . . . . . . . . 25
1.2.8 安装 cuDNN 和 CNMeM . . . . . . . . . . . . . . . . . . . . . . . 27
2 数据收集与处理 28
2.1 网络爬虫 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.1.1 网络爬虫技术 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.1.2 构造自己的 Scrapy 爬虫 . . . . . . . . . . . . . . . . . . . . . . . 30
2.1.3 构造可接受参数的 Scrapy 爬虫 . . . . . . . . . . . . . . . . . . . 35
2.1.4 运行 Scrapy 爬虫 . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.1.5 运行 Scrapy 爬虫的一些要点 . . . . . . . . . . . . . . . . . . . . . 38
2.2 大规模非结构化数据的存储和分析 . . . . . . . . . . . . . . . . . . . . . 40
2.2.1 ElasticSearch 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.2.2 ElasticSearch 应用实例 . . . . . . . . . . . . . . . . . . . . . . . . 44
3 深度学习简介 57
3.1 概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.2 深度学习的统计学入门 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.3 一些基本概念的解释 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
3.3.1 深度学习中的函数类型 . . . . . . . . . . . . . . . . . . . . . . . . 62
3.3.2 深度学习中的其他常见概念 . . . . . . . . . . . . . . . . . . . . . 65
3.4 梯度递减算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.5 后向传播算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
4 Keras 入门 72
4.1 Keras 简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.2 Keras 中的数据处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
4.2.1 文字预处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
4.2.2 序列数据预处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
4.2.3 图片数据输入 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
4.3 Keras 中的模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
4.4 Keras 中的重要对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
4.5 Keras 中的网络层构造 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
4.6 使用 Keras 进行奇异值矩阵分解 . . . . . . . . . . . . . . . . . . . . . . . 102
5 推荐系统 105
5.1 推荐系统简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
5.2 矩阵分解模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
5.3 深度神经网络模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
5.4 其他常用算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
5.5 评判模型指标 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
6 图像识别 121
6.1 图像识别入门 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
6.2 卷积神经网络的介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
6.3 端到端的 MNIST 训练数字识别 . . . . . . . . . . . . . . . . . . . . . . . 127
6.4 利用 VGG16 网络进行字体识别 . . . . . . . . . . . . . . . . . . . . . . . 131
6.5 总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
7 自然语言情感分析 136
7.1 自然语言情感分析简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
7.2 文字情感分析建模 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
7.2.1 词嵌入技术 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
7.2.2 多层全连接神经网络训练情感分析 . . . . . . . . . . . . . . . . . 140
7.2.3 卷积神经网络训练情感分析 . . . . . . . . . . . . . . . . . . . . . 143
7.2.4 循环神经网络训练情感分析 . . . . . . . . . . . . . . . . . . . . . 144
7.3 总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
8 文字生成 147
8.1 文字生成和聊天机器人 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
8.2 基于检索的对话系统 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
8.3 基于深度学习的检索式对话系统 . . . . . . . . . . . . . . . . . . . . . . . 159
8.3.1 对话数据的构造 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
8.3.2 构造深度学习索引模型 . . . . . . . . . . . . . . . . . . . . . . . . 162
8.4 基于文字生成的对话系统 . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
8.5 总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
9 时间序列 173
9.1 时间序列简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
9.2 基本概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
9.3 时间序列模型预测度的衡量 . . . . . . . . . . . . . . . . . . . . . . . 178
9.4 时间序列数据示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
9.5 简要回顾 ARIMA 时间序列模型 . . . . . . . . . . . . . . . . . . . . . . . 181
9.6 循环神经网络与时间序列模型 . . . . . . . . . . . . . . . . . . . . . . . . 186
9.7 应用案例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
9.7.1 长江汉口月度流量时间序列模型 . . . . . . . . . . . . . . . . . . 190
9.7.2 国际航空月度乘客数时间序列模型 . . . . . . . . . . . . . . . . . 203
9.8 总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
10 智能物联网 210
10.1 Azure 和 IoT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
10.2 Azure IoT Hub 服务 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
10.3 使用 IoT Hub 管理设备概述 . . . . . . . . . . . . . . . . . . . . . . . . . . 215
10.4 使用.NET 将模拟设备连接到 IoT 中心 . . . . . . . . . . . . . . . . . . . . 218
10.5 机器学习应用实例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
1.1 硬件环境的搭建和配置选择
从事机器学习,一个好的硬件环境是必不可少的。在硬件环境的选择上,并不是一定选择最贵的就会有好的效果,很多时候可能付出了 2 倍的成本,但是性能的提升却只有 10%。深度学习的计算环境对不同部件的要求不同,因此这里先简要讨论一下硬件的合理搭配。如果您不差钱,则可以跳过本节。另外,虽然目前有一些云服务供应商提供 GPU 计算能力,并且一键部署,听起来不错,但是基于云计算的 GPU 实例受到两个限制。首先,普通的廉价 GPU 实例内存稍小,比如 AWS 的 G2 实例目前只支持单GPU 4GB 的显存;其次,支持较大显存的实例费用比较高,性价比不高。比如 AWS 的P2 实例使用支持每 GPU 12GB 内存的 K80 GPU,每小时费用高达 0.9 美元。但是 K80GPU 属于 Kepler 架构,是两代前的技术。另外,在实际使用中需要开启其他服务以使用 GPU 实例,各种成本加起来每月的开支还是很可观的,很可能 6 个月的总开支够买一台配置较新 GPU 的全新电脑了。
在搭配深度学习机器而选择硬件的时候,通常要考虑以下几个因素。
(1) 预算。这个非常重要。如果预算足够,当然可以秉承最贵的就是好的理念来选择。但是当预算有一定限制的时候,如何搭配部件来较大化性能,尽量减少瓶颈就是很重要的考量了。
(2) 空间。这里特指机箱的空间。大部分新的 GPU 都是双风扇的,因此对机箱尺寸要求很高。如果你已经有一个机箱了,那么选择合适尺寸的 GPU 就成为先的考虑;如果新配机箱,那么全尺寸的大机箱是好的选择。这是因为大机箱通风好,同时可以为以后添加多个 GPU 进行升级留有余地;另外,大机箱通常有多个 PCIe 的背板插槽可以放置多个 PCIe 设备。一般现在的 GPU 卡都会占据两个 PCIe 的插槽空间,因此背板插槽越多越好。
(3) 能耗。性能越好的 GPU 对能源的要求越高,而且很可能是整个系统里能耗较高的部件。如果已经有一台机器了,只是要添加一个 GPU 来做学习用,那么选择性能一般但是能耗低的 GPU 卡是比较明智的;如果需要高密度计算,搭配多个 GPU 并行处理,那么对电源的要求非常高,一般来说,搭配 4GPU 卡的系统至少需要 1600W 的电源。
(4) 主板。对主板的选择非常重要,因为涉及跟 GPU 的接口选择。一般来说,至少需要一块支持 PCIe 3.0 接口的主板。如果以后要升级系统到多个 GPU,那么还需要支持 8 16 芯 PCIe 电源接口的主板,这样可以连接最多 4 个 GPU 进行 SLI 并联。对于 4个 GPU 这个限制,是因为目前好的主板也只支持最多 40 条 PCIe 通道(16x, 8x, 8x,8x 的配置)。多个 GPU 并行加速比并不能达到,毕竟还是有些额外开销的。比如系统需要决定在哪个 GPU 上进行这个数据块对应的计算任务。我们后面会提到, CNTK计算引擎的并行加速性很好,在使用多个 GPU 时值得考虑。
(5) CPU。 CPU 在深度学习计算中的作用不是非常显著的,除非使用 CPU 进行深度学习算法的计算。因此如果你已经有一台电脑的话,就不用太纠结是否要升级 CPU了;但是如果要新搭建系统,那么在 CPU 的选择上还是有些考量的,这样可以使系统利用 GPU 的能力较大化。首先要选择一个支持 40 条 PCIe 通道的 CPU。不是所有的CPU 都支持这么多的 PCIe 通道,比如 haswell 核心的 i5 系列 CPU 就支持最多 32 条通道。其次要选择一个高频率的 CPU。虽然系统使用 GPU 做具体的计算,但是在准备模型阶段 CPU 还是有重要作用的,因此选择使用在预算内主频高、速度快的 CPU 还是比较重要的。 CPU 的核心数量不是一个很重要的指标,一般来说,一个 CPU 核心可以支持一块 GPU 卡。按照这个标准,大部分现代的 CPU 都是合格的。
(6) 内存。内存容量还是越大越好,以减少数据提取的时间,加快和 GPU 的交换。一般原则是按照 GPU 内存容量的至少两倍来配置主机内存。
(7) 存储系统。对于存储系统的能力,除要容量大以外,主要体现在计算时不停地提取数据供应 GPU 进行计算方面。如果做图像方面的深度学习,数据量通常都非常大,因此可能需要多次提取数据才能完成一轮计算,这个时候存储系统读取数据的能力就成为整个计算的瓶颈。因此,大容量的 SSD 是好的选择。现在的 SSD 读取速度已经超过 GPU 从 PCIe 通道装载数据的速度。如果使用传统的机械硬盘,组成 RAID 5 也是一个不错的选择。如果数据量不是很大,那么这个考虑就不那么重要了。
(8) GPU。 GPU 显然是最重要的选择,对整个深度学习系统的影响较大。相对于使用 CPU 进行计算, GPU 对于提高深度学习的速度是众所周知的事情,通常我们能见到5 倍左右的加速比,而在大数据集上这个优势甚至达到了 10 倍。尽管好处明显,但是如何在控制性价比的条件下选择一个合适的 GPU 却不是一件简单的事情。因此,我们在下面的章节中将详细讨论如何选择 GPU。
书很不好,看得我秒秒钟想撕,一样东西,它解释起来怎么就那么费劲,思维异于常人?而且很多行业术语也很……异于常人?很抵触这样的书……而且前面大篇幅介绍硬件方面东西,虽然我承认部署环境是很重要,但是读的过程中给我的感觉就是……偏离主题了……重点没有突出,介绍一个知识点往往浅尝辄止,倒是一直在提深度学习这个词,然并卵,连深度学习的思想也没有介绍到,所以很贵,太不值这个钱……爱买书的girl的客观测评over另,送你们两页,我不知道为什么这样解释
书很不好,看得我秒秒钟想撕,一样东西,它解释起来怎么就那么费劲,思维异于常人?而且很多行业术语也很……异于常人?很抵触这样的书……而且前面大篇幅介绍硬件方面东西,虽然我承认部署环境是很重要,但是读的过程中给我的感觉就是……偏离主题了……重点没有突出,介绍一个知识点往往浅尝辄止,倒是一直在提深度学习这个词,然并卵,连深度学习的思想也没有介绍到,所以很贵,太不值这个钱……爱买书的girl的客观测评over另,送你们两页,我不知道为什么这样解释
不错,还没看,不过听说很厉害,好好学
对最近的学习工作很有帮助,希望能通过这本书的学习提高自己的能力
正版书籍,实用性强