基于TensorFlow的深度學習:神經(jīng)網(wǎng)絡、計算機視覺和NLP的理論與實踐 [美]馬格努斯·?寺 周翊民 譯
定 價:149 元
- 作者:[美]馬格努斯·埃克曼
- 出版時間:2024/1/1
- ISBN:9787111741725
- 出 版 社:機械工業(yè)出版社
- 中圖法分類:TP18
- 頁碼:
- 紙張:純質(zhì)紙
- 版次:
- 開本:16開
本書系統(tǒng)地講解了深度學習技術(shù),闡明核心概念和實踐編程技術(shù),是開發(fā)者、數(shù)據(jù)科學家、分析師,以及之前沒有機器學習或統(tǒng)計經(jīng)驗的人員人員的理想選擇。
本書介紹了深度神經(jīng)網(wǎng)絡的人工神經(jīng)元和全連接、卷積和循環(huán)層等基本構(gòu)建模塊,展示了如何使用它們來構(gòu)建先進的架構(gòu)。書中還講解了如何使用這些概念構(gòu)建計算機視覺和自然語言處理(NLP)網(wǎng)絡,包括Mask R-CNN、GPT和BERT。此外,書中還描述了自然語言翻譯器和能根據(jù)圖像內(nèi)容生成自然語言系統(tǒng)的原理。
本書使用TensorFlow和Keras提供了簡潔、注釋良好的代碼示例,還提供了相應的PyTorch示例,涵蓋了工業(yè)和學術(shù)界關于深度學習的兩個主要Python庫。最后,介紹了神經(jīng)結(jié)構(gòu)搜索(NAS),并探索了重要的倫理問題,為進一步學習深度學習提供了資源。
Preface
前 言
深度學習(DL)是一個快速發(fā)展的領域,它在圖像分類、生成圖像的自然語言描述、自然語言翻譯、語音到文本和文本到語音的轉(zhuǎn)換等方面取得了驚人的成果。本書詳細闡述了深度學習這個主題,并提供了實踐經(jīng)驗,為進一步學習打下堅實基礎。
在本書中,使用綠色文本框來突出特別重要和關鍵的概念。首先指出的是,深度學習這個概念很重要。
我們首先學習感知器和其他人工神經(jīng)元(深度神經(jīng)網(wǎng)絡的基本構(gòu)件),以及全連接的前饋網(wǎng)絡和卷積網(wǎng)絡,并應用這些網(wǎng)絡來解決實際問題,例如基于大量數(shù)據(jù)預測房價或識別圖像屬于哪個類別,圖P-1是CIFAR-10圖像數(shù)據(jù)集的分類和示例,我們將在第7章中對該數(shù)據(jù)集進行詳細研究。
圖P-1 CIFAR-10圖像數(shù)據(jù)集的分類和示例(Krizhevsky,2009)。ㄒ姴什澹
(圖片來源:https://www.cs.toronto.edu/ kriz/cifar.html)
我們接著學習如何使用編碼來表示自然語言中的單詞,這種編碼技術(shù)可以捕捉被編碼的單詞的語義詞。然后,使用這些編碼與循環(huán)神經(jīng)網(wǎng)絡一起創(chuàng)建自然語言翻譯器,如圖P-2所示。這個翻譯器可以自動將簡單句子從英語翻譯為法語或其他類似語言。
最后,我們將學習如何構(gòu)建一個結(jié)合圖像和語言處理的圖像字幕網(wǎng)絡。該網(wǎng)絡以圖像為輸入,可自動生成圖像的自然語言描述。
在本書的學習進程中,還將討論許多其他細節(jié)。此外,本書將一些其他重要主題作為附錄,供讀者深入學習。
圖P-2 輸入為英語而輸出為對應法語的神經(jīng)網(wǎng)絡翻譯器
認識深度學習
DL可解釋為一類機器學習算法,使用多層計算單元,其中每一層學習自身的輸入數(shù)據(jù)表示,這些表示由后面的層以分層方式組合。這個定義有些抽象,特別是考慮到還沒有描述層和計算單元的概念,但在前幾章將提供更多具體實例來闡明這個定義。
深度神經(jīng)網(wǎng)絡(DNN)是DL的基本組成部分,它是受生物神經(jīng)元啟發(fā)而產(chǎn)生的。關于DL技術(shù)究竟能在多大程度上模擬大腦活動一直存在爭論,其中有人認為使用神經(jīng)網(wǎng)絡這個術(shù)語會讓人覺得它比實際情況更先進。因此,他們建議使用“單元”而不是“人工神經(jīng)元”,使用“網(wǎng)絡”而不是“神經(jīng)網(wǎng)絡”。毫無疑問,DL和更廣泛的 AI領域已經(jīng)被主流媒體大肆炒作。在寫作本書時,很容易產(chǎn)生這樣的感覺,即我們將創(chuàng)造出像人類一樣思考的機器,盡管最近表達懷疑的文章更為常見。讀了本書后,你會對DL可以解決哪些問題有更準確的了解。在本書中,我們會自由選擇使用“神經(jīng)網(wǎng)絡”和“神經(jīng)元”這些詞,不過讀者也應當注意到,本書所介紹的算法更多地與機器能力,而不是人類大腦的實際工作方式有關。圖P-3所示為人工智能、機器學習、深度學習和深度神經(jīng)網(wǎng)絡之間的關系。不同橢圓的面積大小并不代表該類相對于另一類的類別范疇。
在本書中,斜體部分的內(nèi)容是陳述一些題外話或主觀觀點。如果你認為它們對你的閱讀沒有價值,可以完全忽略。
DNN是DL的子集。
DL是ML的子集,而ML是AI的子集。
本書不重點討論DL的確切定義及其邊界,也不深入討論ML或AI其他領域的細節(jié),而是重點闡述DNN及其應用。
圖P-3 人工智能、機器學習、深度學習和深度神經(jīng)網(wǎng)絡之間的關系
深度神經(jīng)網(wǎng)絡簡史
上述內(nèi)容只是粗略地提到網(wǎng)絡但沒有描述什么是網(wǎng)絡。本書前幾章詳細討論了網(wǎng)絡架構(gòu),這里只把網(wǎng)絡視為一個有輸入和輸出的不透明系統(tǒng)就足夠了。使用模型可將信息(圖像或文本序列)作為網(wǎng)絡輸入,然后網(wǎng)絡會輸出相應信息,比如對圖像的解釋(見圖P-4),或不同語言的自然語言翻譯(見圖P-2)。
圖P-4 深度神經(jīng)網(wǎng)絡作為一種不透明系統(tǒng),將圖像作為輸入,然后輸出圖像中的對象類型
如前所述,神經(jīng)網(wǎng)絡的核心部分是人工神經(jīng)元。第一個人工神經(jīng)元模型在1943年問世(McCulloch and Pitts,1943),掀啟了第一次神經(jīng)網(wǎng)絡研究的浪潮。隨后,在1957年Rosenblatt感知器出現(xiàn)(Rosenblatt,1958)。感知器的重要貢獻是自動學習算法,即系統(tǒng)自動學習所期望的行為。本書第1章詳細介紹了感知器。感知器有其局限性,盡管通過將多個感知器組合成多層網(wǎng)絡可以打破這些局限性,但最初的學習算法并沒有擴展到多層網(wǎng)絡。根據(jù)普遍說法,這是導致神經(jīng)網(wǎng)絡研究開始衰落的原因。人工智能進入了第一個寒冬,據(jù)說是因Minsky和Papert在他們于1969年所著一書中提出缺失多層網(wǎng)絡學習算法是一個嚴重問題引起的。但這個話題和說法頗具爭議性。Olazaran研究了Minsky和Papert的陳述是否被歪曲(Olazaran,1996)。此外,Schmidhuber(2015)指出,早在Minsky和Papert的書出版4年之前,文獻(Ivakhnenko和Lapa,1965)中就提出了一種用于多層網(wǎng)絡的學習
算法。
第二次神經(jīng)網(wǎng)絡研究浪潮始于20世紀80年代,很大程度上受到了(Rumelhart et al.,1986)文獻的影響(該文獻描述了用于多層網(wǎng)絡自動訓練的反向傳播算法)。Rumelhart和他的同事證明,這種算法可以用來突破感知器的局限性,解決Minsky和Papert提出的問題。Rumelhart和他的同事在神經(jīng)網(wǎng)絡的背景下推廣了反向傳播算法,但這并不是該算法在文獻中首次出現(xiàn)。早在1970年該算法就被用于類似問題領域(Linnainmaa,1970)。1981年,Werbos(1981)又在神經(jīng)網(wǎng)絡背景下對該算法進行了描述。
周翊民
中國科學院深圳先進技術(shù)研究院研究
員,博士生導師。2008 年在英國牛津大學
工程科學系獲得博士學位,曾在英國拉夫
堡大學電子電氣工程系從事博士后研究工
作。主要從事非線性控制、人工智能、模
糊神經(jīng)網(wǎng)絡、機器人、無人機控制系統(tǒng)、
智能電網(wǎng)等相關技術(shù)的研究。以項目負責
人身份申請并獲批國家自然基金、科技部
重點研發(fā)計劃、廣東省科技專項、深圳市
基礎重點研究項目等多個項目。發(fā)表SCI/
EI文章100余篇,申請專利50余項,出版
英文專著2 部,譯著1部。
CONTENTS
目 錄
推薦序一
推薦序二
前言
第1章 Rosenblatt 感知器 1
1.1 雙輸入感知器示例 3
1.2 感知器學習算法 4
1.3 感知器的局限性 9
1.4 組合多個感知器 11
1.5 感知器的幾何解釋 13
1.6 理解偏差項 14
第2章 基于梯度的學習 16
2.1 感知器學習算法的直觀解釋 16
2.2 用梯度下降法解決學習問題 18
2.3 網(wǎng)絡中的常量與變量 20
2.4 感知器學習算法的解析 20
2.5 感知器學習算法的幾何描述 22
2.6 重新審視不同類型的感知器 22
2.7 使用感知器進行模式識別 24
第3章 Sigmoid神經(jīng)元與反向
傳播 26
3.1 改進的神經(jīng)元實現(xiàn)多層網(wǎng)絡的
梯度下降 26
3.2 激活函數(shù)的選擇 30
3.3 復合函數(shù)和鏈式法則 30
3.4 利用反向傳播計算梯度 31
3.4.1 前向傳播階段 37
3.4.2 后向傳播階段 37
3.4.3 權(quán)重調(diào)整 38
3.5 每層具有多個神經(jīng)元的反向
傳播 39
3.6 編程示例:學習XOR函數(shù) 40
3.7 網(wǎng)絡結(jié)構(gòu) 43
第4章 用于多分類的全連接網(wǎng)絡 45
4.1 訓練網(wǎng)絡時所用數(shù)據(jù)集簡介 45
4.1.1 探索數(shù)據(jù)集 46
4.1.2 數(shù)據(jù)集中的人為偏見 48
4.1.3 訓練集、測試集和泛化 49
4.1.4 超參數(shù)調(diào)優(yōu)和測試集信息
泄漏 50
4.2 訓練與推理 51
4.3 擴展網(wǎng)絡和學習算法以進行
多分類 51
4.4 用于數(shù)字分類的網(wǎng)絡 52
4.5 多分類的損失函數(shù) 52
4.6 編程示例:手寫數(shù)字分類 53
4.7 小批量梯度下降 60
第5章 走向DL:框架和網(wǎng)絡
調(diào)整 61
5.1 編程示例:轉(zhuǎn)移到DL框架 61
5.2 飽和神經(jīng)元和梯度消失問題 65
5.3 避免神經(jīng)元飽和的初始化和歸一化
技術(shù) 66
5.3.1 權(quán)重初始化 67
5.3.2 輸入標準化 68
5.3.3 批歸一化 68
5.4 用于緩解飽和輸出神經(jīng)元影響的
交叉熵損失函數(shù) 69
5.5 使用不同激活函數(shù)以避免隱藏層
中梯度消失問題 73
5.6 提高學習的梯度下降法中的
變量 76
5.7 實驗:調(diào)整網(wǎng)絡和學習參數(shù) 78
5.8 超參數(shù)調(diào)優(yōu)和交叉驗證 80
5.8.1 使用驗證集來避免過
擬合 81
5.8.2 交叉驗證以改善訓練數(shù)據(jù)
的使用 81
第6章 全連接網(wǎng)絡在回歸中的
應用 83
6.1 輸出單元 83
6.1.1 二元分類的邏輯單元 84
6.1.2 用于多分類的Softmax
單元 84
6.1.3 線性回歸單元 86
6.2 波士頓住房數(shù)據(jù)集 87
6.3 編程示例:用DNN預測房價 88
6.4 用正則化改進泛化 91
6.5 實驗:更深層次和正則化的房價
預測模型 93
第7章 卷積神經(jīng)網(wǎng)絡在圖像分類中
的應用 94
7.1 CIFAR-10數(shù)據(jù)集 95
7.2 卷積層的特征和構(gòu)建模塊 97
7.3 將特征映射組合成一個卷積層 99
7.4 將卷積層和全連接層結(jié)合成一個
網(wǎng)絡 100
7.5 稀疏連接和權(quán)重共享的影響 102
7.6 編程示例:用卷積網(wǎng)絡進行圖像
分類 105
第8章 深度卷積神經(jīng)網(wǎng)絡和預訓練
模型 113
8.1 VGGNet 113
8.2 GoogLeNet 116
8.3 ResNet 119
8.4 編程示例:使用預先訓練的ResNet實現(xiàn) 124
8.5 遷移學習 126
8.6 CNN和池化的反向傳播 128
8.7 正則化技術(shù)的數(shù)據(jù)增強 128
8.8 CNN的局限性 129
8.9 用深度可分離卷積進行參數(shù)
約簡 130
8.10 用高效網(wǎng)絡實現(xiàn)正確的網(wǎng)絡
設計平衡 131
第9章 用循環(huán)神經(jīng)網(wǎng)絡預測時間
序列 132
9.1 前饋網(wǎng)絡的局限性 134
9.2 循環(huán)神經(jīng)網(wǎng)絡 135
9.3 循環(huán)層的數(shù)學表示 135
9.4 將圖層組合成一個RNN 136
9.5 RNN的另一視圖并按時間展開 137
9.6 基于時間的反向傳播 138
9.7 編程示例:預測圖書銷量 140
9.7.1 標準化數(shù)據(jù)并創(chuàng)建訓練
示例 144
9.7.2 創(chuàng)建一個簡單的RNN 145
9.7.3 與無循環(huán)網(wǎng)絡的比較 148
9.7.4 將示例擴展為多輸入
變量 149
9.8 RNN的數(shù)據(jù)集注意事項 149
第10章 長短期記憶 151
10.1 保持梯度健康 151
10.2 LSTM介紹 154
10.3 LSTM激活函數(shù) 157
10.4 創(chuàng)建LSTM單元構(gòu)成的網(wǎng)絡 157
10.5 LSTM的其他理解 158
10.6 相關話題:高速神經(jīng)網(wǎng)絡和跳
連接 159
第11章 使用LSTM和集束搜索
自動補全文本 161
11.1 文本編碼 161
11.2 長期預測和自回歸模型 162
11.3 集束搜索 163
11.4 編程示例:使用LSTM實現(xiàn)
文本自動補全 164
11.5 雙向RNN 169
11.6 輸入和輸出序列的不同組合 170
第12章 神經(jīng)語言模型和詞嵌入 172
12.1 語言模型介紹及其用例簡介 172
12.2 不同語言模型的例子 174
12.2.1 n-gram模型 174
12.2.2 skip-gram模型 176
12.2.3 神經(jīng)語言模型 176
12.3 詞嵌入的好處及對其工作方式
的探究 178
12.4 基于神經(jīng)語言模型創(chuàng)建詞
嵌入 179
12.5 編程示例:神經(jīng)語言模型和產(chǎn)生的嵌入 182
12.6 King–Man + Woman! = Queen 188
12.7 King–Man+Woman != Queen 190
12.8 語言模型、詞嵌入和人類
偏見 190
12.9 相關話題:文本情感分析 191
12.9.1 詞袋法和N元詞袋法 192
12.9.2 相似性度量 194
12.9.3 組合BoW和深度學習 195
第13章 Word2vec和GloVe的
詞嵌入 197
13.1 使用Word2vec在沒有語言模型的情況下創(chuàng)建詞嵌入 197
13.1.1 與語言模型相比降低計算復雜性 198
13.1.2 連續(xù)詞袋模型 199
13.1.3 連續(xù)skip-gram模型 199
13.1.4 進一步降低計算復雜度的優(yōu)化連續(xù)skip-gram模型 200
13.2 關于Word2vec的其他思考 201
13.3 矩陣形式的Word2vec 202
13.4 Word2vec總結(jié) 203
13.5 編程示例:探索GloVe嵌入的
屬性 204
第14章 序列到序列網(wǎng)絡和自然
語言翻譯 209
14.1 用于序列到序列學習的編-解碼器模型 210
14.2 Keras函數(shù)式API簡介 212
14.3 編程示例:神經(jīng)機器翻譯 214
14.4 實驗結(jié)果 226
14.5 中間表示的性質(zhì) 227
第15章 注意力機制和Transformer
架構(gòu) 229
15.1 注意力機制的基本原理 229
15.2 序列到序列網(wǎng)絡中的注意力
機制 230
15.2.1 計算對齊向量 234
15.2.2 對齊向量上的數(shù)學符號與
變量 235
15.2.3 關注更深層的網(wǎng)絡 236
15.2.4 其他注意事項 237
15.3 循環(huán)網(wǎng)絡的替代方法 238
15.4 自注意力 239
15.5 多頭注意力 240
15.6 Transformer架構(gòu) 241
第16章 用于圖像字幕的一對多
網(wǎng)絡 245
16.1 用注意力擴展圖像字幕網(wǎng)絡 247
16.2 編程示例:基于注意力的圖像
字幕 248
第17章 其他主題 264
17.1 自編碼器 264
17.1.1 自編碼器的使用案例 265
17.1.2 自編碼器的其他方面 266
17.1.3 編程示例:用于異常值
檢測的自編碼器 267
17.2 多模態(tài)學習 272
17.2.1 多模態(tài)學習的分類 272
17.2.2 編程示例:使用多模態(tài)
輸入數(shù)據(jù)進行分類 275
17.3 多任務學習 279
17.3.1 為什么要執(zhí)行多任務
學習 279
17.3.2 如何實現(xiàn)多任務學習 279
17.3.3 其他方向和變體的基本
實現(xiàn) 280
17.3.4 編程示例:多分類和用單一網(wǎng)絡回答問題 281
17.4 網(wǎng)絡調(diào)優(yōu)過程 284
17.5 神經(jīng)網(wǎng)絡架構(gòu)搜索 287
17.5.1 神經(jīng)網(wǎng)絡架構(gòu)搜索的關鍵
組成部分 287
17.5.2 編程示例:搜索一個用于CIFAR-10分類的架構(gòu) 290
17.5.3 神經(jīng)架構(gòu)搜索的內(nèi)在
含義 300
第18章 總結(jié)和未來展望 301
18.1 你現(xiàn)在應該知道的事情 301
18.2 倫理AI和數(shù)據(jù)倫理 302
18.2.1 需要注意的問題 303
18.2.2 問題清單 304
18.3 你還不知道的事情 305
18.3.1 強化學習 305
18.3.2 變分自編碼器和生成
對抗網(wǎng)絡 305
18.3.3 神經(jīng)風格遷移 306
18.3.4 推薦系統(tǒng) 307
18.3.5 語音模型 307
18.4 未來展望 307
附錄A 線性回歸和線性分類 309
A.1 機器學習算法:線性回歸 309
A.1.1 一元線性回歸 309
A.1.2 多元線性回歸 310
A.1.3 用線性函數(shù)建模曲率 311
A.2 計算線性回歸系數(shù) 312
A.3 邏輯回歸分類 313
A.4 用線性分類器對XOR進行
分類 314
A.5 支持向量機分類 317
A.6 二元分類器的評價指標 318
附錄B 目標檢測和分割 321
B.1 目標檢測 321
B.1.1 R-CNN 322
B.1.2 Fast R-CNN 324
B.1.3 Faster R-CNN 325
B.2 語義分割 327
B.2.1 上采樣技術(shù) 328
B.2.2 反卷積網(wǎng)絡 332
B.2.3 U-Net 333
B.3 Mask R-CNN 實例分割 334
附錄C Word2vec和GloVe之外的詞嵌入 337
C.1 Wordpieces 337
C.2 FastText 339
C.3 基于字符的方法 339
C.4 ELMo 343
C.5 相關工作 345
附錄D GPT、BERT和
RoBERTa 346
D.1 GPT 346
D.2 BERT 349
D.2.1 掩碼語言模型任務 349
D.2.2 下一句預測任務 350
D.2.3 BERT的輸入輸出表示 351
D.2.4 BERT在NLP任務中的
應用 352
D.3 RoBERTa 352
D.4 GPT和BERT的前期工作 354
D.5 基于Transformer的其他模型 354
附錄E Newton-Raphson法與梯度
下降法 356
E.1 Newton-Raphson求根法 356
E.2 Newton-Raphson法與梯度下降法
的關系 358
附錄F 數(shù)字分類網(wǎng)絡的矩陣實現(xiàn) 359
F.1 單一矩陣 359
F.2 小批量實現(xiàn) 361
附錄G 卷積層與數(shù)學卷積的關系 365
附錄H 門控循環(huán)單元 369
H.1 GRU的替代實現(xiàn) 371
H.2 基于GRU的網(wǎng)絡 371
附錄I 搭建開發(fā)環(huán)境 374
I.1 Python 374
I.2 編程環(huán)境 375
I.2.1 Jupyter Notebook 375
I.2.2 使用集成開發(fā)環(huán)境 375
I.3 編程示例 376
I.4 數(shù)據(jù)集 376
I.4.1 MNIST數(shù)據(jù)集 377
I.4.2 來自美國人口普查局的
書店銷售數(shù)據(jù) 377
I.4.3 古騰堡工程的FRANKENSTEIN文本 378
I.4.4 GloVe詞嵌入 378
I.4.5 ANKI雙語句子對 378
I.4.6 COCO數(shù)據(jù)集 378
I.5 安裝深度學習框架 378
I.5.1 系統(tǒng)安裝 378
I.5.2 虛擬環(huán)境安裝 379
I.5.3 GPU加速 379
I.5.4 Docker容器 379
I.5.5 使用云服務 380
I.6 TensorFlow具體注意事項 380
I.7 PyTorch與TensorFlow的關鍵
區(qū)別 380
I.7.1 需要編寫我們自己的擬合/
訓練函數(shù) 381
I.7.2 NumPy和PyTorch之間的
數(shù)據(jù)顯式移動 381
I.7.3 CPU和GPU之間的數(shù)據(jù)
顯式傳輸 382
I.7.4 明確區(qū)分訓練和推理 382
I.7.5 順序式API與函數(shù)式
API 382
I.7.6 缺乏編譯功能 383
I.7.7 循環(huán)層和狀態(tài)處理 383
I.7