·學(xué)習(xí)如何通過變分自動(dòng)編碼器改變圖像中人物的面部表情。
·學(xué)習(xí)如何構(gòu)建GAN模型,包括風(fēng)格遷移模型CycleGAN以及音樂生成模型MuseGAN。
·學(xué)習(xí)如何通過循環(huán)生成模型來生成文本,以及如何利用注意力機(jī)制改善模型。
·學(xué)習(xí)如何利用生成模型幫助智能體在強(qiáng)化學(xué)習(xí)環(huán)境中完成任務(wù)。
·探索Transformer(BERT、GPT-2),以及ProGAN和StyleGAN等圖像生成模型的架構(gòu)。
前言
What I cannot create, I do not understand.
——Richard Feynman
創(chuàng)造能力是人類的先天優(yōu)勢(shì)之一。從最早的穴居人開始,我們一直尋找機(jī)會(huì)創(chuàng)造美麗的作品。早期的人類在洞穴的墻壁上描繪野生動(dòng)物和抽象的圖案,他們小心而有條理地將顏料涂到巖石上。浪漫主義時(shí)代的人類創(chuàng)造了柴可夫斯基交響曲,聲波與美麗的旋律以及和聲交織在一起,澎湃而又悲傷的情緒襲上每個(gè)人的心頭。如今這個(gè)時(shí)代,有時(shí)我們會(huì)在深夜匆匆趕往書店,購(gòu)買一本虛構(gòu)的故事書,因?yàn)樵S許多多的文字凝聚的故事讓我們欲罷不能地翻動(dòng)著書頁(yè),只為了看看主人公接下來的命運(yùn)。
因此,人類開始思考有關(guān)創(chuàng)造力的終極問題:能否創(chuàng)造出本身具有創(chuàng)造力的東西?
這便是生成建模旨在解決的問題。隨著方法與技術(shù)的日益發(fā)展,如今我們能夠讓機(jī)器按照一定的風(fēng)格繪制藝術(shù)畫作,撰寫內(nèi)容連貫的長(zhǎng)篇巨作,創(chuàng)作悅耳的樂曲,并通過生成想象的場(chǎng)景制訂出高端游戲制勝策略。這僅僅是生成式革命的開端,我們別無選擇,唯有尋找有關(guān)創(chuàng)造力難題的答案,并最終挑戰(zhàn)人類。
長(zhǎng)話短說,現(xiàn)在就是學(xué)習(xí)生成建模的最佳時(shí)機(jī),那么下面就讓我們開始吧!
本書的組織結(jié)構(gòu)
本書涵蓋了近年來在生成建模領(lǐng)域占主導(dǎo)地位的關(guān)鍵技術(shù),我們通過這些技術(shù)在創(chuàng)作任務(wù)方面取得了令人矚目的進(jìn)步。除了介紹生成建模的核心理論之外,我們還會(huì)完整地示范如何構(gòu)建各大文獻(xiàn)中提及的關(guān)鍵模型,并逐步介紹每個(gè)模型的代碼庫(kù)。
本書還講述了一些簡(jiǎn)短的寓言故事,這些故事有助于我們理解將要構(gòu)建的某些模型的機(jī)制。我認(rèn)為,講解抽象理論的最佳方式之一就是將其轉(zhuǎn)化為不太抽象的事物(例如故事),然后再深入講解技術(shù)。在故事的背景下,理論的各個(gè)步驟更為清晰,因?yàn)檫@些故事融合了人、動(dòng)作和情感,非常便于理解,不像神經(jīng)網(wǎng)絡(luò)、反向傳播和損失函數(shù)那么晦澀難懂(它們是抽象的結(jié)構(gòu))。故事和模型講解只是在兩個(gè)不同領(lǐng)域中講解同一個(gè)機(jī)制。因此,你可以在學(xué)習(xí)每種模型時(shí)回顧相關(guān)的故事。如果你已經(jīng)非常熟悉某個(gè)技術(shù),則可以在故事中找到每個(gè)模型元素的對(duì)應(yīng)部分!
本書的第一部分將介紹構(gòu)建生成模型的關(guān)鍵技術(shù),包括深度學(xué)習(xí)、變分自動(dòng)編碼器以及生成對(duì)抗網(wǎng)絡(luò)的概述。在第二部分中,我們將利用這些技術(shù)來解決一些創(chuàng)造性的任務(wù),例如通過CycleGAN、編碼器- 解碼器模型和MuseGAN 等模型來完成繪畫、寫作和作曲。此外,我們還將介紹如何利用生成建模來優(yōu)化玩游戲的策略(世界模型),并了解當(dāng)今最尖端的生成架構(gòu),例如StyleGAN、BigGAN、BERT、GPT-2 和MuseNet 等。
本書面向的讀者對(duì)象
我們希望本書的讀者擁有一定的Python 編程經(jīng)驗(yàn)。如果你不熟悉Python,那么最好先從LearningPython.org 開始學(xué)習(xí)。有關(guān)Python 學(xué)習(xí)的免費(fèi)在線資源非常多,可以幫助你積累足夠的Python 基礎(chǔ)知識(shí),以更好地理解本書中的示例。此外,由于部分模型的描述用到了數(shù)學(xué)符號(hào),因此讀者最好對(duì)線性代數(shù)(例如矩陣乘法等)和一般概率論有扎實(shí)的了解。
最后,讀者還需要一個(gè)環(huán)境,能夠在其中運(yùn)行本書GitHub 代碼庫(kù)中的示例。作者盡最大努力確保書中的所有示例都無須耗費(fèi)大量的計(jì)算資源。
雖然有人說訓(xùn)練深度學(xué)習(xí)模型需要GPU,盡管GPU 確實(shí)有幫助,而且可以加快訓(xùn)練速度,但不是必需條件。實(shí)際上,如果你不熟悉深度學(xué)習(xí),那么我建議你先花些時(shí)間在筆記本電腦上嘗試一些小示例,等到掌握基礎(chǔ)知識(shí)后,再投入時(shí)間和精力研究如何利用硬件加快訓(xùn)練速度。
其他資源
我強(qiáng)烈推薦以下兩本書作為機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的入門書籍:
?? 《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 出版。
本書中的大多數(shù)論文都來自arXiv(這是一個(gè)免費(fèi)的科學(xué)研究論文存儲(chǔ)庫(kù))。如今,在論文經(jīng)過全面的同行評(píng)審之前,通常作者都會(huì)先將論文發(fā)布到arXiv。查閱最新提交的論文是掌握該領(lǐng)域最前沿發(fā)展的一種好方法。
此外,我還強(qiáng)烈推薦網(wǎng)站Papers with Code(地址:https://paperswithcode.com/),你可以在這個(gè)網(wǎng)站上找到各種機(jī)器學(xué)習(xí)任務(wù)的最新技術(shù)成果,以及論文和GitHub 官方代碼庫(kù)的鏈接。如果你想要快速了解目前哪些技術(shù)在各項(xiàng)任務(wù)中的表現(xiàn)最佳,那么這是一個(gè)非常好的資源,而且該網(wǎng)站也幫助我決定了本書涵蓋的技術(shù)。
最后, 有關(guān)在加速硬件上訓(xùn)練深度學(xué)習(xí)模型的資源, 我推薦Google Colaboratory(地址:https://colab.research.google.com/notebooks/intro.ipynb#recent=true)。這是一個(gè)免費(fèi)的Jupyter Notebook 環(huán)境,無需任何設(shè)置即可在云中運(yùn)行。你可以在免費(fèi)的GPU 運(yùn)行notebook,最多12 個(gè)小時(shí)。雖然你不必在GPU 上運(yùn)行本書中的示例,但GPU 可以加快訓(xùn)練過程。不管怎樣,Colab 都是免費(fèi)訪問GPU 資源的絕佳方法。
排版約定
本書使用了下述排版約定。
斜體(Italic)
表示新術(shù)語、URL、示例電子郵件地址、文件名和擴(kuò)展名。
等寬字體(Constant Width)
表示代碼,在段內(nèi)用以表示與代碼相關(guān)的元素,例如變量或函數(shù)名、數(shù)據(jù)庫(kù)、數(shù)據(jù)類型、環(huán)境變量、聲明和關(guān)鍵字。
等寬粗體字(Constant width bold)
表示命令或其他用戶輸入的文本。
斜體等寬字體(Constant Width Italic)
表示該文本應(yīng)當(dāng)由用戶提供的值或由用戶根據(jù)上下文決定的值替換。
使用代碼示例
你可以通過以下網(wǎng)址下載本書的補(bǔ)充材料(代碼示例,練習(xí)等):https://github.com/davidADSP/GDL_code。
本書的目的是幫助你完成工作。一般來說,在自己的程序或者文檔中使用本書附帶的示例代碼。你無須聯(lián)系我們獲得使用許可,除非你要復(fù)制大量的代碼。
例如,使用本書中的多個(gè)代碼片段編寫程序就無需獲得許可。但以CD-ROM的形式銷售或者分發(fā)O’Reilly 書中的示例代碼則需要獲得許可。回答問題時(shí)援引本書內(nèi)容以及書中示例代碼,無需獲得許可。在你自己的項(xiàng)目文檔中使用本書大量的示例代碼時(shí),則需要獲得許可。
我們不強(qiáng)制要求署名,但如果你這么做,我們深表感激。署名一般包括書名、作者、出版社和國(guó)際標(biāo)準(zhǔn)書號(hào)。例如:“Generative Deep Learning by David Foster (O’Reilly). Copyright 2019 Applied Data Science Partners Ltd., 978-1-492-04194-8”。
如果你覺得自身情況不在合理使用或上述允許的范圍內(nèi),請(qǐng)通過郵件和我們聯(lián)系,地址是 permissions@oreilly.com。
O’Reilly 在線學(xué)習(xí)平臺(tái)(O’Reilly Online Learning)
近40 年來,O’Reilly Media 致力于提供技術(shù)和商業(yè)培訓(xùn)、知識(shí)和卓越見解,來幫助眾多公司取得成功。
我們擁有獨(dú)一無二的專家和革新者組成的龐大網(wǎng)絡(luò),他們通過圖書、文章、會(huì)議和我們的在線學(xué)習(xí)平臺(tái)分享他們的知識(shí)和經(jīng)驗(yàn)。O’Reilly 的在線學(xué)習(xí)平臺(tái)允許你按需訪問現(xiàn)場(chǎng)培訓(xùn)課程、深入的學(xué)習(xí)路徑、交互式編程環(huán)境,以及O’Reilly 和200 多家其他出版商提供的大量文本和視頻資源。有關(guān)的更多信息,請(qǐng)?jiān)L問http://oreilly.com。
意見和疑問
請(qǐng)把你對(duì)本書的意見和疑問發(fā)給出版社:
美國(guó):
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中國(guó):
北京市西城區(qū)西直門南大街2號(hào)成銘大廈C座807室(100035)
奧萊利技術(shù)咨詢(北京)有限公司
這本書有專屬網(wǎng)頁(yè),你可以在上面找到本書的勘誤、示例和其他信息。網(wǎng)址是:http://shop.oreilly.com/product/0636920189817.do。
如果你對(duì)本書有一些評(píng)論或技術(shù)上的建議, 請(qǐng)發(fā)送電子郵件到
bookquestions@oreilly.com。
要了解O’Reilly 圖書、培訓(xùn)課程、會(huì)議和新聞的更多信息,請(qǐng)?jiān)L問我們的網(wǎng)站,網(wǎng)址是:http://www.oreilly.com。
我們的Facebook:http://facebook.com/oreilly。
我們的Twitter:http://twitter.com/oreillymedia。
我們的Youtube:http://www.youtube.com/oreillymedia。
致謝
本書得以付梓,我要感謝很多人給予的幫助。
首先, 我要感謝所有的技術(shù)審查人員, 特別感謝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。感謝你們?cè)趧?chuàng)作本書過程中的耐心等待,我非常期待未來我們攜手共同完成的所有機(jī)器學(xué)習(xí)項(xiàng)目!我還要特別感謝Ross,如果當(dāng)初我們沒有決定一起開展業(yè)務(wù),那么也就沒有這本書的問世,所以感謝你信任我作為你的業(yè)務(wù)合作伙伴!
還要感謝那些曾經(jīng)教過我數(shù)學(xué)的所有人,我有幸在學(xué)校遇到了最優(yōu)秀的數(shù)學(xué)老師,在他們的引導(dǎo)下我對(duì)數(shù)學(xué)產(chǎn)生了濃厚的興趣,并鼓勵(lì)我在大學(xué)繼續(xù)深造。我要感謝你們的付出,并毫無保留地教授該主題的知識(shí)。
非常感謝O’Reilly 的工作人員指導(dǎo)我完成本書的創(chuàng)作。特別感謝Michele Cronin 一路相伴,為我提供了很多反饋,并友好地提醒我完成每個(gè)章節(jié)!我要感謝Katie Tozer、Rachel Head 和Melanie Yarbrough 對(duì)本書的付出,還有Mike Loukides 第一個(gè)拋出橄欖枝,詢問我是否對(duì)寫書感興趣。你們給予了本書如此大力的支持,我要感謝各位為我提供了一個(gè)自由創(chuàng)作的平臺(tái)。
在本書的創(chuàng)作過程中,我的家人一直是鼓勵(lì)和支持的源泉。非常感謝我的媽媽Gillian Foster,她幫助我檢查了每一行的錯(cuò)字,當(dāng)初也是她教我學(xué)習(xí)數(shù)學(xué)加法!您在審閱本書時(shí)對(duì)細(xì)節(jié)的關(guān)注至關(guān)重要,對(duì)于您和爸爸為我創(chuàng)造的所有機(jī)遇,我深表感謝。還有我的父親Clive Foster,他是我學(xué)習(xí)計(jì)算機(jī)編程的啟蒙老師,這本書大量的實(shí)例都要?dú)w功于他早期給予我的耐心,當(dāng)初我曾嘗試用BASIC 制作足球游戲。我的兄弟Rob Foster 是這個(gè)世界上最謙虛的天才,尤其是在語言學(xué)領(lǐng)域,與他談?wù)揂I 以及基于文本的機(jī)器學(xué)習(xí)的未來給予了我很多啟發(fā)。最后,我要感謝我的Nana,她是我們所有人的靈感和樂趣之源。她對(duì)文學(xué)的熱愛是我迷上寫書的原因之一。
最后,我要感謝我的未婚妻(即將成為我的妻子)Lorna Barclay。她不僅認(rèn)真地審閱了本書中的每個(gè)單詞,而且還在整個(gè)創(chuàng)作過程中提供了源源不斷的支持,為我泡茶,帶來各種零食,而且她對(duì)細(xì)節(jié)的關(guān)注以及統(tǒng)計(jì)和機(jī)器學(xué)習(xí)的專業(yè)知識(shí)幫助我撰寫出了優(yōu)秀的生成建模指南。沒有你,我就無法完成本書的創(chuàng)作,感謝你投入大量時(shí)間來幫我組織和擴(kuò)展書中需要進(jìn)一步解釋的內(nèi)容。我向你保證,在這本書出版之后的(至少)幾周內(nèi),我不會(huì)在餐桌上談?wù)撋赡P汀?/p>
David Foster是Applied Data Science的聯(lián)合創(chuàng)始人,這是一家數(shù)據(jù)科學(xué)咨詢公司,為客戶提供創(chuàng)新的解決方案。他擁有英國(guó)劍橋三一學(xué)院的數(shù)學(xué)碩士學(xué)位,以及華威大學(xué)運(yùn)籌學(xué)碩士學(xué)位。
目錄
前言 .1
第一部分 生成式深度學(xué)習(xí)概述
第1 章 生成建模 11
1.1 什么是生成建模? 11
1.1.1 生成建模與判別建模 13
1.1.2 機(jī)器學(xué)習(xí)的發(fā)展 . 14
1.1.3 生成建模的興起 . 15
1.1.4 生成建模的框架 . 18
1.2 概率生成模型 21
1.2.1 你好,Wrodl ! 24
1.2.2 你的第一個(gè)概率生成模型 . 25
1.2.3 樸素貝葉斯 28
1.2.4 你好,Wrodl !續(xù)篇 . 31
1.3 生成建模的難題 33
表示學(xué)習(xí) 34
1.4 設(shè)置環(huán)境 37
1.5 小結(jié) 40
第2 章 深度學(xué)習(xí) 41
2.1 結(jié)構(gòu)化與非結(jié)構(gòu)化數(shù)據(jù) 41
2.2 深度神經(jīng)網(wǎng)絡(luò) 43
Keras 和TensorFlow 44
2.3 第一個(gè)深度神經(jīng)網(wǎng)絡(luò) . 45
2.3.1 加載數(shù)據(jù). 46
2.3.2 建立模型. 48
2.3.3 編譯模型. 52
2.3.4 訓(xùn)練模型. 54
2.3.5 評(píng)估模型. 55
2.4 改進(jìn)模型 58
2.4.1 卷積層 . 58
2.4.2 批標(biāo)準(zhǔn)化. 64
2.4.3 Dropout 層 . 66
2.4.4 結(jié)合所有層 68
2.5 小結(jié) 71
第3 章 變分自動(dòng)編碼器 73
3.1 畫展 73
3.2 自動(dòng)編碼器 . 76
3.2.1 第一個(gè)自動(dòng)編碼器 . 77
3.2.2 編碼器 . 78
3.2.3 解碼器 . 80
3.2.4 連接編碼器與解碼器 82
3.2.5 分析自動(dòng)編碼器 . 84
3.3 變化后的畫展 87
3.4 構(gòu)建變分自動(dòng)編碼器 . 89
3.4.1 編碼器 . 89
3.4.2 損失函數(shù). 94
3.4.3 分析變分自動(dòng)編碼器 97
3.5 使用VAE 生成面部圖像 98
3.5.1 訓(xùn)練VAE 99
3.5.2 分析VAE . 102
3.5.3 生成新面孔 . 103
3.5.4 隱空間的算術(shù) 104
3.5.5 面部變形 106
3.6 小結(jié) . 107
第4 章 生成對(duì)抗網(wǎng)絡(luò) 108
4.1 神秘獸 108
4.2 生成對(duì)抗網(wǎng)絡(luò)簡(jiǎn)介 111
4.3 第一個(gè)生成對(duì)抗網(wǎng)絡(luò) 112
4.3.1 判別器 113
4.3.2 生成器 115
4.3.3 訓(xùn)練GAN 119
4.4 GAN 面臨的難題 125
4.4.1 損失震蕩 125
4.4.2 模式收縮 126
4.4.3 不提供信息的損失函數(shù) 126
4.4.4 超參數(shù) 127
4.4.5 解決GAN 面臨的難題 . 127
4.5 WGAN 127
4.5.1 Wasserstein 損失 128
4.5.2 利普希茨約束 130
4.5.3 權(quán)重裁剪 131
4.5.4 訓(xùn)練WGAN 132
4.5.5 分析WGAN 133
4.6 WGAN-GP 134
4.6.1 梯度懲罰損失 135
4.6.2 分析WGAN-GP 139
4.7 小結(jié) . 140
第二部分 教機(jī)器繪畫、寫作、作曲和玩游戲
第5 章 繪畫 145
5.1 蘋果和橙子 146
5.2 CycleGAN 149
5.3 第一個(gè)CycleGAN 模型 . 151
5.3.1 簡(jiǎn)介 151
5.3.2 生成器(U-Net) 153
5.3.3 判別器 157
5.3.4 編譯CycleGAN 158
5.3.5 訓(xùn)練CycleGAN 161
5.3.6 分析CycleGAN 162
5.4 創(chuàng)建一個(gè)模仿莫奈作品的CycleGAN . 164
5.4.1 生成器(ResNet) 165
5.4.2 分析CycleGAN 166
5.5 神經(jīng)風(fēng)格遷移 . 168
5.5.1 內(nèi)容損失 169
5.5.2 風(fēng)格損失 172
5.5.3 總方差損失 . 175
5.5.4 運(yùn)行神經(jīng)風(fēng)格遷移 176
5.5.5 分析神經(jīng)風(fēng)格遷移模型 177
5.6 小結(jié) . 178
第6 章 寫作 179
6.1 壞家伙們的文學(xué)社 180
6.2 長(zhǎng)短期記憶網(wǎng)絡(luò) 181
6.3 第一個(gè)LSTM 網(wǎng)絡(luò) 182
6.3.1 分詞 183
6.3.2 建立數(shù)據(jù)集 . 185
6.3.3 LSTM 架構(gòu) . 187
6.3.4 嵌入層 187
6.3.5 LSTM 層 188
6.3.6 LSTM 元胞 . 190
6.4 生成新文本 192
6.5 RNN 擴(kuò)展 . 196
6.5.1 堆疊式循環(huán)網(wǎng)絡(luò) 196
6.5.2 門控制循環(huán)單元 198
6.5.3 雙向元胞 200
6.6 編碼器- 解碼器模型 200
6.7 問答生成器 203
6.7.1 問答數(shù)據(jù)集 . 204
6.7.2 模型架構(gòu) 205
6.7.3 推斷 210
6.7.4 模型的結(jié)果 . 212
6.8 小結(jié) . 214
第7 章 作曲 215
7.1 前提知識(shí) 216
音符 216