·学习如何通过变分自动编码器改变图像中人物的面部表情。
·学习如何构建GAN模型,包括风格迁移模型CycleGAN以及音乐生成模型MuseGAN。
·学习如何通过循环生成模型来生成文本,以及如何利用注意力机制改善模型。
·学习如何利用生成模型帮助智能体在强化学习环境中完成任务。
·探索Transformer(BERT、GPT-2),以及ProGAN和StyleGAN等图像生成模型的架构。
David Foster是Applied Data Science的联合创始人,这是一家数据科学咨询公司,为客户提供创新的解决方案。他拥有英国剑桥三一学院的数学硕士学位,以及华威大学运筹学硕士学位。
“本书深入浅出地介绍了生成式建模的深度学习工具包。如果你是一位富有创造力的编程爱好者,希望在实际工作中应用深度学习,那么本书是不B二之选。”
——David Ha
Google Brain的研究科学家
目录前言 .1第一部分 生成式深度学习概述第1 章 生成建模 111.1 什么是生成建模? 111.1.1 生成建模与判别建模 131.1.2 机器学习的发展 . 141.1.3 生成建模的兴起 . 151.1.4 生成建模的框架 . 181.2 概率生成模型 211.2.1 你好,Wrodl ! 241.2.2 你的第一个概率生成模型 . 251.2.3 朴素贝叶斯 281.2.4 你好,Wrodl !续篇 . 311.3 生成建模的难题 33表示学习 341.4 设置环境 371.5 小结 40第2 章 深度学习 412.1 结构化与非结构化数据 412.2 深度神经网络 43Keras 和TensorFlow 442.3 第一个深度神经网络 . 452.3.1 加载数据. 462.3.2 建立模型. 482.3.3 编译模型. 522.3.4 训练模型. 542.3.5 评估模型. 552.4 改进模型 582.4.1 卷积层 . 582.4.2 批标准化. 642.4.3 Dropout 层 . 662.4.4 结合所有层 682.5 小结 71第3 章 变分自动编码器 733.1 画展 733.2 自动编码器 . 763.2.1 第一个自动编码器 . 773.2.2 编码器 . 783.2.3 解码器 . 803.2.4 连接编码器与解码器 823.2.5 分析自动编码器 . 843.3 变化后的画展 873.4 构建变分自动编码器 . 893.4.1 编码器 . 893.4.2 损失函数. 943.4.3 分析变分自动编码器 973.5 使用VAE 生成面部图像 983.5.1 训练VAE 993.5.2 分析VAE . 1023.5.3 生成新面孔 . 1033.5.4 隐空间的算术 1043.5.5 面部变形 1063.6 小结 . 107第4 章 生成对抗网络 1084.1 神秘兽 1084.2 生成对抗网络简介 1114.3 第一个生成对抗网络 1124.3.1 判别器 1134.3.2 生成器 1154.3.3 训练GAN 1194.4 GAN 面临的难题 1254.4.1 损失震荡 1254.4.2 模式收缩 1264.4.3 不提供信息的损失函数 1264.4.4 超参数 1274.4.5 解决GAN 面临的难题 . 1274.5 WGAN 1274.5.1 Wasserstein 损失 1284.5.2 利普希茨约束 1304.5.3 权重裁剪 1314.5.4 训练WGAN 1324.5.5 分析WGAN 1334.6 WGAN-GP 1344.6.1 梯度惩罚损失 1354.6.2 分析WGAN-GP 1394.7 小结 . 140第二部分 教机器绘画、写作、作曲和玩游戏第5 章 绘画 1455.1 苹果和橙子 1465.2 CycleGAN 1495.3 第一个CycleGAN 模型 . 1515.3.1 简介 1515.3.2 生成器(U-Net) 1535.3.3 判别器 1575.3.4 编译CycleGAN 1585.3.5 训练CycleGAN 1615.3.6 分析CycleGAN 1625.4 创建一个模仿莫奈作品的CycleGAN . 1645.4.1 生成器(ResNet) 1655.4.2 分析CycleGAN 1665.5 神经风格迁移 . 1685.5.1 内容损失 1695.5.2 风格损失 1725.5.3 总方差损失 . 1755.5.4 运行神经风格迁移 1765.5.5 分析神经风格迁移模型 1775.6 小结 . 178第6 章 写作 1796.1 坏家伙们的文学社 1806.2 长短期记忆网络 1816.3 第一个LSTM 网络 1826.3.1 分词 1836.3.2 建立数据集 . 1856.3.3 LSTM 架构 . 1876.3.4 嵌入层 1876.3.5 LSTM 层 1886.3.6 LSTM 元胞 . 1906.4 生成新文本 1926.5 RNN 扩展 . 1966.5.1 堆叠式循环网络 1966.5.2 门控制循环单元 1986.5.3 双向元胞 2006.6 编码器- 解码器模型 2006.7 问答生成器 2036.7.1 问答数据集 . 2046.7.2 模型架构 2056.7.3 推断 2106.7.4 模型的结果 . 2126.8 小结 . 214第7 章 作曲 2157.1 前提知识 216音符 216
前言What I cannot create, I do not understand.——Richard Feynman创造能力是人类的先天优势之一。从最早的穴居人开始,我们一直寻找机会创造美丽的作品。早期的人类在洞穴的墙壁上描绘野生动物和抽象的图案,他们小心而有条理地将颜料涂到岩石上。浪漫主义时代的人类创造了柴可夫斯基交响曲,声波与美丽的旋律以及和声交织在一起,澎湃而又悲伤的情绪袭上每个人的心头。如今这个时代,有时我们会在深夜匆匆赶往书店,购买一本虚构的故事书,因为许许多多的文字凝聚的故事让我们欲罢不能地翻动着书页,只为了看看主人公接下来的命运。因此,人类开始思考有关创造力的终极问题:能否创造出本身具有创造力的东西?这便是生成建模旨在解决的问题。随着方法与技术的日益发展,如今我们能够让机器按照一定的风格绘制艺术画作,撰写内容连贯的长篇巨作,创作悦耳的乐曲,并通过生成想象的场景制订出高端游戏制胜策略。这仅仅是生成式革命的开端,我们别无选择,唯有寻找有关创造力难题的答案,并最终挑战人类。长话短说,现在就是学习生成建模的最佳时机,那么下面就让我们开始吧!本书的组织结构本书涵盖了近年来在生成建模领域占主导地位的关键技术,我们通过这些技术在创作任务方面取得了令人瞩目的进步。除了介绍生成建模的核心理论之外,我们还会完整地示范如何构建各大文献中提及的关键模型,并逐步介绍每个模型的代码库。本书还讲述了一些简短的寓言故事,这些故事有助于我们理解将要构建的某些模型的机制。我认为,讲解抽象理论的最佳方式之一就是将其转化为不太抽象的事物(例如故事),然后再深入讲解技术。在故事的背景下,理论的各个步骤更为清晰,因为这些故事融合了人、动作和情感,非常便于理解,不像神经网络、反向传播和损失函数那么晦涩难懂(它们是抽象的结构)。故事和模型讲解只是在两个不同领域中讲解同一个机制。因此,你可以在学习每种模型时回顾相关的故事。如果你已经非常熟悉某个技术,则可以在故事中找到每个模型元素的对应部分!本书的第一部分将介绍构建生成模型的关键技术,包括深度学习、变分自动编码器以及生成对抗网络的概述。在第二部分中,我们将利用这些技术来解决一些创造性的任务,例如通过CycleGAN、编码器- 解码器模型和MuseGAN 等模型来完成绘画、写作和作曲。此外,我们还将介绍如何利用生成建模来优化玩游戏的策略(世界模型),并了解当今最尖端的生成架构,例如StyleGAN、BigGAN、BERT、GPT-2 和MuseNet 等。本书面向的读者对象我们希望本书的读者拥有一定的Python 编程经验。如果你不熟悉Python,那么最好先从LearningPython.org 开始学习。有关Python 学习的免费在线资源非常多,可以帮助你积累足够的Python 基础知识,以更好地理解本书中的示例。此外,由于部分模型的描述用到了数学符号,因此读者最好对线性代数(例如矩阵乘法等)和一般概率论有扎实的了解。最后,读者还需要一个环境,能够在其中运行本书GitHub 代码库中的示例。作者尽最大努力确保书中的所有示例都无须耗费大量的计算资源。虽然有人说训练深度学习模型需要GPU,尽管GPU 确实有帮助,而且可以加快训练速度,但不是必需条件。实际上,如果你不熟悉深度学习,那么我建议你先花些时间在笔记本电脑上尝试一些小示例,等到掌握基础知识后,再投入时间和精力研究如何利用硬件加快训练速度。其他资源我强烈推荐以下两本书作为机器学习和深度学习的入门书籍:• 《Hands-on Machine Learning with Scikit-Learn, Keras, and TensorFlow:Concepts, Tools, and Techniques to Build Intelligent Systems》,作者:Aurelien Geron,O’Reilly 出版。• 《Deep Learning with Python》,作者: Francois Chollet,Manning 出版。本书中的大多数论文都来自arXiv(这是一个免费的科学研究论文存储库)。如今,在论文经过全面的同行评审之前,通常作者都会先将论文发布到arXiv。查阅最新提交的论文是掌握该领域最前沿发展的一种好方法。此外,我还强烈推荐网站Papers with Code(地址:https://paperswithcode.com/),你可以在这个网站上找到各种机器学习任务的最新技术成果,以及论文和GitHub 官方代码库的链接。如果你想要快速了解目前哪些技术在各项任务中的表现最佳,那么这是一个非常好的资源,而且该网站也帮助我决定了本书涵盖的技术。最后, 有关在加速硬件上训练深度学习模型的资源, 我推荐Google Colaboratory(地址:https://colab.research.google.com/notebooks/intro.ipynb#recent=true)。这是一个免费的Jupyter Notebook 环境,无需任何设置即可在云中运行。你可以在免费的GPU 运行notebook,最多12 个小时。虽然你不必在GPU 上运行本书中的示例,但GPU 可以加快训练过程。不管怎样,Colab 都是免费访问GPU 资源的绝佳方法。排版约定本书使用了下述排版约定。斜体(Italic)表示新术语、URL、示例电子邮件地址、文件名和扩展名。等宽字体(Constant Width)表示代码,在段内用以表示与代码相关的元素,例如变量或函数名、数据库、数据类型、环境变量、声明和关键字。等宽粗体字(Constant width bold)表示命令或其他用户输入的文本。斜体等宽字体(Constant Width Italic)表示该文本应当由用户提供的值或由用户根据上下文决定的值替换。使用代码示例你可以通过以下网址下载本书的补充材料(代码示例,练习等):https://github.com/davidADSP/GDL_code。本书的目的是帮助你完成工作。一般来说,在自己的程序或者文档中使用本书附带的示例代码。你无须联系我们获得使用许可,除非你要复制大量的代码。例如,使用本书中的多个代码片段编写程序就无需获得许可。但以CD-ROM的形式销售或者分发O’Reilly 书中的示例代码则需要获得许可。回答问题时援引本书内容以及书中示例代码,无需获得许可。在你自己的项目文档中使用本书大量的示例代码时,则需要获得许可。我们不强制要求署名,但如果你这么做,我们深表感激。署名一般包括书名、作者、出版社和国际标准书号。例如:“Generative Deep Learning by David Foster (O’Reilly). Copyright 2019 Applied Data Science Partners Ltd., 978-1-492-04194-8”。如果你觉得自身情况不在合理使用或上述允许的范围内,请通过邮件和我们联系,地址是 permissions@oreilly.com。O’Reilly 在线学习平台(O’Reilly Online Learning)近40 年来,O’Reilly Media 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。我们拥有独一无二的专家和革新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享他们的知识和经验。O’Reilly 的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及O’Reilly 和200 多家其他出版商提供的大量文本和视频资源。有关的更多信息,请访问http://oreilly.com。意见和疑问请把你对本书的意见和疑问发给出版社:美国:O’Reilly Media, Inc.1005 Gravenstein Highway NorthSebastopol, CA 95472中国:北京市西城区西直门南大街2号成铭大厦C座807室(100035)奥莱利技术咨询(北京)有限公司这本书有专属网页,你可以在上面找到本书的勘误、示例和其他信息。网址是:http://shop.oreilly.com/product/0636920189817.do。如果你对本书有一些评论或技术上的建议, 请发送电子邮件到bookquestions@oreilly.com。要了解O’Reilly 图书、培训课程、会议和新闻的更多信息,请访问我们的网站,网址是:http://www.oreilly.com。我们的Facebook:http://facebook.com/oreilly。我们的Twitter:http://twitter.com/oreillymedia。我们的Youtube:http://www.youtube.com/oreillymedia。致谢本书得以付梓,我要感谢很多人给予的帮助。首先, 我要感谢所有的技术审查人员, 特别感谢Luba Elliott、Darren Richardson、Eric George、Chris Schon、Sigurður Skúli Sigurgeirsson、Hao-Wen Dong、David Ha 和Lorna Barclay。此外,我要感谢Applied Data Science Partners 的同事Ross Witeszczak、Chris Schon、Daniel Sharp 和Amy Bull。感谢你们在创作本书过程中的耐心等待,我非常期待未来我们携手共同完成的所有机器学习项目!我还要特别感谢Ross,如果当初我们没有决定一起开展业务,那么也就没有这本书的问世,所以感谢你信任我作为你的业务合作伙伴!还要感谢那些曾经教过我数学的所有人,我有幸在学校遇到了最优秀的数学老师,在他们的引导下我对数学产生了浓厚的兴趣,并鼓励我在大学继续深造。我要感谢你们的付出,并毫无保留地教授该主题的知识。非常感谢O’Reilly 的工作人员指导我完成本书的创作。特别感谢Michele Cronin 一路相伴,为我提供了很多反馈,并友好地提醒我完成每个章节!我要感谢Katie Tozer、Rachel Head 和Melanie Yarbrough 对本书的付出,还有Mike Loukides 第一个抛出橄榄枝,询问我是否对写书感兴趣。你们给予了本书如此大力的支持,我要感谢各位为我提供了一个自由创作的平台。在本书的创作过程中,我的家人一直是鼓励和支持的源泉。非常感谢我的妈妈Gillian Foster,她帮助我检查了每一行的错字,当初也是她教我学习数学加法!您在审阅本书时对细节的关注至关重要,对于您和爸爸为我创造的所有机遇,我深表感谢。还有我的父亲Clive Foster,他是我学习计算机编程的启蒙老师,这本书大量的实例都要归功于他早期给予我的耐心,当初我曾尝试用BASIC 制作足球游戏。我的兄弟Rob Foster 是这个世界上最谦虚的天才,尤其是在语言学领域,与他谈论AI 以及基于文本的机器学习的未来给予了我很多启发。最后,我要感谢我的Nana,她是我们所有人的灵感和乐趣之源。她对文学的热爱是我迷上写书的原因之一。最后,我要感谢我的未婚妻(即将成为我的妻子)Lorna Barclay。她不仅认真地审阅了本书中的每个单词,而且还在整个创作过程中提供了源源不断的支持,为我泡茶,带来各种零食,而且她对细节的关注以及统计和机器学习的专业知识帮助我撰写出了优秀的生成建模指南。没有你,我就无法完成本书的创作,感谢你投入大量时间来帮我组织和扩展书中需要进一步解释的内容。我向你保证,在这本书出版之后的(至少)几周内,我不会在餐桌上谈论生成模型。