序
從理論到工程
技術(shù)發(fā)展的過程就是人類在探索自身創(chuàng)造能力邊界的過程,而人工智能無疑是最重要以及影響最深遠(yuǎn)的領(lǐng)域之一。
AlphaGo及其馬甲Master在圍棋領(lǐng)域大勝人類頂尖高手之后,在智力分析領(lǐng)域人類優(yōu)勢(shì)開始出現(xiàn)裂痕。而在“聽說讀寫”方面,不管是語音識(shí)別、語音合成、機(jī)器翻譯,還是圖像識(shí)別、物體識(shí)別,甚至是自動(dòng)文章生成、自動(dòng)曲譜生成、藝術(shù)圖像合成方面,機(jī)器已經(jīng)開始做得比人類更為強(qiáng)大。深度學(xué)習(xí)在工程領(lǐng)域的突破,使得“機(jī)器學(xué)習(xí)”走出了實(shí)驗(yàn)室,進(jìn)入到工程領(lǐng)域,人類開始重新審視機(jī)器能帶來的更多可能性。
正如2007年以iPhone為代表的智能手機(jī)出現(xiàn),10年之間已經(jīng)顛覆了諸多商業(yè)領(lǐng)域、影響了人類的生活方式一樣,深度學(xué)習(xí)也必將如此,作為一名技術(shù)人,必須理解和跟上行業(yè)和時(shí)代的變革!
在過去的計(jì)算機(jī)技術(shù)演變過程中,數(shù)據(jù)主線(展示、邏輯、存儲(chǔ))、架構(gòu)主線(C/S,B/S,SASS)、語言框架平臺(tái)主線(語法、庫(kù)、框架、操作系統(tǒng)、平臺(tái))的變遷基本有跡可循,易于舉一反三,遷移學(xué)習(xí)曲線相對(duì)平緩。而機(jī)器學(xué)習(xí)的學(xué)習(xí)曲線相當(dāng)陡峭,需要同時(shí)專注于數(shù)據(jù)處理、模型構(gòu)建以及結(jié)果優(yōu)化,顛覆了我們以往對(duì)數(shù)據(jù)處理的理解。作為工程業(yè)界人士來說,沒有機(jī)器學(xué)習(xí)理論基礎(chǔ)的支持,幾乎無法應(yīng)用相關(guān)的工具;而沒有工程實(shí)踐的嘗試,又很難體系化理解理論基礎(chǔ)——入門著實(shí)不易。
本書的作者為具有多年研究經(jīng)驗(yàn)的博士和多年業(yè)界工程研發(fā)經(jīng)驗(yàn)的團(tuán)隊(duì),他們?cè)诠こ填I(lǐng)域的經(jīng)驗(yàn)?zāi)芸焖俚貛椭x者理解TensorFlow的基礎(chǔ)概念,并以最快速度搭建環(huán)境和跑通Demo。更為重要的是,他們從學(xué)術(shù)+工程領(lǐng)域的角度,高屋建瓴地拎出了CNN(卷積神經(jīng)網(wǎng)絡(luò))、RNN(循環(huán)神經(jīng)網(wǎng)絡(luò))、CNN+LSTM(Long Short Term網(wǎng)絡(luò))的基本原理,并且結(jié)合CNN在圖像領(lǐng)域處理、RNN在語義領(lǐng)域處理以及結(jié)合CNN+LSTM在圖像檢測(cè)和圖像摘要生成等基本工程領(lǐng)域的處理,快速地讓讀者理解深度學(xué)習(xí)能干什么,如何利用TensorFlow快速解決這些領(lǐng)域的問題,讓自己的應(yīng)用插上“人工智能”的翅膀!
人工智能的時(shí)代已經(jīng)開啟,唯有快速擁抱變化才能應(yīng)對(duì)變化,希望讀者能借這本書建立對(duì)機(jī)器學(xué)習(xí)的宏觀認(rèn)識(shí)并對(duì)之深入理解,跑步進(jìn)入機(jī)器學(xué)習(xí)領(lǐng)域!
劉鐵鋒
《編程之美》作者
海豚瀏覽器創(chuàng)始人
前言
創(chuàng)造出具有智能的機(jī)器一直是人們夢(mèng)寐以求的理想。自20世紀(jì)50年代圖靈測(cè)試被提出以來,人工智能就成為了計(jì)算機(jī)科學(xué)領(lǐng)域中一個(gè)極具吸引力的研究方向。近年來,深度學(xué)習(xí)是機(jī)器學(xué)習(xí)領(lǐng)域中一個(gè)非常具有突破性的研究方向,從AlphaGo戰(zhàn)勝李世石,到Prisma運(yùn)用深度學(xué)習(xí)技術(shù)制作濾鏡刷爆全世界的社交網(wǎng)絡(luò),深度學(xué)習(xí)在圖像處理、自然語言處理甚至博弈決策等問題上不斷取得震驚世人的成績(jī)。
隨著科研理論上的不斷突破,機(jī)器學(xué)習(xí)基礎(chǔ)架構(gòu)方面也有了長(zhǎng)足進(jìn)步。為了提高科研和應(yīng)用的開發(fā)效率,面向深度學(xué)習(xí)的開發(fā)框架不斷涌現(xiàn),而TensorFlow就是其中的佼佼者。依托于Google強(qiáng)大的影響力,TensorFlow一經(jīng)發(fā)布就吸引了整個(gè)行業(yè)的關(guān)注。TensorFlow自2015年年底在GitHub開源以來,一直是機(jī)器學(xué)習(xí)、深度學(xué)習(xí)類別中關(guān)注度最高的項(xiàng)目,截至2016年年底,已經(jīng)獲得超過40000個(gè)Star。同時(shí),在開源社區(qū)共同的努力下,基于TensorFlow開發(fā)的各種算法和應(yīng)用都在飛速增加。
本書結(jié)合基于TensorFlow實(shí)踐的應(yīng)用代碼,介紹了深度學(xué)習(xí)的基礎(chǔ)概念和知識(shí),但需要讀者預(yù)先掌握一些傳統(tǒng)機(jī)器學(xué)習(xí)、神經(jīng)網(wǎng)絡(luò)相關(guān)方面的知識(shí)。同時(shí),本書代碼主要基于目前最新的TensorFlow 1.0版本,大部分為Python代碼,需要讀者有一定的Python語言基礎(chǔ)。希望通過本書的介紹,讀者可以由淺入深、由理論到實(shí)踐全面掌握深度學(xué)習(xí)的基礎(chǔ)知識(shí)和實(shí)踐方法。
本書第1章介紹了深度學(xué)習(xí)的由來以及發(fā)展趨勢(shì),簡(jiǎn)要說明了人工智能、機(jī)器學(xué)習(xí)、深度學(xué)習(xí)等名詞概念之間的聯(lián)系。第2章主要介紹了TensorFlow系統(tǒng)的基礎(chǔ)知識(shí)和一些重要概念。第3章通過對(duì)Kaggle競(jìng)賽平臺(tái)上的Titanic問題的求解實(shí)例,介紹了TensorFlow系統(tǒng)的基本用法,并簡(jiǎn)要介紹了機(jī)器學(xué)習(xí)問題中的一些常用的處理技巧。第4章和第5章分別介紹了主要應(yīng)用于圖像處理領(lǐng)域的卷積神經(jīng)網(wǎng)絡(luò)CNN和主要應(yīng)用于自然語言處理領(lǐng)域的循環(huán)神經(jīng)網(wǎng)絡(luò)RNN。其中第4章介紹了CNN的基本原理和多個(gè)經(jīng)典網(wǎng)絡(luò)結(jié)構(gòu),并通過圖像風(fēng)格化的實(shí)例展示了CNN在更多場(chǎng)景下應(yīng)用的可能性。第5章介紹了RNN、LSTM以及它們的多種變種結(jié)構(gòu),并通過實(shí)例介紹了如何構(gòu)建實(shí)用的語言模型和對(duì)話機(jī)器人。第6章介紹了卷積神經(jīng)網(wǎng)絡(luò)與循環(huán)神經(jīng)網(wǎng)絡(luò)的結(jié)合,通過圖像檢測(cè)和圖像摘要兩個(gè)問題介紹了CNN+LSTM相結(jié)合的威力。最后的第7章介紹了機(jī)器學(xué)習(xí)中非常重要的損失函數(shù)與優(yōu)化算法在TensorFlow中的實(shí)現(xiàn),對(duì)實(shí)際使用深度學(xué)習(xí)解決問題都有極大幫助。
在此感謝互聯(lián)網(wǎng)時(shí)代,感謝Google的開源精神,讓我們可以如此緊跟時(shí)代最前沿的技術(shù),也可以為技術(shù)的進(jìn)步做出自己微薄的貢獻(xiàn)。還要感謝電子工業(yè)出版社劉皎編輯對(duì)新技術(shù)的關(guān)注和推廣,感謝同事、家人、各位好友的支持和幫助,有你們的支持才有此書的出版,不勝感激。
作 者
喻儼,百納信息(海豚瀏覽器)研發(fā)副總裁。2007年加入微軟亞洲工程院,2011年加入百納信息負(fù)責(zé)海外業(yè)務(wù)線,從0到1做過多個(gè)項(xiàng)目,現(xiàn)致力于AI和大數(shù)據(jù)產(chǎn)品的研究與應(yīng)用。
莫瑜,先后任職于微軟和海豚瀏覽器,從事搜索引擎、音樂檢索/哼唱搜索、內(nèi)容分發(fā)推薦算法和對(duì)話機(jī)器人技術(shù)研發(fā)。長(zhǎng)期以來持續(xù)關(guān)注和實(shí)踐大規(guī)模數(shù)據(jù)算法性能優(yōu)化、搜索引擎、推薦系統(tǒng)和人工智能技術(shù)。
王琛,英國(guó)愛丁堡大學(xué)人工智能專業(yè)碩士,現(xiàn)為百納信息技術(shù)有限公司人工智能方向負(fù)責(zé)人。早年參加過信息學(xué)奧林匹克競(jìng)賽獲得河北省1名、全國(guó)三等獎(jiǎng),并保送進(jìn)入中山大學(xué)。大學(xué)期間,在ACM競(jìng)賽上也屢獲佳績(jī)。碩士畢業(yè)后就職于百度基礎(chǔ)架構(gòu)部,參與大數(shù)據(jù)平臺(tái)研發(fā)工作,對(duì)大數(shù)據(jù)分析處理、分布式系統(tǒng)架構(gòu)等方面都有比較深刻的理解。2014年加入百納,負(fù)責(zé)多個(gè)項(xiàng)目的研發(fā),自2016年起負(fù)責(zé)人工智能方向的探索。
胡振邦,擁有博士學(xué)位,百納信息技術(shù)有限公司高級(jí)算法研究員,畢業(yè)于中國(guó)地質(zhì)大學(xué)計(jì)算機(jī)學(xué)院地學(xué)信息工程專業(yè)。讀博期間,參與了關(guān)于遙感衛(wèi)星圖像識(shí)別分析的863項(xiàng)目,并且是主要的研發(fā)人員。畢業(yè)以來,一直從事圖像識(shí)別方面的算法研發(fā)工作,主要方向包括目標(biāo)檢測(cè)、圖文檢索、圖像分類與驗(yàn)證等,在圖像處理、計(jì)算機(jī)視覺等方面都有深厚的積累和經(jīng)驗(yàn)。
高杰,是一位1980年出生于蘇北的“愛學(xué)習(xí)、能折騰、有情懷”的大叔。畢業(yè)于揚(yáng)州中學(xué)特招班,1998年入學(xué)華中科技大學(xué)機(jī)械系,兼修管理、會(huì)計(jì),自學(xué)計(jì)算機(jī),2003年考入南京大學(xué)軟件學(xué)院,曾任德國(guó)西門子內(nèi)部SAP咨詢師,還在中銀國(guó)際TMT投行、金山軟件集團(tuán)投資部任過職,2015年與合伙人聯(lián)合創(chuàng)立了圖靈科技集團(tuán),與華爾街優(yōu)秀交易團(tuán)隊(duì)一起致力于量化交易、算法模型和人工智能在金融領(lǐng)域的應(yīng)用,目前這家公司管理著超過20億元的資產(chǎn),是細(xì)分市場(chǎng)的領(lǐng)先公司。
1 深度學(xué)習(xí)簡(jiǎn)介 1
1.1 深度學(xué)習(xí)介紹 1
1.2 深度學(xué)習(xí)的趨勢(shì) 7
1.3 參考資料 10
2 TensorFlow系統(tǒng)介紹 12
2.1 TensorFlow誕生的動(dòng)機(jī) 12
2.2 TensorFlow系統(tǒng)簡(jiǎn)介 14
2.3 TensorFlow基礎(chǔ)概念 16
2.3.1 計(jì)算圖 16
2.3.2 Session會(huì)話 18
2.4 系統(tǒng)架構(gòu) 19
2.5 源碼結(jié)構(gòu) 21
2.5.1 后端執(zhí)行引擎 22
2.5.2 前端語言接口 24
2.6 小結(jié) 24
2.7 參考資料 25
3 Hello TensorFlow 26
3.1 環(huán)境準(zhǔn)備 26
3.1.1 Mac OS安裝 27
3.1.2 Linux GPU服務(wù)器安裝 28
3.1.3 常用Python庫(kù) 32
3.2 Titanic題目實(shí)戰(zhàn) 34
3.2.1 Kaggle平臺(tái)介紹 34
3.2.2 Titanic題目介紹 35
3.2.3 數(shù)據(jù)讀入及預(yù)處理 38
3.2.4 構(gòu)建計(jì)算圖 40
3.2.5 構(gòu)建訓(xùn)練迭代過程 44
3.2.6 執(zhí)行訓(xùn)練 46
3.2.7 存儲(chǔ)和加載模型參數(shù) 47
3.2.8 預(yù)測(cè)測(cè)試數(shù)據(jù)結(jié)果 50
3.3 數(shù)據(jù)挖掘的技巧 51
3.3.1 數(shù)據(jù)可視化 52
3.3.2 特征工程 54
3.3.3 多種算法模型 57
3.4 TensorBoard可視化 58
3.4.1 記錄事件數(shù)據(jù) 58
3.4.2 啟動(dòng)TensorBorad服務(wù) 60
3.5 數(shù)據(jù)讀取 62
3.5.1 數(shù)據(jù)文件格式 63
3.5.2 TFRecord 63
3.6 SkFlow、TFLearn與TF-Slim 67
3.7 小結(jié) 69
3.8 參考資料 69
4 CNN“看懂”世界 71
4.1 圖像識(shí)別的難題 72
4.2 CNNs的基本原理 74
4.2.1 卷積的數(shù)學(xué)意義 75
4.2.2 卷積濾波 77
4.2.3 CNNs中的卷積層 81
4.2.4 池化(Pooling) 83
4.2.5 ReLU 84
4.2.6 多層卷積 86
4.2.7 Dropout 86
4.3 經(jīng)典CNN模型 87
4.3.1 AlexNet 88
4.3.2 VGGNets 95
4.3.3 GoogLeNet & Inception 98
4.3.4 ResNets 106
4.4 圖像風(fēng)格轉(zhuǎn)換 109
4.4.1 量化的風(fēng)格 109
4.4.2 風(fēng)格的濾鏡 116
4.5 小結(jié) 120
4.6 參考資料 121
5 RNN“能說會(huì)道” 123
5.1 文本理解和文本生成問題 124
5.2 標(biāo)準(zhǔn)RNN模型 128
5.2.1 RNN模型介紹 128
5.2.2 BPTT算法 130
5.2.3 靈活的RNN結(jié)構(gòu) 132
5.2.4 TensorFlow實(shí)現(xiàn)正弦序列預(yù)測(cè) 135
5.3 LSTM模型 138
5.3.1 長(zhǎng)期依賴的難題 138
5.3.2 LSTM基本原理 139
5.3.3 TensorFlow構(gòu)建LSTM模型 142
5.4 更多RNN的變體 144
5.5 語言模型 146
5.5.1 NGram語言模型 146
5.5.2 神經(jīng)網(wǎng)絡(luò)語言模型 148
5.5.3 循環(huán)神經(jīng)網(wǎng)絡(luò)語言模型 150
5.5.4 語言模型也能寫代碼 152
5.5.5 改進(jìn)方向 163
5.6 對(duì)話機(jī)器人 164
5.6.1 對(duì)話機(jī)器人的發(fā)展 165
5.6.2 基于seq2seq的對(duì)話機(jī)器人 169
5.7 小結(jié) 181
5.8 參考資料 182
6 CNN+LSTM看圖說話 183
6.1 CNN+LSTM網(wǎng)絡(luò)模型與圖像檢測(cè)問題 184
6.1.1 OverFeat和Faster R-CNN圖像檢測(cè)算法介紹 185
6.1.2 遮擋目標(biāo)圖像檢測(cè)方法 187
6.1.3 ReInspect算法實(shí)現(xiàn)及模塊說明 188
6.1.4 ReInspect算法的實(shí)驗(yàn)數(shù)據(jù)與結(jié)論 204
6.2 CNN+LSTM網(wǎng)絡(luò)模型與圖像摘要問題 207
6.2.1 圖像摘要問題 208
6.2.2 NIC圖像摘要生成算法 209
6.2.3 NIC圖像摘要生成算法實(shí)現(xiàn)說明 214
6.2.4 NIC算法的實(shí)驗(yàn)數(shù)據(jù)與結(jié)論 243
6.3 小結(jié) 249
6.4 參考資料 250
7 損失函數(shù)與優(yōu)化算法 253
7.1 目標(biāo)函數(shù)優(yōu)化策略 254
7.1.1 梯度下降算法 254
7.1.2 RMSProp優(yōu)化算法 256
7.1.3 Adam優(yōu)化算法 257
7.1.4 目標(biāo)函數(shù)優(yōu)化算法小結(jié) 258
7.2 類別采樣(Candidate Sampling)損失函數(shù) 259
7.2.1 softmax類別采樣損失函數(shù) 261
7.2.2 噪聲對(duì)比估計(jì)類別采樣損失函數(shù) 281
7.2.3 負(fù)樣本估計(jì)類別采樣損失函數(shù) 286
7.2.4 類別采樣logistic損失函數(shù) 286
7.3 小結(jié) 287
7.4 參考資料 288
結(jié)語 289