本書由TensorLayer創始人領銜,TensorLayer主要開發團隊傾力打造而成。內容不僅覆蓋了人工神經網絡的基本知識,如多層感知器、卷積網絡、遞歸網絡及增強學習等,還著重講解了深度學習的一些新的技術,如生成對抗網絡、學習方法和實踐經驗,配有許多應用及產品的實例。讀者可從零開始掌握深度學習技術,以及使用TensorLayer實現的各種應用。本書以通俗易懂的方式講解深度學習技術,同時配有實現方法教學,面向深度學習初學者、進階者,以及希望長期從事深度學習研究和產品開發的深度學習的大學生和工程師。
1.TensorLayer是一個基于TensorFlow的深度學習開發工具。其透明,靈活,高性能的特點,使得它得到了大量初學者乃至資深開發者的青睞。TensorLayer獲得了ACM Multimedia頒發的2017年度*開源軟件獎。
2.本書是在帝國理工學院計算機系終身教授郭毅可的領導下,由TensorLayer創始人領銜,TensorLayer主要開發團隊傾力打造而成,作者全部來自一線人工智能研究員和工程師,為讀者提供了一次非常美妙的AI之旅。
3.本書案例是作者們經過精心挑選后寫作的,其中不乏諸如,價值上億美金的超高分辨率復原、已實際應用在醫學上的圖像語義分割等黃金案例,值得初學者和研究者們學習參考。
4.本書作者額外提供了案例使用的模型,請到http://www.broadview.com.cn/book/5059下載使用。
深度學習已經成為了當今人工智能發展的主要助力,國務院印發的《新一代人工智能發展規劃》中表示,2020年我國人工智能核心產業規模超過1500億元,帶動相關產業規模超過1萬億元;2030年人工智能核心產業規模超過1萬億元,帶動相關產業規模超過10萬億元。
為此產業界急需大量實用性人才,而深度學習是一門理論與工程相結合的科學,本書將以通俗易懂的方式講解深度學習技術,并輔以實踐教學。本書同時面向深度學習初學者、進階者及工程師,內容涵蓋了全連接網絡、自編碼器、卷積神經網絡、遞歸神經網絡、深度增強學習、生成對抗網絡等,并附有多個進階實例教程。與傳統深度學習書籍相比,本書有以下特點。
本書注重實踐,科研人員和工程師都希望有一個深度學習開發工具可以同時滿足學術界和產業界的需求,可讓最新的人工智能算法很快地從實驗室投入到產品中。為此我們開發了深度學習框架 TensorLayer。讀者可以從零基礎開始學習掌握目前最新的深度學習技術。更多關于TensorLayer的設計思路請見第1章。帝國理工數據科學院(Data Science Institute)是TensorLayer的發起單位和主要開發單位,郭毅可教授是該項目領導。
本書對深度學習的最新方法進行了更多的闡述,特別是生成對抗網絡方面,該研究方向已在無監督學習方面取得重大突破,并已經開始在產業界產生非常大的影響。本書還介紹及使用了多種新的反卷積方法,如子像素卷積和縮放卷積。
研究深度學習需要做大量的實驗,本書在講解技術的同時傳授了很多實驗經驗。除神經網絡外,本書還講解了數據預處理、數據后加工、訓練、服務架設等任務,這些都是搭建整個學習系統和產品的基本工作流。
本書編著方式與其他同類書籍不同,是由TensorLayer中文社區眾包完成的,由董豪統稿。本書代碼除第3章和第14章實例五外都由董豪提供,本書第1章由莫元漢、董豪和郭毅可執筆;第2章教學部分由楊光執筆,實現講解部分由董豪執筆;第3章由幺忠瑋執筆;第4章由林一鳴執筆;第5章由王劍虹執筆;第6章由袁航執筆;第7章由于思淼執筆;第8章與第12章實例三由張敬卿執筆;第9章、第10章實例一和第13章實例四由董豪執筆;第11章實例二講解部分由楊光執筆,實現部分由董豪執筆;第14章實例五由陳竑執筆。本書圖片整理由出版社、吳超、趙婧楠和種道涵完成,封面設計由出版社和王盼完成。
雖然本書的作者都是一線科研人員和技術人員,但是不妥和錯誤之處在所難免,真誠地希望有關專家和讀者給予批評指正,以便再版時修改。最后,在計算機技術發展非常快的今天,書籍里的知識更新速度有限,建議讀者多參與社區討論交流。本書代碼例子使用TensorFlow1.2和TensorLayer1.5.3,Python3在Ubuntu下測試。由于TensorFlow和TensorLayer在不斷地更新,若出現兼容性問題,請到各章節給定的網址鏈接中獲取最新的代碼。
本書作者
2017年12月
董豪:目前就讀于帝國理工學院,從事計算機視覺、醫療數據分析和深度學習理論研究,在ICCV、TNSRE、TIFS、ACM MM等頂級會議和期刊發表過論文,Neurocomputing、TIP等會議和期刊的審稿人。有創業經驗,擅長把深度學習算法與實際問題結合,獲得多項國家發明專利和實用新型專利,TensorLayer創始人。
郭毅可:英國帝國理工學院計算系終身教授,帝國理工數據科學研究所(Data Science Institute)所長,上海大學計算機學院院長,中國計算機協會大數據專委會創始會員。郭教授主持多項中國、歐盟和英國大型數據科學項目,累計總金額達1000億人民幣。郭教授的研究重點為機器學習、云計算、大數據和生物信息學。也是大數據會議KDD2018的主席。他是上海,北京,江蘇省政府特聘專家,中國科學院網絡信息中心、中國科學院深圳先進技術研究院客座研究員。郭教授從2015年起,發起和領導了TensorLayer項目作為帝國理工數據科學研究所的重要機器學習工具。
楊光:帝國理工醫學院高級研究員,皇家布朗普頓醫院醫學圖像分析師,倫敦大學圣喬治醫學院榮譽講師,倫敦大學學院(UCL)碩士、博士、IEEE會員、SPIE會員、ISMRM會員、BMVA會員,專注于醫療大數據以及醫學圖像的成像和分析,在各類期刊會議上發表論文近40篇,國際專利兩項,Medical Physics雜志臨時副主編,MIUA會議委員會委員,長期為專業雜志會議義務審稿50余篇。其研究方向獲得英國EPSRC、CRUK、NIHR和British Heart Foundation (BHF)資助。近期致力于Medical AI方向的創新創業。
吳超:帝國理工數字科學研究所研究員,主要從事醫療和城市領域數據分析和建模的研究工作,研究工作獲得EPSRC、Royal Society等多項研
究基金資助。
王劍虹:帝國理工碩士及利物浦大學本科畢業,主要研究語音識別分類問題;目前在UCL攻讀研究型碩士,主要研究增強學習在游戲中的運用。
幺忠瑋:帝國理工碩士,本科畢業于北京郵電大學,主要研究方向為計算機視覺,對生成模型和目標識別領域感興趣。目前致力于將目標檢測算法植入嵌入式系統實現即時檢測。
張敬卿:帝國理工博士在讀,研究型碩士,主要研究興趣包括深度學習、數據挖掘、時間序列與文本挖掘、多模態問題與生成模型。本科畢業于清華大學計算機科學與技術系,曾獲得中國國家獎學金。
陳竑:北京大學光華管理學院在讀,哈爾濱工業大學電子與信息工程學院畢業,深度學習愛好者。
林一鳴:帝國理工博士在讀,主要研究深度學習在人臉分析方向的應用。
于思淼:帝國理工博士在讀,浙江大學本科畢業,主要研究方向為深度學習、生成模型及其在計算機視覺方面的應用。
莫元漢:帝國理工博士在讀,北京航空航天大學本科畢業,主要研究方向為深度學習、動力學及其在醫療圖像分析方面的應用。
袁航:瑞士洛桑聯邦理工(EPFL)碩士在讀,本科就讀于德國雅各布大學(Jacobs)計算機系,及在美國卡內基梅隆大學(CMU)計算機科學學院交換學習,主要從事計算神經科學與電腦人機接口研究。之前分別在帝國理工及馬克斯普朗克智能系統研究院(Max Planck Institute for Intelligent Systems)進行研習,現在主要在EPFL G-lab研究脊髓修復對運動功能康復及血壓控制等課題。
1 深度學習簡介1
1.1 人工智能、機器學習和深度學習. . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1 引言. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.2 人工智能、機器學習和深度學習三者的關系. . . . . . . . . . . . 2
1.2 神經網絡. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.1 感知器. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.2 激活函數. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2.3 損失函數. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.4 梯度下降和隨機梯度下降. . . . . . . . . . . . . . . . . . . . . . 8
1.2.5 反向傳播算法簡述. . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.6 其他神經網絡. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.3 學習方法建議. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.3.1 網絡資源. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.3.2 TensorFlow 官方深度學習教程. . . . . . . . . . . . . . . . . . . . 14
1.3.3 開源社區. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.4 TensorLayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.4.1 深度學習框架概況. . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.4.2 TensorLayer 概括. . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.4.3 實驗環境配置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2 多層感知器19
2.1 McCulloch-Pitts 神經元模型. . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.1.1 人工神經網絡到底能干什么?到底在干什么. . . . . . . . . . . . 21
2.1.2 什么是激活函數?什么是偏值. . . . . . . . . . . . . . . . . . . . 22
2.2 感知器. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.2.1 什么是線性分類器. . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.2.2 線性分類器有什么優缺點. . . . . . . . . . . . . . . . . . . . . . 26
2.2.3 感知器實例和異或問題(XOR 問題) . . . . . . . . . . . . . . . 26
2.3 多層感知器. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.4 實現手寫數字分類. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.5 過擬合. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.5.1 什么是過擬合. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.5.2 Dropout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.5.3 批規范化. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.5.4 L1、L2 和其他正則化方法. . . . . . . . . . . . . . . . . . . . . . 42
2.5.5 Lp 正則化的圖形化解釋. . . . . . . . . . . . . . . . . . . . . . . 44
2.6 再實現手寫數字分類. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
2.6.1 數據迭代器. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
2.6.2 通過all_drop 啟動與關閉Dropout . . . . . . . . . . . . . . . . 47
2.6.3 通過參數共享實現訓練測試切換. . . . . . . . . . . . . . . . . . 50
3 自編碼器54
3.1 稀疏性. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.2 稀疏自編碼器. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.3 實現手寫數字特征提取. . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.4 降噪自編碼器. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.5 再實現手寫數字特征提取. . . . . . . . . . . . . . . . . . . . . . . . . . . 68
3.6 堆棧式自編碼器及其實現. . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4 卷積神經網絡80
4.1 卷積原理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
4.1.1 卷積操作. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
4.1.2 張量. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
4.1.3 卷積層. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
4.1.4 池化層. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
4.1.5 全連接層. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
4.2 經典任務. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
4.2.1 圖像分類. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
4.2.2 目標檢測. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
4.2.3 語義分割. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
4.2.4 實例分割. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
4.3 經典卷積網絡. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
4.3.1 LeNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
4.3.2 AlexNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
4.3.3 VGGNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
4.3.4 GoogLeNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
4.3.5 ResNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
4.4 實現手寫數字分類. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
4.5 數據增強與規范化. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
4.5.1 數據增強. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
4.5.2 批規范化. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
4.5.3 局部響應歸一化. . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
4.6 實現CIFAR10 分類. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
4.6.1 方法1:tl.prepro 做數據增強. . . . . . . . . . . . . . . . . . . . . 108
4.6.2 方法2:TFRecord 做數據增強. . . . . . . . . . . . . . . . . . . . 114
4.7 反卷積神經網絡. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
5 詞的向量表達121
5.1 目的與原理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
5.2 Word2Vec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
5.2.1 簡介. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
5.2.2 Continuous Bag-Of-Words(CBOW)模型. . . . . . . . . . . . . 124
5.2.3 Skip Gram(SG)模型. . . . . . . . . . . . . . . . . . . . . . . . 129
5.2.4 Hierarchical Softmax . . . . . . . . . . . . . . . . . . . . . . . . . . 132
5.2.5 Negative Sampling . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
5.3 實現Word2Vec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
5.3.1 簡介. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
5.3.2 實現. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
5.4 重載預訓練矩陣. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
6 遞歸神經網絡148
6.1 為什么需要它. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
6.2 不同的RNNs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
6.2.1 簡單遞歸網絡. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
6.2.2 回音網絡. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
6.3 長短期記憶. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
6.3.1 LSTM 概括. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
6.3.2 LSTM 詳解. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
6.3.3 LSTM 變種. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
6.4 實現生成句子. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
6.4.1 模型簡介. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
6.4.2 數據迭代. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
6.4.3 損失函數和更新公式. . . . . . . . . . . . . . . . . . . . . . . . . 164
6.4.4 生成句子及Top K 采樣. . . . . . . . . . . . . . . . . . . . . . . . 167
6.4.5 接下來還可以做什么. . . . . . . . . . .