
编辑推荐
《Keras快速上手:基于Python的深度学习实战》编辑推荐
《Keras快速上手:基于Python的深度学习实战》从如何准备深度学习的环境开始,手把手地教读者如何采集数据,如何运用一些最常用,也是目前被认为最有效的一些深度学习算法来解决实际问题。覆盖的领域包括推荐系统、图像识别、自然语言情感分析、文字生成、时间序列、智能物联网等。不同于许多同类的书籍,《Keras快速上手:基于Python的深度学习实战》选择了Keras作为编程软件,强调简单、快速的模型设计,而不去纠缠底层代码,使得内容相当易于理解。读者可以在CNTK、TensorFlow和Theano的后台之间随意切换,非常灵活。即使你有朝一日需要用更低层的建模环境来解决更复杂的问题,相信也会保留从Keras中学来的高度抽象的角度审视你要解决的问题,让你事半功倍。
《Keras快速上手:基于Python的深度学习实战》以实际应用为导向,强调概念的认知和实用性,对理论的介绍深入浅出,对读者的数学水平要求较低,读者在学习完毕后能使用案例程序举一反三地应用到其具体场景中。《Keras快速上手:基于Python的深度学习实战》覆盖当前最热门的传统数据挖掘场景和四个深度学习应用场景,根据我们市场调研,是目前独一一本以应用为导向的介绍机器学习和深度学习的专业书籍,具备很高的参考价值和学术价值。
名人推荐
数据挖掘与深度学习毫无疑问是大数据时代最炙手可热的研究方向。在很多前沿领域,深度学习的出现和发展正在颠覆人类对于传统计算机技术的认知。非常有幸成为本书的首批读者,得到多位来自微软、谷歌的世界顶尖数据科学家在深度学习领域的宝贵经验分享。本书从实践角度出发,内容丰富,利用 Keras 框架讲解深度学习话题,包含了几乎全部常用的深度学习模块,并且全面、系统地介绍深度学习相关的技术,使其不再只停留于高度抽象的数学理论,具有高度的可操作性和实用性,是目前国内为数不多的中文深度学习原著之一,堪称深度学习领域的一本力作。
在此,要向深度学习领域的研究人员、算法工程师、数据爱好者强烈推荐本书,无论是初学者还是资深研究者,相信都将会从本书中获得新的收获。最后,如果有什么还需要特别强调的,那就是请深度学习这本《Keras 快速上手:基于 Python 的深度学习实战》!
——亢昊辰,滨海国金所大数据中心主管
这本书自上而下地涵盖了深度学习几个最重要的方面,从软件、硬件的设置到数据的采集,从深度学习理论的介绍到实际案例的分析。整本书非常实用,讲解深入浅出,也非常高效,对于对深度学习感兴趣的读者是一本难得的好书!
——周仁生, Airbnb 资深数据科学家
很久没有潜心研读一本专业书籍了。这次有机会读到这本关于深度学习的新作让我受益匪浅。深度学习近年来发展迅猛,关于这个热门课题的学习书籍和网上课程举不胜举。但是作为一个从事数据科学工作多年的统计人员,我很难找到一本深度学习的入门教程或指导书籍让我在短时间能做到理论和实践相结合。然而本书针对不同专业背景的读者,通过通俗易懂的实践和应用入手,最终把读者带到一个自己可以实战的深度学习场景。值得一提的是,对比多数关于数据科学和深度学习的书籍,这本书里的 Python 代码完整,注释详尽,而且章节之间的逻辑关系严谨。希望读者能像我一样,在有限的时间内,通过这本书能够系统掌握深度学习相关的理论和实战技术,在数据科学领域继续进阶。
——刘松, Google 数据科学专家
深度学习和人工智能可谓是目前最火的话题之一,可是很多人感到入门太难。该书一改市面上很多深度学习书籍过于理论化的特点,突出实用性和可操作性,让读者能很快了解当前深度学习的成熟应用领域,并通过学习代码将解决方案移植到自己的应用环境中,是一本少有的深入浅出介绍深度学习模型及其应用的好书。该书介绍的Keras 深度学习框架提供了一个高度抽象的描述神经网络的环境,其计算后台可以在常用的 CNTK、 Theano 和 TensorFlow 三个环境中自由切换,特别适合快速搭建可用于生产环境的深度学习模型。
——罗勃, The University of Kansas, Associate Professor of ECS
这是一本少见的深入浅出介绍深度学习的入门书籍。该书理论和实践相结合,介绍了当前深度学习应用的几个主要框架和应用方向,实用性强,内容紧凑。基于 Keras 这个高度抽象的深度学习环境,全书强调快速构造深度学习模型和应用于实际业务,因此特别适合深度学习实践者和入门者学习,是一本必不可少的参考书。
——郭彦东,微软研究院研究员
这是一部应用性很强的数据挖掘和深度学习入门书籍,内容涵盖了目前深度学习的研究应用发展最为快速的几大领域,介绍了自学架构——深度学习框架,以及解决实际问题的完整流程。作者均为在深度学习领域具有多年工作经验的数据科学家,本书详细介绍并客观评价了目前最为流行的几大前沿开源深度学习框架的实例及优缺点。本书理论体系完整,可读性强,内容言简意赅,文字深入浅出,实例极具代表性,对于诉求在较短时间内对数据挖掘和深度学习产生较为完整的理论认知并迅速投入应用实践的读者,是一本必备的教科书。
——宋爽, Twitter 资深机器学习研发工程师
这是一本深度学习方面的非常实用的好书。这本书没有只拘泥于深度学习的一些理论和概念,而是通过一些例子来实现深度学习的具体应用。不论是对硬件、软件系统的搭建,还是对网络爬虫、自然语言、图像识别等重要领域的具体阐述,整本书都在详细讲述怎样将深度学习应用到各个领域。可以说,本书不仅让读者对深度学习的方法有具体了解,更重要的是在亲手教会读者利用深度学习解决很多实际的问题。
整本书的写作方式简洁明了,对问题的解释翔实而又不拖沓,可以看出是来自微软、谷歌的几位非常有知识的作者的经验之作。每一位希望学习和了解深度学习的读者,特别是希望能够将深度学习应用到具体问题的人,都可以从书中得到巨大的收获。书中有很多实际例子和可以运行的代码,请读者一边阅读,一边尝试,相信这本书可以给读者带来事半功倍的效果。
——张健, Facebook 资深数据科学家
深度学习和人工智能无疑是现在最热门的技术之一,很多人希望能掌握这方面的技能,但是担心门槛太高。这本书可谓是及时雨,给大家提供了非常好的入门学习资料,也是目前国内仅有的几本介绍 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 是否应该用多个 GPU10
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 及对应的 Keras17
1.2.6 安装 Theano 计算环境23
1.2.7 安装 TensorFlow 计算环境25
1.2.8 安装 cuDNN 和 CNMeM27
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 和 IoT210
10.2 Azure IoT Hub 服务213
10.3 使用 IoT Hub 管理设备概述215
10.4 使用.NET 将模拟设备连接到 IoT 中心218
10.5 机器学习应用实例237
序言
序一
在最近的几年里,深度学习无疑是一个发展最快的机器学习子领域。在许多机器学习竞赛中,最后胜出的系统或多或少都使用了深度学习技术。 2016 年,基于深度学习、强化学习和蒙特卡洛树搜索的围棋程序 AlphaGo 甚至战胜了人类冠军。人工智能的这一胜利比预想的要早了 10 年,而其中起关键作用的就是深度学习。
深度学习已经广泛应用于我们的生活中,比如市场上可以见到的语音转写、智能音箱、语言翻译、图像识别和图像艺术化系统等,其中深度学习都是关键技术。同时,由于学术界和工业界的大量投入,深度学习的新模型和新算法层出不穷,要充分掌握深度学习的各种模型和算法并实现它们无疑是一件困难的事情。
幸运的是,基于各行各业对深度学习技术的需求,许多公司和学校开源了深度学习工具包,其中大家比较熟悉的有 CNTK、 TensorFlow、 Theano、 Caffe、 mxNet 和 Torch。这些工具包都提供了非常灵活而强大的建模能力,极大地降低了使用深度学习技术的门槛,进一步加速了深度学习技术的研究和应用。但是,这些工具包各有所长、接口不同,而且对于很多初学者这些工具包过于灵活,难以掌握。
由于这些原因, Keras 应运而生。 Keras 可以被看作一个更易于使用、在更高层次上进行抽象、兼具兼容性和灵活性的深度学习框架,它的底层可以在 CNTK、 TensorFlow和 Theano 中自由切换。 Keras 的出现使很多初学者可以很快地体验深度学习的一些基本技术和模型,并且将这些技术和模型应用到实际问题中。
本书也正是在这样的背景下产生的。它的目标读者正是那些刚刚进入深度学习领域、还没有太多经验的学生和工程师。本书的作者谢梁、鲁颖和劳虹岚分别在微软和谷歌这样的走在深度学习前沿的公司里做大数据和深度学习技术的研发,积累了很多把商业和工程问题转化成合适的模型并分析模型好坏以及解释模型结果的经验。在这本书里,他们把这些经验传授给大家,使更多的人能够快速掌握深度学习,并有效应用到商业和工程实践中。
这本书比较系统地讲解了深度学习的基本知识、建模过程和应用,并以深度学习在推荐系统、图像识别、自然语言处理、文字生成和时间序列的具体应用作为案例,详细介绍了从工具准备、数据获取和处理到针对问题进行建模的整个过程和实践经验,是一本非常好的深度学习入门书。
俞栋 博士
腾讯 AI Lab 副主任,杰出科学家
西雅图人工智能研究室负责人
2017 年 6 月 22 日于美国西雅图
序二
随着大数据的普及以及硬件计算能力的飞速提升,深度学习在过去的 5~6 年有了日新月异的发展。在一个又一个领域,深度学习展示了极其强大甚至连人类都难以企及的能力,这包括语音识别、机器翻译、自然语言识别、推荐系统、人脸识别、图像识别、目标检测、三维重建、情感分析、棋类运动、德州扑克、自动驾驶等。伴随着人工智能广阔的应用前景,科技巨擎诸如谷歌、微软、、百度、腾讯、阿里巴巴等纷纷投入巨资,从而进一步推动了这个领域的进步。如今,已经很少有人还对人工智能能达到的高度有任何怀疑态度,取而代之的是对人类如何与机器共存的畅想和机器终有一天取代人类的担忧。
当然,如果我们现在就开始担心机器将毁灭人类,那么还是有一些杞人忧天。深度学习现在还只停留在感知(Perception)的阶段,即从原始数据进行简单的感觉和分析,但是远没有达到认知(Cognition)的阶段,即对事件进行逻辑推理和认识。深度学习的很多原理,还处在研究阶段。即使是各领域的专家,对于深度学习为什么如此有效,依然是一知半解。幸运的是,在解决很多实际问题时,其实并不需要我们那么深刻理解它。谢梁、鲁颖和劳红岚的这本书,就是从非常实用的角度来分享深度学习的一些基本知识,值得一读。
这本书从如何准备深度学习的环境开始,手把手地教读者如何采集数据,如何运用一些最常用,也是目前为止被认为最有效的一些深度学习算法来解决实际问题。覆盖的领域包括推荐系统、图像识别、自然语言情感分析、文字生成、时间序列、智能物联网等。不同于许多同类的书籍,这本书选择了 Keras 作为编程软件,强调简单、快速的模型设计,而不去纠缠底层代码,使得内容相当易于理解。读者可以在 CNTK、 TensorFlow和 Theano 的后台之间随意切换,非常灵活。即使你有朝一日需要用更低层的建模环境来解决更复杂的问题,相信也会保留从 Keras 中学来的高度抽象的角度审视你要解决的问题,让你事半功倍。
这一波深度学习的大潮,必将带来一个新的信息革命。每一次如此巨大的变革,都将淘汰很多效率低下的工作,并发展出新兴的职业。在一个如此激动人心的年代,愿这本书带着读者启航!
张察 博士
CNTK 主要作者之一,美国微软总部首席研究员
2017 年 6 月于美国西雅图
前言
2006 年,机器学习领域迎来了重要的转折点。加拿大多伦多大学教授、机器学习领域泰斗 Geoffrey Hinton 和他的学生 Ruslan Salakhutdinov 在《科学》上发表了一篇关于深度置信网络 (Deep Belief Networks) 的论文。从这篇论文的发表开始至今,深度学习有着迅猛的发展。 2009 年,微软研究院语音识别专家俞栋和邓力博士与深度学习专家Geoffery Hinton 合作。 2010 年,美国国防部 DARPA 和斯坦福大学、纽约大学和 NEC美国研究院合作深度学习项目。 2011 年微软宣布基于深度神经网络的识别系统取得成果并推出产品,彻底改变了语音识别原有的技术框架。从 2012 到 2015 年,深度学习技术在图像识别领域取得惊人的效果,在 ImageNet 评测上将错误率从 26% 一路降到 5%以下,几乎接近甚至超过人类的水平。这些都直接促进了一系列围绕深度学习技术的智能产品在市场上的出现,比如微软的认知服务(Cognitive Services)平台,谷歌的智能邮件应答和谷歌助手等。
在中国,我们同样欣喜地看到,基于大数据的机器学习和深度学习算法的大规模应用给互联网行业带来的巨大变革:淘 宝的推荐算法、微软的小冰聊天机器人、百度的度秘、滴滴的预估时间和车费、饿了么的智能调度等都应运而生。我们有理由相信,未来的物联网、无人驾驶等也会挖掘出更多深度学习的实用场景。
深度学习对很多科技行业的从业者来说仍有一些神秘感。虽然像谷歌、微软等互联网巨头开源了诸如 TensorFlow、 CNTK 等深度学习平台,大幅降低了从业者的门槛,但是如何举一反三,根据实际问题选择合适的算法和模型,并不容易。作为本书的作者,我们三位在美国谷歌、微软等顶尖互联网科技公司从事多年以机器学习和深度学习为基础的人工智能项目研发,有着丰富的实践经验,深感有必要撰写一本深入浅出的深度学习书籍,分享我们对深度学习的理解和想法,并帮助同行和感兴趣的朋友们快速上手,建立属于自己的端到端的深度学习模型,从而在大数据、深度学习的浪潮中有着更好的职业发展。我们希望本书能起到抛砖引玉的作用,使读者对深度学习产生更多的兴趣,并把深度学习作为一个必备的分析技能。
在本书中,我们选择 Keras 这个流行的深度学习建模框架来讲解深度学习话题。这主要从三方面的考虑。首先, Keras 包括了各种常用的深度学习模块,可以应用于绝大部分业务环境。其次,从原理上讲,它是高度抽象的深度学习编程环境,简单易学。 Keras底层是调用 CNTK、 TensorFlow 或 Theano 执行计算的。最后,作为应用领域的从业者,我们需要关注的是如何把一个商业或者工程问题转化成合适的模型,如何准备数据和分析模型的好坏以及如何解释模型的结果。 Keras 非常适合这样的场景,让使用者脱离具体的矩阵计算和求导,而将重心转移到业务逻辑上。
本书是目前国内不多的系统讲解使用 Keras 这个深度学习框架进行神经网络建模的实用书籍,非常适合数据科学家、机器学习工程师、人工智能应用工程师和工作中需要进行预测建模以及进行回归分析的从业者。本书也适合对深度学习有兴趣的不同背景的从业者、学生和老师。
本书分成 10 章,系统性地讲解深度学习基本知识、使用 Keras 建模过程和应用,并提供详细代码,使读者可以花最少的时间把核心建模知识学到手。其中第 1 章介绍搭建深度学习环境,是整本书的基础。第 2 章介绍如何用网络爬虫技术收集数据并使用ElasticSearch 存储数据。因为在很多应用中,数据需要读者自行从网上爬取和并加以处理和存储。第 3 章介绍深度学习模型的基本概念。第 4 章介绍深度学习框架 Keras 的用法。第 5~9 章,是 5 个深度学习的经典应用。我们会依次介绍深度学习在推荐系统、图像识别、自然语言处理、文字生成和时间序列的具体应用。在介绍这些应用的过程中会穿插各种深度学习模型和代码,并和读者分享我们对于这些模型的原理和应用场景的体会。最后,我们抛砖引玉地把物联网的概念提出来。我们相信,物联网和深度学习的结合会爆发出巨大的能量和价值。
限于篇幅,我们无法涉及深度学习的方方面面,只能尽自己所能,和大家分享尽可能多的体会、经验和易于上手的代码。
在写书的过程中,我们得到了大量的帮助和指导。微软 CNTK 的作者、国际顶尖深度学习专家俞栋博士和张察博士为本书作序,并给予我们许多支持和鼓励。微软研究院的研究员郭彦东博士和高级工程师汤成对本书的部分章节提出了审阅意见。电子工业出版社的张慧敏、葛娜和王静老师,对书籍的出版和编辑付出了极大努力,才使这本书得以如期问世。在此一并感谢。
最后,我们三位作者希望本书能为中国的深度学习和人工智能的普及,为广大从业者提供有价值的实践经验和快速上手贡献我们的微薄之力。
谢梁,美国微软总部首席数据科学家
鲁颖,谷歌总部数据科学技术专家
劳虹岚,美国微软总部微软研究院研究工程师
2017 年 6 月于美国西雅图和硅谷
文摘
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。
《Keras快速上手:基于Python的深度学习实战》编辑推荐
《Keras快速上手:基于Python的深度学习实战》从如何准备深度学习的环境开始,手把手地教读者如何采集数据,如何运用一些最常用,也是目前被认为最有效的一些深度学习算法来解决实际问题。覆盖的领域包括推荐系统、图像识别、自然语言情感分析、文字生成、时间序列、智能物联网等。不同于许多同类的书籍,《Keras快速上手:基于Python的深度学习实战》选择了Keras作为编程软件,强调简单、快速的模型设计,而不去纠缠底层代码,使得内容相当易于理解。读者可以在CNTK、TensorFlow和Theano的后台之间随意切换,非常灵活。即使你有朝一日需要用更低层的建模环境来解决更复杂的问题,相信也会保留从Keras中学来的高度抽象的角度审视你要解决的问题,让你事半功倍。
《Keras快速上手:基于Python的深度学习实战》以实际应用为导向,强调概念的认知和实用性,对理论的介绍深入浅出,对读者的数学水平要求较低,读者在学习完毕后能使用案例程序举一反三地应用到其具体场景中。《Keras快速上手:基于Python的深度学习实战》覆盖当前最热门的传统数据挖掘场景和四个深度学习应用场景,根据我们市场调研,是目前独一一本以应用为导向的介绍机器学习和深度学习的专业书籍,具备很高的参考价值和学术价值。
名人推荐
数据挖掘与深度学习毫无疑问是大数据时代最炙手可热的研究方向。在很多前沿领域,深度学习的出现和发展正在颠覆人类对于传统计算机技术的认知。非常有幸成为本书的首批读者,得到多位来自微软、谷歌的世界顶尖数据科学家在深度学习领域的宝贵经验分享。本书从实践角度出发,内容丰富,利用 Keras 框架讲解深度学习话题,包含了几乎全部常用的深度学习模块,并且全面、系统地介绍深度学习相关的技术,使其不再只停留于高度抽象的数学理论,具有高度的可操作性和实用性,是目前国内为数不多的中文深度学习原著之一,堪称深度学习领域的一本力作。
在此,要向深度学习领域的研究人员、算法工程师、数据爱好者强烈推荐本书,无论是初学者还是资深研究者,相信都将会从本书中获得新的收获。最后,如果有什么还需要特别强调的,那就是请深度学习这本《Keras 快速上手:基于 Python 的深度学习实战》!
——亢昊辰,滨海国金所大数据中心主管
这本书自上而下地涵盖了深度学习几个最重要的方面,从软件、硬件的设置到数据的采集,从深度学习理论的介绍到实际案例的分析。整本书非常实用,讲解深入浅出,也非常高效,对于对深度学习感兴趣的读者是一本难得的好书!
——周仁生, Airbnb 资深数据科学家
很久没有潜心研读一本专业书籍了。这次有机会读到这本关于深度学习的新作让我受益匪浅。深度学习近年来发展迅猛,关于这个热门课题的学习书籍和网上课程举不胜举。但是作为一个从事数据科学工作多年的统计人员,我很难找到一本深度学习的入门教程或指导书籍让我在短时间能做到理论和实践相结合。然而本书针对不同专业背景的读者,通过通俗易懂的实践和应用入手,最终把读者带到一个自己可以实战的深度学习场景。值得一提的是,对比多数关于数据科学和深度学习的书籍,这本书里的 Python 代码完整,注释详尽,而且章节之间的逻辑关系严谨。希望读者能像我一样,在有限的时间内,通过这本书能够系统掌握深度学习相关的理论和实战技术,在数据科学领域继续进阶。
——刘松, Google 数据科学专家
深度学习和人工智能可谓是目前最火的话题之一,可是很多人感到入门太难。该书一改市面上很多深度学习书籍过于理论化的特点,突出实用性和可操作性,让读者能很快了解当前深度学习的成熟应用领域,并通过学习代码将解决方案移植到自己的应用环境中,是一本少有的深入浅出介绍深度学习模型及其应用的好书。该书介绍的Keras 深度学习框架提供了一个高度抽象的描述神经网络的环境,其计算后台可以在常用的 CNTK、 Theano 和 TensorFlow 三个环境中自由切换,特别适合快速搭建可用于生产环境的深度学习模型。
——罗勃, The University of Kansas, Associate Professor of ECS
这是一本少见的深入浅出介绍深度学习的入门书籍。该书理论和实践相结合,介绍了当前深度学习应用的几个主要框架和应用方向,实用性强,内容紧凑。基于 Keras 这个高度抽象的深度学习环境,全书强调快速构造深度学习模型和应用于实际业务,因此特别适合深度学习实践者和入门者学习,是一本必不可少的参考书。
——郭彦东,微软研究院研究员
这是一部应用性很强的数据挖掘和深度学习入门书籍,内容涵盖了目前深度学习的研究应用发展最为快速的几大领域,介绍了自学架构——深度学习框架,以及解决实际问题的完整流程。作者均为在深度学习领域具有多年工作经验的数据科学家,本书详细介绍并客观评价了目前最为流行的几大前沿开源深度学习框架的实例及优缺点。本书理论体系完整,可读性强,内容言简意赅,文字深入浅出,实例极具代表性,对于诉求在较短时间内对数据挖掘和深度学习产生较为完整的理论认知并迅速投入应用实践的读者,是一本必备的教科书。
——宋爽, Twitter 资深机器学习研发工程师
这是一本深度学习方面的非常实用的好书。这本书没有只拘泥于深度学习的一些理论和概念,而是通过一些例子来实现深度学习的具体应用。不论是对硬件、软件系统的搭建,还是对网络爬虫、自然语言、图像识别等重要领域的具体阐述,整本书都在详细讲述怎样将深度学习应用到各个领域。可以说,本书不仅让读者对深度学习的方法有具体了解,更重要的是在亲手教会读者利用深度学习解决很多实际的问题。
整本书的写作方式简洁明了,对问题的解释翔实而又不拖沓,可以看出是来自微软、谷歌的几位非常有知识的作者的经验之作。每一位希望学习和了解深度学习的读者,特别是希望能够将深度学习应用到具体问题的人,都可以从书中得到巨大的收获。书中有很多实际例子和可以运行的代码,请读者一边阅读,一边尝试,相信这本书可以给读者带来事半功倍的效果。
——张健, Facebook 资深数据科学家
深度学习和人工智能无疑是现在最热门的技术之一,很多人希望能掌握这方面的技能,但是担心门槛太高。这本书可谓是及时雨,给大家提供了非常好的入门学习资料,也是目前国内仅有的几本介绍 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 是否应该用多个 GPU10
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 及对应的 Keras17
1.2.6 安装 Theano 计算环境23
1.2.7 安装 TensorFlow 计算环境25
1.2.8 安装 cuDNN 和 CNMeM27
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 和 IoT210
10.2 Azure IoT Hub 服务213
10.3 使用 IoT Hub 管理设备概述215
10.4 使用.NET 将模拟设备连接到 IoT 中心218
10.5 机器学习应用实例237
序言
序一
在最近的几年里,深度学习无疑是一个发展最快的机器学习子领域。在许多机器学习竞赛中,最后胜出的系统或多或少都使用了深度学习技术。 2016 年,基于深度学习、强化学习和蒙特卡洛树搜索的围棋程序 AlphaGo 甚至战胜了人类冠军。人工智能的这一胜利比预想的要早了 10 年,而其中起关键作用的就是深度学习。
深度学习已经广泛应用于我们的生活中,比如市场上可以见到的语音转写、智能音箱、语言翻译、图像识别和图像艺术化系统等,其中深度学习都是关键技术。同时,由于学术界和工业界的大量投入,深度学习的新模型和新算法层出不穷,要充分掌握深度学习的各种模型和算法并实现它们无疑是一件困难的事情。
幸运的是,基于各行各业对深度学习技术的需求,许多公司和学校开源了深度学习工具包,其中大家比较熟悉的有 CNTK、 TensorFlow、 Theano、 Caffe、 mxNet 和 Torch。这些工具包都提供了非常灵活而强大的建模能力,极大地降低了使用深度学习技术的门槛,进一步加速了深度学习技术的研究和应用。但是,这些工具包各有所长、接口不同,而且对于很多初学者这些工具包过于灵活,难以掌握。
由于这些原因, Keras 应运而生。 Keras 可以被看作一个更易于使用、在更高层次上进行抽象、兼具兼容性和灵活性的深度学习框架,它的底层可以在 CNTK、 TensorFlow和 Theano 中自由切换。 Keras 的出现使很多初学者可以很快地体验深度学习的一些基本技术和模型,并且将这些技术和模型应用到实际问题中。
本书也正是在这样的背景下产生的。它的目标读者正是那些刚刚进入深度学习领域、还没有太多经验的学生和工程师。本书的作者谢梁、鲁颖和劳虹岚分别在微软和谷歌这样的走在深度学习前沿的公司里做大数据和深度学习技术的研发,积累了很多把商业和工程问题转化成合适的模型并分析模型好坏以及解释模型结果的经验。在这本书里,他们把这些经验传授给大家,使更多的人能够快速掌握深度学习,并有效应用到商业和工程实践中。
这本书比较系统地讲解了深度学习的基本知识、建模过程和应用,并以深度学习在推荐系统、图像识别、自然语言处理、文字生成和时间序列的具体应用作为案例,详细介绍了从工具准备、数据获取和处理到针对问题进行建模的整个过程和实践经验,是一本非常好的深度学习入门书。
俞栋 博士
腾讯 AI Lab 副主任,杰出科学家
西雅图人工智能研究室负责人
2017 年 6 月 22 日于美国西雅图
序二
随着大数据的普及以及硬件计算能力的飞速提升,深度学习在过去的 5~6 年有了日新月异的发展。在一个又一个领域,深度学习展示了极其强大甚至连人类都难以企及的能力,这包括语音识别、机器翻译、自然语言识别、推荐系统、人脸识别、图像识别、目标检测、三维重建、情感分析、棋类运动、德州扑克、自动驾驶等。伴随着人工智能广阔的应用前景,科技巨擎诸如谷歌、微软、、百度、腾讯、阿里巴巴等纷纷投入巨资,从而进一步推动了这个领域的进步。如今,已经很少有人还对人工智能能达到的高度有任何怀疑态度,取而代之的是对人类如何与机器共存的畅想和机器终有一天取代人类的担忧。
当然,如果我们现在就开始担心机器将毁灭人类,那么还是有一些杞人忧天。深度学习现在还只停留在感知(Perception)的阶段,即从原始数据进行简单的感觉和分析,但是远没有达到认知(Cognition)的阶段,即对事件进行逻辑推理和认识。深度学习的很多原理,还处在研究阶段。即使是各领域的专家,对于深度学习为什么如此有效,依然是一知半解。幸运的是,在解决很多实际问题时,其实并不需要我们那么深刻理解它。谢梁、鲁颖和劳红岚的这本书,就是从非常实用的角度来分享深度学习的一些基本知识,值得一读。
这本书从如何准备深度学习的环境开始,手把手地教读者如何采集数据,如何运用一些最常用,也是目前为止被认为最有效的一些深度学习算法来解决实际问题。覆盖的领域包括推荐系统、图像识别、自然语言情感分析、文字生成、时间序列、智能物联网等。不同于许多同类的书籍,这本书选择了 Keras 作为编程软件,强调简单、快速的模型设计,而不去纠缠底层代码,使得内容相当易于理解。读者可以在 CNTK、 TensorFlow和 Theano 的后台之间随意切换,非常灵活。即使你有朝一日需要用更低层的建模环境来解决更复杂的问题,相信也会保留从 Keras 中学来的高度抽象的角度审视你要解决的问题,让你事半功倍。
这一波深度学习的大潮,必将带来一个新的信息革命。每一次如此巨大的变革,都将淘汰很多效率低下的工作,并发展出新兴的职业。在一个如此激动人心的年代,愿这本书带着读者启航!
张察 博士
CNTK 主要作者之一,美国微软总部首席研究员
2017 年 6 月于美国西雅图
前言
2006 年,机器学习领域迎来了重要的转折点。加拿大多伦多大学教授、机器学习领域泰斗 Geoffrey Hinton 和他的学生 Ruslan Salakhutdinov 在《科学》上发表了一篇关于深度置信网络 (Deep Belief Networks) 的论文。从这篇论文的发表开始至今,深度学习有着迅猛的发展。 2009 年,微软研究院语音识别专家俞栋和邓力博士与深度学习专家Geoffery Hinton 合作。 2010 年,美国国防部 DARPA 和斯坦福大学、纽约大学和 NEC美国研究院合作深度学习项目。 2011 年微软宣布基于深度神经网络的识别系统取得成果并推出产品,彻底改变了语音识别原有的技术框架。从 2012 到 2015 年,深度学习技术在图像识别领域取得惊人的效果,在 ImageNet 评测上将错误率从 26% 一路降到 5%以下,几乎接近甚至超过人类的水平。这些都直接促进了一系列围绕深度学习技术的智能产品在市场上的出现,比如微软的认知服务(Cognitive Services)平台,谷歌的智能邮件应答和谷歌助手等。
在中国,我们同样欣喜地看到,基于大数据的机器学习和深度学习算法的大规模应用给互联网行业带来的巨大变革:淘 宝的推荐算法、微软的小冰聊天机器人、百度的度秘、滴滴的预估时间和车费、饿了么的智能调度等都应运而生。我们有理由相信,未来的物联网、无人驾驶等也会挖掘出更多深度学习的实用场景。
深度学习对很多科技行业的从业者来说仍有一些神秘感。虽然像谷歌、微软等互联网巨头开源了诸如 TensorFlow、 CNTK 等深度学习平台,大幅降低了从业者的门槛,但是如何举一反三,根据实际问题选择合适的算法和模型,并不容易。作为本书的作者,我们三位在美国谷歌、微软等顶尖互联网科技公司从事多年以机器学习和深度学习为基础的人工智能项目研发,有着丰富的实践经验,深感有必要撰写一本深入浅出的深度学习书籍,分享我们对深度学习的理解和想法,并帮助同行和感兴趣的朋友们快速上手,建立属于自己的端到端的深度学习模型,从而在大数据、深度学习的浪潮中有着更好的职业发展。我们希望本书能起到抛砖引玉的作用,使读者对深度学习产生更多的兴趣,并把深度学习作为一个必备的分析技能。
在本书中,我们选择 Keras 这个流行的深度学习建模框架来讲解深度学习话题。这主要从三方面的考虑。首先, Keras 包括了各种常用的深度学习模块,可以应用于绝大部分业务环境。其次,从原理上讲,它是高度抽象的深度学习编程环境,简单易学。 Keras底层是调用 CNTK、 TensorFlow 或 Theano 执行计算的。最后,作为应用领域的从业者,我们需要关注的是如何把一个商业或者工程问题转化成合适的模型,如何准备数据和分析模型的好坏以及如何解释模型的结果。 Keras 非常适合这样的场景,让使用者脱离具体的矩阵计算和求导,而将重心转移到业务逻辑上。
本书是目前国内不多的系统讲解使用 Keras 这个深度学习框架进行神经网络建模的实用书籍,非常适合数据科学家、机器学习工程师、人工智能应用工程师和工作中需要进行预测建模以及进行回归分析的从业者。本书也适合对深度学习有兴趣的不同背景的从业者、学生和老师。
本书分成 10 章,系统性地讲解深度学习基本知识、使用 Keras 建模过程和应用,并提供详细代码,使读者可以花最少的时间把核心建模知识学到手。其中第 1 章介绍搭建深度学习环境,是整本书的基础。第 2 章介绍如何用网络爬虫技术收集数据并使用ElasticSearch 存储数据。因为在很多应用中,数据需要读者自行从网上爬取和并加以处理和存储。第 3 章介绍深度学习模型的基本概念。第 4 章介绍深度学习框架 Keras 的用法。第 5~9 章,是 5 个深度学习的经典应用。我们会依次介绍深度学习在推荐系统、图像识别、自然语言处理、文字生成和时间序列的具体应用。在介绍这些应用的过程中会穿插各种深度学习模型和代码,并和读者分享我们对于这些模型的原理和应用场景的体会。最后,我们抛砖引玉地把物联网的概念提出来。我们相信,物联网和深度学习的结合会爆发出巨大的能量和价值。
限于篇幅,我们无法涉及深度学习的方方面面,只能尽自己所能,和大家分享尽可能多的体会、经验和易于上手的代码。
在写书的过程中,我们得到了大量的帮助和指导。微软 CNTK 的作者、国际顶尖深度学习专家俞栋博士和张察博士为本书作序,并给予我们许多支持和鼓励。微软研究院的研究员郭彦东博士和高级工程师汤成对本书的部分章节提出了审阅意见。电子工业出版社的张慧敏、葛娜和王静老师,对书籍的出版和编辑付出了极大努力,才使这本书得以如期问世。在此一并感谢。
最后,我们三位作者希望本书能为中国的深度学习和人工智能的普及,为广大从业者提供有价值的实践经验和快速上手贡献我们的微薄之力。
谢梁,美国微软总部首席数据科学家
鲁颖,谷歌总部数据科学技术专家
劳虹岚,美国微软总部微软研究院研究工程师
2017 年 6 月于美国西雅图和硅谷
文摘
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。
ISBN | 9787121318726 |
---|---|
出版社 | 电子工业出版社 |
作者 | 谢梁 |
尺寸 | 16 |