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