基礎篇(1-3章):介紹深度學習的基本概念和Tensorflow的基本介紹。原理與實踐篇(4-8章):大量的關于深度學習中BP、CNN以及RNN網絡等概念的數(shù)學知識解析,加以更樸素的語言與類比,使得非數(shù)學專業(yè)的程序員還是能夠比較容易看懂。擴展篇(9-13章):介紹新增的深度學習網絡變種與較新的深度學習特性,并給出有趣的深度學習應用。讀完本書,基本具備了搭建全套Tensorflow應用環(huán)境的能力,掌握深度學習算法和思路,以及進行一般性的文章分類、音頻分類或視頻分類的能力。
技術暢銷書《白話大數(shù)據與機器學習》姊妹篇,YY大數(shù)據專家撰寫,李學凌、朱頻頻、王慶法、王海龍聯(lián)袂推薦。以插圖、類比和大量示例趣說深度學習網絡的關鍵理念、算法與TensoeFlow實踐,涵蓋BP網絡、CNN、RNN、受限玻爾茲曼機、深度殘差網絡、強化學習、對抗學習,以及多個有趣應用。
為什么要寫這本書
近些年來,伴隨著計算機計算能力的不斷升級,很多原來只有在科幻電影里才有的橋段越來越多地出現(xiàn)在我們身邊了,并給了我們更多的想象空間與期待。
在2016年,人工智能界最令人矚目的事情莫過于谷歌的AlphaGo以4:1的懸殊比分輕松擊敗韓國著名九段圍棋大師李世石。之后化名“Master”的AlphaGo更是一路大開殺戒,分別在對弈網站“弈城”和“騰訊圍棋”登錄,先后打敗了柯潔九段、樸廷桓九段、陳耀燁九段以及創(chuàng)造日本大滿貫傳奇的井山裕太和亞洲杯冠軍李欽誠等世界一流高手,取得了50勝0負的戰(zhàn)績。當然了,“玩不起”的人類最終覺得讓AlphaGo在國際圍棋網站排名上占一個坑來碾壓人類是非!安还健钡氖虑椋罱K把人家給拉黑了。
人類這么做是不是有違AI(ArtificialIntelligence,人工智能)研究的初衷暫且不討論,畢竟我們的眼光還是應該更多地投向那些“更有趣”的領域。除此之外,還有很多非常有趣的人工智能項目也經常在網絡視頻中帶給我們驚喜,比如谷歌的機械狗、谷歌的無人駕駛汽車等。
這種機械狗很有趣,除了能夠彼此之間互相協(xié)調進行編隊行進以外,還能像真的狗一樣在被踢了一腳之后迅速調整重心,并在短暫的踉蹌后站穩(wěn),然后繼續(xù)先前作業(yè),不過怎么踢都不會來咬你。
而谷歌的無人駕駛汽車也有著非常優(yōu)異的能力,到2015年11月底為止,根據谷歌提交給機動車輛管理局的報告,谷歌的無人駕駛汽車在自動模式下已經完成了130多萬英里的里程。
可以說,這些事情都在鼓舞著我們這些對未來世界充滿渴望的人投入更多的精力去研究AI帶來的新驚喜,而人工智能這一領域中最為核心的內容之一就是深度學習。深度學習現(xiàn)在在全世界范圍內都有著眾多的專業(yè)工作者和業(yè)余愛好者在進行著研究,并且每個月都有不少新的落地產品問世。應該說,深度學習是目前世界上最熱門的研究領域之一,而且也是未來幾十年最熱門的研究方向之一。
在中國,深度學習也有著眾多的專業(yè)研究機構和業(yè)余愛好者,在我的周圍就有數(shù)以千計的深度學習愛好者——這一點都不夸張,他們非?释私馍疃葘W習的知識并加以應用。但是,深度學習由于其本身的復雜性,使得很多有著濃厚興趣的愛好者望而卻步,我認為主要的門檻來自于兩個方面。
一方面,深度學習是非常典型的計算密集型的應用領域,家用PC機通常是無法有效勝任一個完整而可靠的深度學習應用的(作為初級實驗或者“玩具”的除外)。不過現(xiàn)在隨著CPU的計算速度逐步加快,以及GPU應用的不斷普及,這方面的門檻在慢慢地降低。
另一方面,深度學習從其解決問題的根本理論方面需要比較深厚和扎實的數(shù)學基礎,尤其是高等數(shù)學、線性代數(shù)、泛函分析及其延伸學科的基礎,這就使得很多高等數(shù)學相關基礎不好的朋友學習起來非常吃力。當然,這一方面目前可以走的捷徑也不是沒有,我們可以通過現(xiàn)成的框架(比如TensorFlow、Torch、Caffe或Theano等)來搭建環(huán)境,并用簡單的代碼或模型描述文件來組建一個相對完整的神經網絡進行學習和分類應用。
除此之外,像Caffe還有一個叫做ModelZoo的共享社群——這是一個讓大家把已經訓練好的模型放在上面做共享的社群。在模型訓練中,前面大量耗時的分析和建模工作以及訓練后得到的最寶貴的模型成果就可以濃縮并沉淀為一個可下載的模型描述文件,里面是網絡的節(jié)點權重和拓撲結構信息。這種社群化的方式會讓很多原本沒有太好訓練條件的朋友有了可以學習和借鑒的對象,也有了可以游樂和嘗試的空間。這些模型需要在其各自的授權使用協(xié)議下合理使用,有的是允許進行商業(yè)應用和改動,而有的則不可以,這一點需要注意。在下載后,我們可以對其進行FineTuning,也就是進行細節(jié)調優(yōu)或改進性訓練,使得這些模型可以在自己需要的環(huán)境和條件下更好地工作。不過這個地方還是有一個門檻,對于很多數(shù)學能力欠佳的工程師來說,不容易邁過去,那就是訓練和調優(yōu)中的方向性問題。一旦出現(xiàn)召回率和準確率不再提高,或者性能等問題,往往會找不到改進的方向和方法,這是需要扎實的數(shù)學基礎和深度學習領域的實踐經驗來解決的。
我們這本書的宗旨很簡單,就是希望通過聊天和講故事的方式,憑借高中以上水平的數(shù)學知識把大家一步一步地帶入深度學習的領域。只要大家在閱讀本書的時候保持一點點耐心,即便沒有高等數(shù)學知識的朋友,通過努力也一樣可以基本掌握深度學習的應用技巧。請不要猶豫,跟我來吧!
本書特色
本書本著“平民”起點,從“零”開始的初衷,介紹深度學習的技術與技巧,逐層鋪墊,把微積分、梯度等知識重點化整為零,把學習曲線最大程度地拉平,讓讀者有良好的代入感和親近感。
本書用漫畫插圖來調節(jié)閱讀氣氛,并且在每個講解的部分都有對比和實例說明,相信每位讀者都能感受到非常好的閱讀平滑感。
讀者對象
對深度學習有興趣但數(shù)學基礎弱的開發(fā)人員與架構師
科研院所的研究人員
對深度學習有興趣的大學生、研究生
其他深度學習愛好者,如產品經理、投資人、管理者等
如何閱讀本書
本書基本獨立成冊,適用于零基礎的初學者,但仍建議以本書姊妹篇《白話大數(shù)據與機器學習》為引導讀物。本書共分三篇,共13章。
基礎篇(第1~3章),介紹一些非;A的概念鋪墊,以便了解背景。
原理與實踐篇(第4~8章),介紹老牌的深度學習網絡的數(shù)學原理和工程實現(xiàn)原理。尤其是第4章,如果讀者能基本讀懂,后面的網絡實現(xiàn)層面的問題基本都可以迎刃而解。
擴展篇(第9~13章),介紹一些網絡的變種和一些較新的網絡特性。
其實當你把這本書看完后,就會知道這種技術的底層原理雖然略顯復雜,但是在框架逐步成熟以及開源項目日益增加的情況下,對于應用市場層面的技術人員來說,真正要做的工作已經不是書寫復雜的算法了——這些都已經被很好地封裝到內聚性極高的框架中,而且開放了友好的接口和足夠多的參數(shù)給使用者做調整。這樣一來,最重要的工作反而是海量樣本的低成本獲取和豐富的計算資源的獲取。因此從這個角度來看,我可以負責任地說,深度學習領域的門檻在一定程度上應該說比傳統(tǒng)機器學習的還要低。當讀完這本書時,你就會發(fā)現(xiàn),深度學習真的不難。
勘誤和支持
由于筆者的水平有限,編寫時間倉促,書中難免會出現(xiàn)一些錯誤或者不準確的地方,懇請讀者批評指正。如果你有更多的寶貴意見,歡迎掃描下方的二維碼,關注奇點大數(shù)據微信公眾號qddata和我們進行互動討論。當然,在公眾號的消息中你也可以找到書中的代碼地址和QQ討論群的信息。
同時,你也可以通過郵箱77232517@qq.com聯(lián)系到我,期待能夠得到大家的真摯反饋,在技術之路上互勉共進。
在此,感謝遼寧工程大學副教授(海歸博士后)常戩博士、山東交通學院理學院講師許文杰博士、許昌學院信息工程學院講師姚丹丹博士在審校工作方面的支持與幫助,以及深圳華為技術有限公司的萬娟女士在插畫方面對本書的大力支持。
高揚
高揚,歡聚時代資深大數(shù)據專家,曾任金山軟件西山居大數(shù)據架構師。有多年服務器端開發(fā)經驗(多年日本和澳洲工作經驗),多年大數(shù)據架構設計與數(shù)據分析、處理經驗,目前負責歡聚時代直播部深度學習落地相關的研究。擅長傳統(tǒng)機器學習、深度學習、數(shù)據建模、關系型數(shù)據庫應用以及大數(shù)據框架等的應用。
衛(wèi)崢,歡聚時代YY娛樂事業(yè)部軟件架構師,曾任西山居軟件架構師。多年的軟件開發(fā)和架構經驗,精通C/C++、Python、Golang、JavaScript等多門編程語言,近幾年專注于數(shù)據處理、機器學和深度學習算法的研究、音視頻圖形圖像處理,應用與服務研發(fā)。曾在新浪網平臺架構部負責音視頻轉碼平臺的架構和研發(fā)工作,為新浪微博、新浪微盤、秒拍等提供視頻在線觀看服務。在慕課網、InfoQ、麥思博、51CTO等平臺擔任講師。
萬娟,深圳華為UI設計師,曾任星盤科技有限公司UI設計師平面,對VI設計、包裝、海報設計等、商業(yè)插畫、App交互、網頁設計等有獨到認識。多次參與智能家居和智能音箱等項目的UI設計。多次參加國際和國內藝術和工業(yè)設計比賽,并獲獎。從小酷愛繪畫,理想是開一個屬于自己的畫室。
目 錄?Contents
本書贊譽
序
前 言
基 礎 篇
第1章 機器學習是什么 2
1.1 聚類 4
1.2 回歸 5
1.3 分類 8
1.4 綜合應用 10
1.5 小結 14
第2章 深度學習是什么 15
2.1 神經網絡是什么 15
2.1.1 神經元 16
2.1.2 激勵函數(shù) 19
2.1.3 神經網絡 24
2.2 深度神經網絡 25
2.3 深度學習為什么這么強 28
2.3.1 不用再提取特征 28
2.3.2 處理線性不可分 29
2.4 深度學習應用 30
2.4.1 圍棋機器人——AlphaGo 30
2.4.2 被教壞的少女——Tai.ai 32
2.4.3 本田公司的大寶貝——
ASIMO 33
2.5 小結 37
第3章 TensorFlow框架特性與安裝 38
3.1 簡介 38
3.2 與其他框架的對比 39
3.3 其他特點 40
3.4 如何選擇好的框架 44
3.5 安裝TensorFlow 45
3.6 小結 46
原理與實踐篇
第4章 前饋神經網絡 50
4.1 網絡結構 50
4.2 線性回歸的訓練 51
4.3 神經網絡的訓練 75
4.4 小結 79
第5章 手寫板功能 81
5.1 MNIST介紹 81
5.2 使用TensorFlow完成實驗 86
5.3 神經網絡為什么那么強 92
5.3.1 處理線性不可分 93
5.3.2 挑戰(zhàn)“與或非” 95
5.3.3 豐富的VC——強大的空間
劃分能力 98
5.4 驗證集、測試集與防止過擬合 99
5.5 小結 102
第6章 卷積神經網絡 103
6.1 與全連接網絡的對比 103
6.2 卷積是什么 104
6.3 卷積核 106
6.4 卷積層其他參數(shù) 108
6.5 池化層 109
6.6 典型CNN網絡 110
6.7 圖片識別 114
6.8 輸出層激勵函數(shù)——SOFTMAX 116
6.8.1 SOFTMAX 116
6.8.2 交叉熵 117
6.9 小試牛刀——卷積網絡做圖片分類 124
6.10 小結 138
第7章 綜合問題 139
7.1 并行計算 139
7.2 隨機梯度下降 142
7.3 梯度消失問題 144
7.4 歸一化 147
7.5 參數(shù)初始化問題 149
7.6 正則化 151
7.7 其他超參數(shù) 155
7.8 不唯一的模型 156
7.9 DropOut 157
7.10 小結 158
第8章 循環(huán)神經網絡 159
8.1 隱馬爾可夫模型 159
8.2 RNN和BPTT算法 163
8.2.1 結構 163
8.2.2 訓練過程 163
8.2.3 艱難的誤差傳遞 165
8.3 LSTM算法 167
8.4 應用場景 171
8.5 實踐案例——自動文本生成 174
8.5.1 RNN工程代碼解讀 174
8.5.2 利用RNN學習莎士比亞劇本 183
8.5.3 利用RNN學習維基百科 184
8.6 實踐案例——聊天機器人 185
8.7 小結 196
擴 展 篇
第9章 深度殘差網絡 198
9.1 應用場景 198
9.2 結構解釋與數(shù)學推導 200
9.3 拓撲解釋 205
9.4 Github示例 207
9.5 小結 207
第10章 受限玻爾茲曼機 209
10.1 結構 209
10.2 邏輯回歸 210
10.3 最大似然度 212
10.4 最大似然度示例 214
10.5 損失函數(shù) 215
10.6 應用場景 216
10.7 小結 216
第11章 強化學習 217
11.1 模型核心 218
11.2 馬爾可夫決策過程 219
11.2.1 用游戲開刀 221
11.2.2 準備工作 223
11.2.3 訓練過程 224
11.2.4 問題 226
11.2.5 Q-Learning算法 228
11.3 深度學習中的Q-Learning——DQN 231
11.3.1 OpenAI Gym 234
11.3.2 Atari游戲 237
11.4 小結 238
第12章 對抗學習 239
12.1 目的 239
12.2 訓練模式 240
12.2.1 二元極小極大博弈 240
12.2.2 訓練 242
12.3 CGAN 244
12.4 DCGAN 247
12.5 小結 252
第13章 有趣的深度學習應用 254
13.1 人臉識別 254
13.2 作詩姬 259
13.3 梵高附體 264
13.3.1 網絡結構 265
13.3.2 內容損失 268
13.3.3 風格損失 270
13.3.4 系數(shù)比例 271
13.3.5 代碼分析 272
13.4 小結 279
附錄A VMware Workstation的安裝 280
附錄B Ubuntu虛擬機的安裝 284
附錄C Python語言簡介 290
附錄D 安裝Theano 296
附錄E 安裝Keras 297
附錄F 安裝CUDA 298
參考文獻 303