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