本書分為三部分。第1部分將幫助你快速理解從數(shù)據(jù)中學(xué)習(xí)、深度學(xué)習(xí)基本架構(gòu)、如何準備數(shù)據(jù),以及深度學(xué)習(xí)中經(jīng)常使用的基本概念。第二部分將重點介紹無監(jiān)督學(xué)習(xí)算法。從自編碼器開始,然后轉(zhuǎn)向?qū)訑?shù)更深、規(guī)模更大的神經(jīng)網(wǎng)絡(luò)模型。第三部分介紹監(jiān)督學(xué)習(xí)算法,你將掌握基本和高級深度學(xué)習(xí)模型的實現(xiàn)方法,并能夠?qū)⑦@些模型用于分類、回歸以及從潛在空間生成數(shù)據(jù)等應(yīng)用場合。
網(wǎng)絡(luò)上的信息呈指數(shù)級爆炸式增長,通過瀏覽網(wǎng)絡(luò)信息獲得有助于進行深度學(xué)習(xí)的可靠內(nèi)容變得比以往任何時候都要困難。如果你是一個初學(xué)者,希望從頭開始學(xué)習(xí)深度學(xué)習(xí)理論以及構(gòu)建深度學(xué)習(xí)模型,并且已經(jīng)具備了入門所需的基本數(shù)學(xué)知識和編程知識,那么這本書正是你所需要的。 本書從機器學(xué)習(xí)的基本概述開始,指導(dǎo)你建立流行的基于Python語言的深度學(xué)習(xí)程序框架。你還將了解如何實現(xiàn)對數(shù)據(jù)的清洗和預(yù)處理,以便使用數(shù)據(jù)樣本進行深度學(xué)習(xí),并逐步探索神經(jīng)網(wǎng)絡(luò)的訓(xùn)練方法和應(yīng)用技術(shù)。本書還將幫助你親自動手訓(xùn)練單層和多層神經(jīng)元,從而深入理解神經(jīng)網(wǎng)絡(luò)模型的工作原理。稍后,你將在一些簡單應(yīng)用實例的幫助下掌握若干當(dāng)前比較流行的神經(jīng)網(wǎng)絡(luò)架構(gòu),例如CNN、RNN、AE、VAE和GAN。你甚至將從頭開始構(gòu)建這些模型。在每一章的結(jié)尾處有一個問答環(huán)節(jié),可以幫助你測試對本書內(nèi)容的掌握情況。 當(dāng)學(xué)完本書的時候,你將能夠精通深度學(xué)習(xí)的概念,并擁有使用特定算法與適當(dāng)工具解決不同任務(wù)所需要的知識。 通過學(xué)習(xí)本書,你將能夠: · 實現(xiàn)用于完成圖像分類和自然語言處理任務(wù)的RNN模型和長短時記憶模型。 · 探索CNN模型在計算機視覺和信號處理中的作用。 · 理解深度學(xué)習(xí)建模的倫理。 · 理解與深度學(xué)習(xí)相關(guān)的數(shù)學(xué)術(shù)語。 · 構(gòu)建GAN和VAE模型,并且從已學(xué)習(xí)的潛在空間中生成虛擬圖像。 · 通過可視化技術(shù)實現(xiàn)AE和VAE模型的性能比較。
多年來,我們這些忠實地致力于研究機器學(xué)習(xí)的群體見證了這個領(lǐng)域的發(fā)展和繁榮,一些技術(shù)的產(chǎn)生令人驚嘆,甚至有望帶來徹底的社會變革。然而,對于那些想要加入我們來研究這一領(lǐng)域的人們而言,機器學(xué)習(xí)知識似乎有點令人望而生畏。當(dāng)然,網(wǎng)絡(luò)上的相關(guān)信息太多了,我們很難瀏覽所有的論文和代碼,為那些想要加入深度學(xué)習(xí)領(lǐng)域的人找到可靠的介紹性內(nèi)容。雖然市面上有很多關(guān)于機器學(xué)習(xí)知識的介紹性書籍,但大部分都不滿足那些特別想從事深度學(xué)習(xí)工作的人們的需求,而且要求讀者具備必要的、限度的數(shù)學(xué)和算法知識,以及一些必要的編程技能。
本書的目標是幫助初學(xué)者建立強大的深度學(xué)習(xí)基礎(chǔ),掌握使用眾所周知的方法建立深度學(xué)習(xí)模型所需要的基本概念。如果這個目標聽上去符合你的需求,那么本書可能正是你所需要的。本書假定讀者先前沒有接觸過神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí),并從回顧深度學(xué)習(xí)所需要的機器學(xué)習(xí)基礎(chǔ)知識開始。然后,本書解釋了如何通過清洗和預(yù)處理數(shù)據(jù)為深度學(xué)習(xí)做準備,隨后逐步介紹神經(jīng)網(wǎng)絡(luò)和流行的監(jiān)督神經(jīng)網(wǎng)絡(luò)架構(gòu)(如卷積神經(jīng)網(wǎng)絡(luò)(CNN,Convolutional Neural Network)、循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN,Recurrent Neural Network)和生成對抗網(wǎng)絡(luò)(GAN,Generative Adversarial Network))以及無監(jiān)督架構(gòu)(如自編碼器(AE)、變分自編碼器(VAE)和受限玻耳茲曼機(RBM))。在每一章的結(jié)尾,你將有機會測試你對概念的理解程度,并反思自己的成長過程。
在本書的后,你將理解深度學(xué)習(xí)的概念和秘訣,并將能夠分辨適用于特定任務(wù)的算法。
本書的目標讀者
本書是為想要從深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)知識開始學(xué)習(xí)的、心懷抱負的數(shù)據(jù)科學(xué)家和深度學(xué)習(xí)工程師準備的。本書不需要讀者事先接觸過深度學(xué)習(xí)或機器學(xué)習(xí),當(dāng)然如果接觸過會更好。讀者只需要熟悉線性代數(shù)和Python編程就可以了。
本書是為珍惜時間、想要學(xué)到編程所需的深度學(xué)習(xí)要點的讀者準備的。
如果不知道深度學(xué)習(xí)的基礎(chǔ)知識,那么它可能會讓你感到害怕。許多人因為不理解Web上的術(shù)語或示例程序,所以感到很沮喪。這就導(dǎo)致了人們在選擇深度學(xué)習(xí)算法時可能會做出糟糕的決定,而且他們無法預(yù)見進行這種選擇所產(chǎn)生的后果。因此,本書是為具有下列意圖的讀者準備的:
重視獲得深度學(xué)習(xí)概念的良好定義。
想要使用結(jié)構(gòu)化的方法從頭開始學(xué)習(xí)深度學(xué)習(xí)。
渴望了解并真正理解深度學(xué)習(xí)的基本概念。
想知道如何預(yù)處理數(shù)據(jù),以便在深度學(xué)習(xí)算法中使用。
對一些先進的深度學(xué)習(xí)算法感到好奇。
本書的主要內(nèi)容
第1章 給出了機器學(xué)習(xí)的概述,不僅介紹了機器學(xué)習(xí)背后的動機以及該領(lǐng)域常用的術(shù)語,還介紹了深度學(xué)習(xí)的基本概念以及它是如何適應(yīng)人工智能發(fā)展的。
第2章 講解如何配置TensorFlow和Keras深度學(xué)習(xí)開發(fā)平臺,并介紹它們在深度學(xué)習(xí)中的用途和目的。本章還簡要介紹了其他深度學(xué)習(xí)程序框架和程序庫,讓你能夠以一種低成本的方式熟悉它們。
第3章 介紹數(shù)據(jù)處理背后的主要概念,數(shù)據(jù)經(jīng)過處理后才能夠用在深度學(xué)習(xí)中。本章將涵蓋格式化分類以及實值輸出和輸入的基本概念,還將探索關(guān)于數(shù)據(jù)增強和降低數(shù)據(jù)維度的技術(shù)。
第4章 介紹深度學(xué)習(xí)理論中的基本概念,包括回歸和分類的性能度量以及過擬合的識別,還提供了一些關(guān)于超參數(shù)調(diào)優(yōu)的警告。
第5章 介紹神經(jīng)元的概念,并將其連接到感知機模型,該模型以簡單的方式從數(shù)據(jù)中學(xué)習(xí)。感知機模型是理解從數(shù)據(jù)中學(xué)習(xí)的基本神經(jīng)模型的關(guān)鍵,也可以用來處理線性不可分數(shù)據(jù)。
第6章 通過使用多層感知機算法,讓你直面深度學(xué)習(xí)的個挑戰(zhàn),例如基于誤差小化的梯度下降技術(shù),以及實現(xiàn)模型泛化的超參數(shù)調(diào)優(yōu)。
第7章 通過解釋編碼層和解碼層的必要性來描述自編碼器模型,探索與自編碼器模型相關(guān)的損失函數(shù),并將其應(yīng)用于降維問題和數(shù)據(jù)可視化。
第8章 介紹了深度信念網(wǎng)絡(luò)的概念和這種深度無監(jiān)督學(xué)習(xí)的含義,通過引入深層自編碼器并將它們與淺層自編碼器進行對比來解釋這些概念。
第9章 介紹生成模型在無監(jiān)督深度學(xué)習(xí)領(lǐng)域背后的哲學(xué),以及它們在生成抗噪聲魯棒模型中的重要性。在處理擾動數(shù)據(jù)時,變分自編碼器是深度自編碼器的更好的替代方案。
第10章 通過介紹RBM來補充書中對深度信念模型知識的覆蓋。本章介紹了RBM的前后雙向傳播性質(zhì),并與AE單向的前向傳播性質(zhì)進行比較。本章分別使用RBM和AE模型實現(xiàn)對降維數(shù)據(jù)的可視化表示,并進行了比較。
第11章 解釋深度神經(jīng)網(wǎng)絡(luò)和廣度神經(jīng)網(wǎng)絡(luò)在性能和復(fù)雜性上的差異,并在神經(jīng)元之間的連接方面引入了密集網(wǎng)絡(luò)和稀疏網(wǎng)絡(luò)的概念。
第12章 介紹卷積神經(jīng)網(wǎng)絡(luò),從卷積運算開始,然后講解集成卷積運算層,從而學(xué)習(xí)可以對數(shù)據(jù)進行操作的濾波器。本章后展示了如何可視化所學(xué)習(xí)的濾波器。
第13章 提出了基本的循環(huán)網(wǎng)絡(luò)的概念,揭示了它們的缺點,以說明長短時記憶模型的存在價值及其成功之處。本章還探討了序列模型在圖像處理和自然語言處理方面的應(yīng)用。
第14章 介紹了基于GAN模型的半監(jiān)督學(xué)習(xí)方法,它屬于對抗學(xué)習(xí)家族。本章解釋了生成器和判別器的概念,并討論了為什么對訓(xùn)練數(shù)據(jù)概率分布有良好的近似可以導(dǎo)致模型(例如,從隨機噪聲中產(chǎn)生數(shù)據(jù))的成功。
第15章 簡要地展示了深度學(xué)習(xí)領(lǐng)域嶄新的、令人興奮的主題和機會。如果你想繼續(xù)學(xué)習(xí),可以在這里找到Packt的其他資源,你可以使用這些資源在此領(lǐng)域繼續(xù)前進。
如何充分利用本書
你需要確保自己的Web瀏覽器能夠連接到谷歌Colabs,網(wǎng)址是http://colab.research.google.com/。
雖然本書假設(shè)讀者沒有事先接觸過深度學(xué)習(xí)或機器學(xué)習(xí),但是你必須熟悉一些線性代數(shù)知識和Python編程,以便充分利用本書。
為了確保與機器學(xué)習(xí)和深度學(xué)習(xí)Python庫的未來版本兼容,我們在本書的代碼包和GitHub庫中包含了一個使用!pip freeze指令生成的當(dāng)前版本列表。然而,這些只是為了參考和未來的兼容性,記住谷歌Colabs已經(jīng)具備了所有必要的設(shè)置。
你還可以在https://github.com/PacktPublishing/上從豐富的書籍和視頻目錄中獲得其他代碼包。去看看吧!同樣,庫的列表僅供參考,但谷歌Colabs上有的設(shè)置。
一旦你使用本書完成了學(xué)習(xí)之旅,先慶祝一下,然后再密切關(guān)注本書的后一章,它會為你指明新的方向。記住,永遠堅持學(xué)習(xí),這是成功的關(guān)鍵之一。
下載示例代碼及彩色圖像
本書的示例代碼文件及彩色插圖,可以從www.packtpub.com/通過個人賬號下載,也可以訪問華章圖書官網(wǎng)http://www.hzbook.com,通過注冊并登錄個人賬號下載。
在代碼文件下載完畢之后,請確保使用下列版本的解壓縮軟件解壓或提取文件:
Windows系統(tǒng):WinRAR/7-Zip
Mac系統(tǒng):Zipeg/iZip/UnRarX
Linux系統(tǒng):7-Zip/PeaZip
本書的代碼包也可以在GitHub上獲取,網(wǎng)址是https://github.com/PacktPublishing/Deep-Learning-for-Beginners。如果代碼有更新, GitHub存儲庫中的代碼也會更新。
本書的排版約定
代碼體:表示文本中的代碼、數(shù)據(jù)庫表名、文件夾名、文件名、文件擴展名、路徑名、虛擬URL、用戶輸入和Twitter賬戶名。下面有一個例子:“潛在編碼器模型latent_ncdr和autoencoder模型中的predict()方法在指定的層上產(chǎn)生輸出!
代碼的示例如下:
當(dāng)我們需要讓你注意代碼塊的特定部分時,相關(guān)內(nèi)容會加粗:
命令行輸入與輸出的格式如下所示:
黑體:表示新的術(shù)語、重要的詞,或者屏幕上看到的詞(例如菜單或?qū)υ捒蛑械膯卧~)。這里有一個例子:“重要的是一個叫作雙曲正切的新激活函數(shù)!
表示警告或重要提示。
表示提示和技巧。
譯者序
序
前言
作者簡介
審校者簡介
部分 深度學(xué)習(xí)快速入門
第1章 機器學(xué)習(xí)概述 2
1.1 接觸ML生態(tài)系統(tǒng) 2
1.2 從數(shù)據(jù)中訓(xùn)練ML算法 4
1.3 深度學(xué)習(xí)概述 5
1.3.1 神經(jīng)元模型 5
1.3.2 感知機學(xué)習(xí)算法 6
1.3.3 淺層網(wǎng)絡(luò) 8
1.3.4 深度網(wǎng)絡(luò) 11
1.4 深度學(xué)習(xí)在現(xiàn)代社會中的重要性 13
1.5 小結(jié) 14
1.6 習(xí)題與答案 15
1.7 參考文獻 15
第2章 深度學(xué)習(xí)框架的搭建與概述 16
2.1 Colaboratory簡介 16
2.2 TensorFlow的簡介與安裝 17
2.2.1 安裝 17
2.2.2 擁有GPU支持的TensorFlow 18
2.2.3 TensorFlow背后的原理 18
2.3 Keras的簡介與安裝 19
2.3.1 安裝 19
2.3.2 Keras背后的原理 19
2.4 PyTorch簡介 21
2.5 Dopamine簡介 21
2.6 其他深度學(xué)習(xí)程序庫 23
2.6.1 Caffe 23
2.6.2 Theano 23
2.6.3 其他程序庫 23
2.7 小結(jié) 24
2.8 習(xí)題與答案 24
2.9 參考文獻 24
第3章 數(shù)據(jù)準備 26
3.1 二元數(shù)據(jù)與二元分類 27
3.1.1 克利夫蘭心臟病數(shù)據(jù)集的二元目標 27
3.1.2 二值化MINST數(shù)據(jù)集 30
3.2 分類數(shù)據(jù)與多個類別 33
3.2.1 將字符串標簽轉(zhuǎn)換成數(shù)字 34
3.2.2 將分類轉(zhuǎn)換成獨熱編碼 36
3.3 實值數(shù)據(jù)與單變量回歸 38
3.3.1 縮放到特定范圍的數(shù)值 38
3.3.2 標準化到零均值和單位方差 41
3.4 改變數(shù)據(jù)的分布 42
3.5 數(shù)據(jù)增強 44
3.5.1 尺度縮放 44
3.5.2 添加噪聲 45
3.5.3 旋轉(zhuǎn) 45
3.5.4 其他增強手段 46
3.6 數(shù)據(jù)降維 46
3.6.1 監(jiān)督算法 47
3.6.2 無監(jiān)督技術(shù) 48
3.6.3 關(guān)于維度的數(shù)量 52
3.7 操縱數(shù)據(jù)的道德影響 53
3.8 小結(jié) 53
3.9 習(xí)題與答案 53
3.10 參考文獻 54
第4章 從數(shù)據(jù)中學(xué)習(xí) 55
4.1 學(xué)習(xí)的目的 55
4.1.1 分類問題 56
4.1.2 回歸問題 60
4.2 度量成功與錯誤 63
4.2.1 二元分類 64
4.2.2 多元分類 65
4.2.3 回歸分析矩陣 69
4.3 識別過擬合和泛化 70
4.3.1 擁有測試數(shù)據(jù)的情形 71
4.3.2 沒有測試數(shù)據(jù)的情形 72
4.4 機器學(xué)習(xí)背后的藝術(shù) 74
4.5 訓(xùn)練深度學(xué)習(xí)算法的倫理意蘊 78
4.5.1 使用適當(dāng)?shù)哪P托阅芏攘恐笜? 79
4.5.2 小心對待并驗證異常值 79
4.5.3 抽樣不足組的權(quán)重類 80
4.6 小結(jié) 80
4.7 習(xí)題與答案 81
4.8 參考文獻 81
第5章 訓(xùn)練單個神經(jīng)元 83
5.1 感知機模型 83
5.1.1 概念的可視化 83
5.1.2 張量運算 84
5.2 感知機學(xué)習(xí)算法 86
5.3 處理線性不可分數(shù)據(jù)的感知機 88
5.3.1 線性可分數(shù)據(jù)的收斂 88
5.3.2 線性不可分數(shù)據(jù)的收斂 91
5.4 小結(jié) 92
5.5 習(xí)題與答案 93
5.6 參考文獻 93
第6章 訓(xùn)練多層神經(jīng)元 94
6.1 MLP模型 94
6.2 小化誤差 96
6.2.1 步驟1:初始化 99
6.2.2 步驟2:前向傳播 99
6.2.3 步驟3:計算損失 101
6.2.4 步驟4:反向傳播 101
6.3 尋找超參數(shù) 106
6.4 小結(jié) 109
6.5 習(xí)題與答案 109
6.6 參考文獻 110
第二部分 無監(jiān)督深度學(xué)習(xí)
第7章 自編碼器 112
7.1 無監(jiān)督學(xué)習(xí)簡介 112
7.2 編碼層與解碼層 113
7.2.1 編碼層 115
7.2.2 解碼層 116
7.2.3 損失函數(shù) 116
7.2.4 學(xué)習(xí)與測試 117
7.3 數(shù)據(jù)降維與可視化應(yīng)用 119
7.3.1 MNIST數(shù)據(jù)的準備 120
7.3.2 MNIST的自編碼器 120
7.3.3 模型訓(xùn)練與可視化 122
7.4 無監(jiān)督學(xué)習(xí)的倫理意蘊 126
7.5 小結(jié) 127
7.6 習(xí)題與答案 127
7.7 參考文獻 128
第8章 深度自編碼器 129
8.1 深度信念網(wǎng)絡(luò)簡介 129
8.2 建立深度自編碼器 130
8.2.1 批歸一化 130
8.2.2 隨機失活 134
8.3 探索深度自編碼器的潛在空間 139
8.3.1 CIFAR-10 139
8.3.2 MNIST 146
8.4 小結(jié) 148
8.5 習(xí)題與答案 148
8.6 參考文獻 149
第9章 變分自編碼器 150
9.1 深度生成模型簡介 150
9.2 研究變分自編碼器模型 151
9.2.1 回顧心臟病數(shù)據(jù)集 153
9.2.2 重參數(shù)化技巧與采樣 154
9.2.3 學(xué)習(xí)編碼器中的后驗概率分布參數(shù) 154
9.2.4 解碼器建模 156
9.2.5 小化重構(gòu)損失 156
9.2.6 訓(xùn)練VAE模型 157
9.2.7 使用VAE生成數(shù)據(jù) 159
9.3 深度和淺層VAE在MNIST上的性能比較 161
9.3.1 淺層VAE模型 162
9.3.2 深度VAE模型 164
9.3.3 VAE模型去噪 168
9.4 生成模型的倫理意蘊 168
9.5 小結(jié) 169
9.6 習(xí)題與答案 169
9.7 參考文獻 170
第10章 受限玻爾茲曼機 171
10.1 RBM模型