這是一本能指導讀者快速掌握PyTorch和深度學習的著作,從PyTorch的原理到應用,從深度學習到強化學習,本書提供了全棧解決方案。
第1版上市后銷量和口碑俱佳,是深度學習領域的暢銷書,被譽為PyTorch領域的標準著作。第2版在第1版的基礎上,去蕪存菁,與時具進,根據PyTorch新版本全面升級,技術性、實戰(zhàn)性、針對性、豐富性、易讀性均得到了進一步提升,必定能幫助讀者更輕松、更高效地進入深度學習的世界。
全書一共19章,在結構上分為三大部分:
第1部分(第1~4章) PyTorch基礎
首先有針對性地講解了Python和PyTorch的基石NumPy中的關鍵知識,然后詳細講解了PyTorch的基礎知識、神經網絡工具箱和數據處理工具箱等內容,幫助讀者快速了解和掌握PyTorch。
第二部分(第5~10章) 深度學習基礎
依次講解了機器學習、視覺處理、自然語言處理、注意力機制、目標檢測、語義分割、生成式深度學習等機器學習和深度學習的核心技術的原理和使用。
第三部分(第11~17章) 深度學習實踐
通過實戰(zhàn)案例的方式,詳細講解了PyTorch在人臉檢測和識別、遷移學習、中英文互譯、圖像分類、語義分割、生成式網絡、對抗攻擊等領域的應用和解決方案。
第四部分(第18-19章) 強化學習
重點介紹了強化學習和深度強化學習的基礎理論、常用算法及相關實例。
更為重要的是,為了讓本書通俗易懂,在內容安排和寫作方式上也頗花了一番心思。內容選擇上,廣泛涉獵、重點突出、注重實戰(zhàn);內容安排上,實例切入、由淺入深、循序漸進;表達形式上,深度抽象、化繁為簡、用圖說話。
(1)作者經驗豐富:核心作者在大數據和人工智能領域有著超過20年的工作經驗,實戰(zhàn)經驗非常豐富,其他幾位作者也在大數據和人工智能領域頗有造詣。(2)暢銷書全面升級:第1版銷量和口碑俱佳,是深度學習領域的暢銷書,第2版根據PyTorch新版本升級,技術性、實戰(zhàn)性、針對性、易讀性進一步提升。(3)PyTorch領域事實標準:因為內容扎實、可讀性強,第1版被讀者譽為PyTorch領域的標準著作,是讀者的首選。(4)深度學習雙子星:本書是《Python深度學習:基于TensorFlow(第2版)》的姊妹篇,這兩本書均是深度學習領域的暢銷書。(5)精心謀劃、通俗易懂:本書在內容的選擇、安排和表現形式上精心謀劃,目的是確保高質量內容的同時,讓深度學習的學習門檻大大降低。
前 言
第2版說明
自本書第1版第1次于2019年10月印刷至今,已累計印刷了9次。在這3年的時間里,深度學習的發(fā)展可謂日新月異,其應用范圍得到進一步拓展,同時出現了很多新的框架、新的方向。
在眾多創(chuàng)新中,注意力機制是一個典型代表。注意力機制,尤其是以Transformer為基礎的一些模型,在自然語言處理(NLP)領域取得了目前最好的效果(如SOTA),近幾年研究人員把這種模型(如ViT模型、Swin-T模型等)應用到計算機視覺領域,也取得了巨大成功。
為此,本書第2版增強了注意力機制的相關內容,把注意力機制單獨列為一章(即第8章),同時增加了注意力機制的應用實例,詳細內容請參考第14章。
人工智能廣泛應用于圖像、視頻、語音等諸多領域,比如人工智能在目標檢測、語義分割等任務中的應用日益受到大家的關注,所以在第2版中我們增加了這方面的內容,具體可參考第9章和第15章。
除了這些新增內容外,第2版對很多原有內容進行了補充和完善,如PyTorch基礎、優(yōu)化算法、視覺處理基礎、自然語言處理基礎等內容。
讀者對象
對機器學習、深度學習感興趣的高校學生及工程師。
對Python、PyTorch、TensorFlow等感興趣并希望進一步提升水平的高校學生及工程師。
如何閱讀本書
本書分為三部分,共19章。
第一部分(第1~4章)為PyTorch基礎,這是本書的基礎部分,能為后續(xù)學習打好堅實基礎。第1章介紹Python和PyTorch的基石NumPy;第2章介紹PyTorch基礎知識;第3章和第4章分別介紹PyTorch神經網絡工具箱和數據處理工具箱等內容。
第二部分(第5~10章)為深度學習基礎,這也是本書的核心部分。第5章為機器學習基礎,也是深度學習基礎,其中包含很多機器學習經典理論、算法和方法等內容;第6章為視覺處理基礎,介紹卷積神經網絡的相關概念、原理及架構等內容,并用PyTorch實現多個視覺處理實例;第7章介紹自然語言處理基礎,重點介紹循環(huán)神經網絡的原理和架構,同時介紹了詞嵌入等內容,然后用PyTorch實現多個自然語言處理、時間序列方面的實例;第8章介紹注意力機制;第9章介紹目標檢測與語義分割;第10章介紹生成式深度學習的相關內容,具體包括編碼器-解碼器模型、帶注意力的編碼器-解碼器模型、生成式對抗網絡及多種衍生生成器,同時使用PyTorch實現多個生成式對抗網絡實例。
第三部分(第11~19章)為深度學習實戰(zhàn),即前面兩部分知識的具體應用。這部分在介紹相關原理、架構的基礎上,使用PyTorch實現多個深度學習的典型應用實例,最后介紹了強化學習、深度強化學習等內容。第11章用PyTorch實現人臉檢測與識別;第12章用PyTorch實現遷移學習;第13章用PyTorch實現中英文互譯;第14章使用ViT進行圖像分類;第15章為語義分割實例;第16章介紹多個生成模型實例;第17章介紹對抗攻擊原理及用PyTorch實現對抗攻擊實例;第18章和第19章介紹了強化學習、深度強化學習基礎知識及多個強化學習實例。
勘誤和支持
在本書編寫過程中得到了張魁、劉未昕等人的大力支持,他們負責整個環(huán)境的搭建和維護工作。由于筆者水平有限,書中難免存在錯誤或不準確的地方,懇請讀者批評指正。你可以通過訪問httpgithub.comWumg 3000feiguyunai下載代碼和數據,也可以通過QQ交流群(493272175)進行反饋,非常感謝你的支持和幫助。
致謝
在本書編寫過程中,得到了很多同事、朋友、老師和同學的大力支持!感謝博世的王冬、王紅星;感謝上海交大慧谷的程國旗老師,上海大學的白延琴老師、李常品老師,上海師范大學的田紅炯老師、李昭祥老師,以及贛南師范大學的許景飛老師等。
感謝機械工業(yè)出版社的編輯給予本書的大力支持和幫助。
最后,感謝我的愛人趙成娟,她在繁忙的教學之余幫助審稿,提出許多改進意見或建議。
吳茂貴
PREFACE
第1版前言
為什么寫這本書
在人工智能時代,如何盡快掌握人工智能的核心深度學習呢?相信這是每個欲進入此領域的人面臨的主要問題。目前,深度學習框架很多,如TensorFlow、PyTorch、Keras、FastAI、CNTK等,這些框架各有優(yōu)點或不足,如何選擇呢?是否有一些標準?有,我覺得適合自己的就是最好的。
如果你是一位初學者,建議你選擇PyTorch,待有了一定的基礎之后,可以學習其他框架,如TensorFlow、CNTK等。建議初學者選擇PyTorch的主要依據如下。
1)PyTorch是動態(tài)計算圖,更貼近Python的用法,并且PyTorch與Python共用了許多NumPy命令,降低了學習門檻,比TensorFlow更容易上手。
2)PyTorch需要定義網絡層、參數更新等關鍵步驟,這非常有助于理解深度學習的核心;而Keras雖然也非常簡單,容易上手,但封裝粒度很粗,隱藏了很多關鍵步驟。
3)PyTorch的動態(tài)圖機制在調試方面非常方便,如果計算圖運行出錯,馬上可以跟蹤問題。PyTorch與Python一樣,通過斷點檢查就可以高效解決問題。
4)PyTorch的流行度僅次于 TensorFlow。而最近一年,在GitHub關注度和貢獻者的增長方面,PyTorch與TensorFlow 基本持平。PyTorch 的搜索熱度持續(xù)上漲,再加上FastAI的支持,PyTorch 將受到越來越多的機器學習從業(yè)者的青睞。
深度學習是人工智能的核心,隨著大量相關項目的落地,人們對深度學習的興趣也持續(xù)上升。不過掌握深度學習知識并不是一件輕松的事情,尤其是對機器學習或深度學習的初學者來說挑戰(zhàn)更大。為了能讓廣大人工智能初學者或愛好者在較短時間內掌握深度學習基礎及利用PyTorch解決深度學習問題,我們花了近一年時間打磨這本書,在內容選擇、安排和組織等方面采用了如下方法。
1.內容選擇:廣泛涉獵 精講 注重實戰(zhàn)
深度學習涉及面比較廣,且有一定門檻,沒有一定廣度很難達到一定深度,所以本書基本包括了機器學習、深度學習的主要內容,各章一般先簡單介紹相應的組件(工具)或原理,這些內容有助于讀者理解深度學習的本質。當然,如果只有概念、框架、原理、數學公式的介紹,可能顯得有點抽象或乏味,所以,每章都配有大量實踐案例,以便加深讀者對原理和公式的理解,同時有利于把相關內容融會貫通起來。
2.內容安排:簡單實例開始 循序漸進講解
深度學習是一塊難啃的硬骨頭,對有一定開發(fā)經驗和數學基礎的讀者如此,對初學者更是如此。其中卷積神經網絡、循環(huán)神經網絡、生成式對抗網絡是深度學習的基石,同時也是深度學習的三大硬骨頭。為了讓讀者更好地理解并掌握這些網絡,我們采用循序漸進的方式,先從簡單特例開始,然后逐步進入更一般性的內容介紹,最后通過一些PyTorch代碼實例將其實現,整本書的結構及各章節(jié)內容安排都遵循這個原則。此外,一些優(yōu)化方法也采用這種內容安排方式,如對數據集CIFAR10進行分類優(yōu)化時,先用一般卷積神經網絡,然后使用集成方法、現代經典網絡,最后采用數據增強和遷移方法,不斷提升模型精度,由最初的68%逐步提升到74%和90%,最后達到95%左右。
3.表達形式:讓圖說話,一張好圖勝過千言萬語
機器學習、深度學習中有很多抽象的概念、復雜的算法、深奧的理論等,如NumPy的廣播機制、梯度下降對學習率敏感、神經網絡中的共享參數、動量優(yōu)化法、梯度消失或爆炸等,這些概念如果只用文字來描述,可能很難達到茅塞頓開的效果。但如果用一些圖形來展現,再加上適當的文字說明,往往能取得非常好的效果,正所謂一張好圖勝過千言萬語。
除了以上談到的3個方面,為了幫助大家更好地理解并且更快地掌握機器學習、深度學習這些人工智能的核心內容,本書還介紹了其他方法,用心的讀者將能體會到。我們希望通過這些方法帶給你不一樣的理解和體驗,使你感到抽象的數學不抽象、復雜的算法不復雜、難學的深度學習不難學。
至于人工智能(AI)的重要性,我想就不用多說了。如果說2016年前屬于擺事實論證的階段,2017年和2018年屬于事實勝于雄辯的階段,那么2019年及以后就進入百舸爭流、奮楫者先的階段。目前各行各業(yè)都忙于AI ,大家都希望通過AI來改造傳統流程、傳統結構、傳統業(yè)務、傳統架構,其效果猶如用電改造原有的各行各業(yè)一樣。
本書特色
本書特色概括來說就是:把理論原理與代碼實現相結合;找準切入點,從簡單到一般,把復雜問題簡單化;圖文并茂使抽象問題直觀化;實例說明使抽象問題具體化。希望本書能帶給你新的視角、新的理解,甚至更好的未來。
讀者對象
對機器學習、深度學習感興趣的高校學生及工程師。
對Python、PyTorch、TensorFlow等感興趣并希望進一步提升水平的高校學生及工程師。
如何閱讀本書
本書分為三部分,共16章。
第一部分(第1~4章)為PyTorch基礎,這是本書的基礎,能為后續(xù)章節(jié)的學習打下堅實基礎。第1章介紹Python和PyTorch的基石NumPy;第2章介紹PyTorch基礎知識;第3章和第4章分別介紹PyTorch神經網絡工具箱和數據處理工具箱等內容。
第二部分(第5~8章)為深度學習基本原理,也是本書的核心部分,包括機器學習流程、常用算法和技巧等內容。第5章為機器學習基礎,也是深度學習基礎,其中包含很多機器學習經典理論、算法和方法等內容;第6章為視覺處理基礎,介紹卷積神經網絡的相關概念、原理及架構等內容,并用PyTorch實現多個視覺處理實例;第7章介紹自然語言處理基礎,重點介紹循環(huán)神經網絡的原理和架構,同時介紹了詞嵌入等內容,然后用PyTorch實現多個自然語言處理、時間序列方面的實例;第8章介紹生成式深度學習的相關內容,具體包括編碼器解碼器模型、帶注意力的編碼器解碼器模型、生成式對抗網絡及多種衍生網絡,同時用PyTorch實現多個生成式對抗網絡實例。
第三部分(第9~16章)為實戰(zhàn)部分,即前面兩部分知識的具體應用,這部分在介紹相關原理、架構的基礎上,用PyTorch具體實現多個深度學習的典型實例,最后介紹了強化學習、深度強化學習等內容。第9章用PyTorch實現人臉檢測與識別;第10章用PyTorch實現遷移學習;第11章用PyTorch實現中英文互譯;第12章實現多個生成式網絡實例;第13章主要介紹如何進行模型遷移;第14章介紹對抗攻擊原理及用PyTorch實現對抗攻擊實例;第15章和第16章介紹了強化學習、深度強化學習基礎及多個強化學習實例
吳茂貴
資深大數據和人工智能技術專家,在BI、數據挖掘與分析、數據倉庫、機器學習等領域工作超過20年。在基于Spark、TensorFlow、PyTorch等的機器學習和深度學習方面有大量的工程實踐實踐。著有《Python深度學習:基于TensorFlow》、《深度實踐Spark機器學習》、《自己動手做大數據系統》、《深入淺出Embedding原理解析與應用實踐》等暢銷書。
郁明敏
資深商業(yè)分析師,從事互聯網金融算法研究工作,專注于大數據、機器學習以及數據可視化的相關領域,擅長 Python、Hadoop、Spark 等技術,擁有豐富的實戰(zhàn)經驗。曾獲江蘇省TI杯大學生電子競技大賽二等獎和華為杯全國大學生數學建模大賽二等獎。
楊本法
高級算法工程師,工業(yè)表面缺陷檢測設備開發(fā)架構師,在機器學習、文本挖掘、可視化等領域有多年實踐經驗。做過大型電商的推薦系統,知名手機廠商外殼表面檢測設備。熟悉Hadoop、Spark生態(tài)圈的相關技術,對Python有豐富的實戰(zhàn)經驗。
李濤
資深AI技術工程師,任職于攜程(上海)科技有限公司,負責酒店排序推薦相關項目的數據分析和算法開發(fā),在計算機視覺技術和搜索推薦系統有深刻的理解和豐富的實踐經驗。
張粵磊
國云大數據學院院長,飛谷云創(chuàng)始人,畢業(yè)于中國科技大學,原平安壹錢包大數據架構師。業(yè)內知名大數據專家,多部大數據暢銷書作者。2016年以來每年都以高級專家和咨詢顧問身份深入參與大數據、人工智能技術在行業(yè)的落地應用。
前言
第1版前言
第一部分 PyTorch基礎
第1章 NumPy基礎知識2
1.1 生成NumPy數組3
1.1.1 數組屬性4
1.1.2 利用已有數據生成數組4
1.1.3 利用 random 模塊生成數組5
1.1.4 生成特定形狀的多維數組7
1.1.5 利用arange、linspace
函數生成數組8
1.2 讀取數據9
1.3 NumPy的算術運算11
1.3.1 逐元素操作11
1.3.2 點積運算12
1.4 數組變形13
1.4.1 修改數組的形狀13
1.4.2 合并數組16
1.5 批處理19
1.6 節(jié)省內存20
1.7 通用函數21
1.8 廣播機制23
1.9 小結24
第2章 PyTorch基礎知識25
2.1 為何選擇PyTorch25
2.2 PyTorch的安裝配置26
2.2.1 安裝CPU版PyTorch26
2.2.2 安裝GPU版PyTorch28
2.3 Jupyter Notebook環(huán)境配置30
2.4 NumPy與Tensor31
2.4.1 Tensor概述31
2.4.2 創(chuàng)建Tensor32
2.4.3 修改Tensor形狀34
2.4.4 索引操作35
2.4.5 廣播機制35
2.4.6 逐元素操作36
2.4.7 歸并操作37
2.4.8 比較操作37
2.4.9 矩陣操作38
2.4.10 PyTorch與NumPy比較39
2.5 Tensor與autograd39
2.5.1 自動求導要點40
2.5.2 計算圖40
2.5.3 標量反向傳播41
2.5.4 非標量反向傳播42
2.5.5 切斷一些分支的反向傳播45
2.6 使用NumPy實現機器學習任務47
2.7 使用Tensor及autograd實現機器
學習任務49
2.8 使用優(yōu)化器及自動微分實現機器
學習任務51
2.9 把數據集轉換為帶批量處理功能的
迭代器52
2.10 使用TensorFlow 2實現機器
學習任務54
2.11 小結55
第3章 PyTorch神經網絡工具箱56
3.1 神經網絡核心組件56
3.2 構建神經網絡的主要工具57
3.2.1 nn.Module57
3.2.2 nn.functional58
3.3 構建模型59
3.3.1 繼承nn.Module基類構建模型59
3.3.2 使用nn.Sequential按層
順序構建模型60
3.3.3 繼承nn.Module基類并應用
模型容器來構建模型63
3.3.4 自定義網絡模塊66
3.4 訓練模型68
3.5 實現神經網絡實例69
3.5.1 背景說明69
3.5.2 準備數據70
3.5.3 可視化源數據71
3.5.4 構建模型72
3.5.5 訓練模型72
3.6 小結74
第4章 PyTorch數據處理工具箱75
4.1 數據處理工具箱概述75
4.2 utils.data76
4.3 torchvision78
4.3.1 transforms78
4.3.2 ImageFolder79
4.4 可視化工具81
4.4.1 TensorBoard簡介81
4.4.2 用TensorBoard可視化
神經網絡82
4.4.3 用TensorBoard可視化損失值83
4.4.4 用TensorBoard可視化特征圖84
4.5 小結85
第二部分 深度學習基礎
第5 章 機器學習基礎88
5.1 機器學習的基本任務88
5.1.1 監(jiān)督學習89
5.1.2 無監(jiān)督學習89
5.1.3 半監(jiān)督學習90
5.1.4 強化學習90
5.2 機器學習的一般流程90
5.2.1 明確目標91
5.2.2 收集數據91
5.2.3 數據探索與預處理91
5.2.4 選擇模型及損失函數91
5.2.5 評估及優(yōu)化模型92
5.3 過擬合與欠擬合93
5.3.1 權重正則化93
5.3.2 dropout正則化94
5.3.3 批量歸一化97
5.3.4 層歸一化99
5.3.5 權重初始化99
5.4 選擇合適的激活函數100
5.5 選擇合適的損失函數101
5.6 選擇合適的優(yōu)化器103
5.6.1 傳統梯度優(yōu)化算法104
5.6.2 批量隨機梯度下降法105
5.6.3 動量算法106
5.6.4 Nesterov動量算法108
5.6.5 AdaGrad算法109
5.6.6 RMSProp算法111
5.6.7 Adam算法112
5.6.8 Yogi算法113
5.6.9 使用優(yōu)化算法實例114
5.7 GPU加速116
5.7.1 單GPU加速116
5.7.2 多GPU加速117
5.7.3 使用GPU時的注意事項120
5.8 小結121
第6章 視覺處理基礎122
6.1 從全連接層到卷積層122
6.1.1 圖像的兩個特性123
6.1.2 卷積神經網絡概述124
6.2 卷積層125
6.2.1 卷積核127
6.2.2 步幅129
6.2.3 填充130
6.2.4 多通道上的卷積131
6.2.5 激活函數134
6.2.6 卷積函數135
6.2.7 轉置卷積136
6.2.8 特征圖與感受野137
6.2.9 全卷積網絡138
6.3 池化層139
6.3.1 局部池化140
6.3.2 全局池化140
6.4 現代經典網絡142
6.4.1 LeNet-5模型142
6.4.2 AlexNet模型143
6.4.3 VGG模型143
6.4.4 GoogLeNet模型144
6.4.5 ResNet模型145
6.4.6 DenseNet模型146
6.4.7 CapsNet模型148
6.5 使用卷積神經網絡實現CIFAR10
多分類149