序
從理論到工程
技術(shù)發(fā)展的過程就是人類在探索自身創(chuàng)造能力邊界的過程,而人工智能無疑是最重要以及影響最深遠(yuǎn)的領(lǐng)域之一。
AlphaGo及其馬甲Master在圍棋領(lǐng)域大勝人類頂尖高手之后,在智力分析領(lǐng)域人類優(yōu)勢開始出現(xiàn)裂痕。而在“聽說讀寫”方面,不管是語音識別、語音合成、機器翻譯,還是圖像識別、物體識別,甚至是自動文章生成、自動曲譜生成、藝術(shù)圖像合成方面,機器已經(jīng)開始做得比人類更為強大。深度學(xué)習(xí)在工程領(lǐng)域的突破,使得“機器學(xué)習(xí)”走出了實驗室,進(jìn)入到工程領(lǐng)域,人類開始重新審視機器能帶來的更多可能性。
正如2007年以iPhone為代表的智能手機出現(xiàn),10年之間已經(jīng)顛覆了諸多商業(yè)領(lǐng)域、影響了人類的生活方式一樣,深度學(xué)習(xí)也必將如此,作為一名技術(shù)人,必須理解和跟上行業(yè)和時代的變革!
在過去的計算機技術(shù)演變過程中,數(shù)據(jù)主線(展示、邏輯、存儲)、架構(gòu)主線(C/S,B/S,SASS)、語言框架平臺主線(語法、庫、框架、操作系統(tǒng)、平臺)的變遷基本有跡可循,易于舉一反三,遷移學(xué)習(xí)曲線相對平緩。而機器學(xué)習(xí)的學(xué)習(xí)曲線相當(dāng)陡峭,需要同時專注于數(shù)據(jù)處理、模型構(gòu)建以及結(jié)果優(yōu)化,顛覆了我們以往對數(shù)據(jù)處理的理解。作為工程業(yè)界人士來說,沒有機器學(xué)習(xí)理論基礎(chǔ)的支持,幾乎無法應(yīng)用相關(guān)的工具;而沒有工程實踐的嘗試,又很難體系化理解理論基礎(chǔ)——入門著實不易。
本書的作者為具有多年研究經(jīng)驗的博士和多年業(yè)界工程研發(fā)經(jīng)驗的團隊,他們在工程領(lǐng)域的經(jīng)驗?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在圖像檢測和圖像摘要生成等基本工程領(lǐng)域的處理,快速地讓讀者理解深度學(xué)習(xí)能干什么,如何利用TensorFlow快速解決這些領(lǐng)域的問題,讓自己的應(yīng)用插上“人工智能”的翅膀!
人工智能的時代已經(jīng)開啟,唯有快速擁抱變化才能應(yīng)對變化,希望讀者能借這本書建立對機器學(xué)習(xí)的宏觀認(rèn)識并對之深入理解,跑步進(jìn)入機器學(xué)習(xí)領(lǐng)域!
劉鐵鋒
《編程之美》作者
海豚瀏覽器創(chuàng)始人
前言
創(chuàng)造出具有智能的機器一直是人們夢寐以求的理想。自20世紀(jì)50年代圖靈測試被提出以來,人工智能就成為了計算機科學(xué)領(lǐng)域中一個極具吸引力的研究方向。近年來,深度學(xué)習(xí)是機器學(xué)習(xí)領(lǐng)域中一個非常具有突破性的研究方向,從AlphaGo戰(zhàn)勝李世石,到Prisma運用深度學(xué)習(xí)技術(shù)制作濾鏡刷爆全世界的社交網(wǎng)絡(luò),深度學(xué)習(xí)在圖像處理、自然語言處理甚至博弈決策等問題上不斷取得震驚世人的成績。
隨著科研理論上的不斷突破,機器學(xué)習(xí)基礎(chǔ)架構(gòu)方面也有了長足進(jìn)步。為了提高科研和應(yīng)用的開發(fā)效率,面向深度學(xué)習(xí)的開發(fā)框架不斷涌現(xiàn),而TensorFlow就是其中的佼佼者。依托于Google強大的影響力,TensorFlow一經(jīng)發(fā)布就吸引了整個行業(yè)的關(guān)注。TensorFlow自2015年年底在GitHub開源以來,一直是機器學(xué)習(xí)、深度學(xué)習(xí)類別中關(guān)注度最高的項目,截至2016年年底,已經(jīng)獲得超過40000個Star。同時,在開源社區(qū)共同的努力下,基于TensorFlow開發(fā)的各種算法和應(yīng)用都在飛速增加。
本書結(jié)合基于TensorFlow實踐的應(yīng)用代碼,介紹了深度學(xué)習(xí)的基礎(chǔ)概念和知識,但需要讀者預(yù)先掌握一些傳統(tǒng)機器學(xué)習(xí)、神經(jīng)網(wǎng)絡(luò)相關(guān)方面的知識。同時,本書代碼主要基于目前最新的TensorFlow 1.0版本,大部分為Python代碼,需要讀者有一定的Python語言基礎(chǔ)。希望通過本書的介紹,讀者可以由淺入深、由理論到實踐全面掌握深度學(xué)習(xí)的基礎(chǔ)知識和實踐方法。
本書第1章介紹了深度學(xué)習(xí)的由來以及發(fā)展趨勢,簡要說明了人工智能、機器學(xué)習(xí)、深度學(xué)習(xí)等名詞概念之間的聯(lián)系。第2章主要介紹了TensorFlow系統(tǒng)的基礎(chǔ)知識和一些重要概念。第3章通過對Kaggle競賽平臺上的Titanic問題的求解實例,介紹了TensorFlow系統(tǒng)的基本用法,并簡要介紹了機器學(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的基本原理和多個經(jīng)典網(wǎng)絡(luò)結(jié)構(gòu),并通過圖像風(fēng)格化的實例展示了CNN在更多場景下應(yīng)用的可能性。第5章介紹了RNN、LSTM以及它們的多種變種結(jié)構(gòu),并通過實例介紹了如何構(gòu)建實用的語言模型和對話機器人。第6章介紹了卷積神經(jīng)網(wǎng)絡(luò)與循環(huán)神經(jīng)網(wǎng)絡(luò)的結(jié)合,通過圖像檢測和圖像摘要兩個問題介紹了CNN+LSTM相結(jié)合的威力。最后的第7章介紹了機器學(xué)習(xí)中非常重要的損失函數(shù)與優(yōu)化算法在TensorFlow中的實現(xiàn),對實際使用深度學(xué)習(xí)解決問題都有極大幫助。
在此感謝互聯(lián)網(wǎng)時代,感謝Google的開源精神,讓我們可以如此緊跟時代最前沿的技術(shù),也可以為技術(shù)的進(jìn)步做出自己微薄的貢獻(xiàn)。還要感謝電子工業(yè)出版社劉皎編輯對新技術(shù)的關(guān)注和推廣,感謝同事、家人、各位好友的支持和幫助,有你們的支持才有此書的出版,不勝感激。
作 者
喻儼,百納信息(海豚瀏覽器)研發(fā)副總裁。2007年加入微軟亞洲工程院,2011年加入百納信息負(fù)責(zé)海外業(yè)務(wù)線,從0到1做過多個項目,現(xiàn)致力于AI和大數(shù)據(jù)產(chǎn)品的研究與應(yīng)用。
莫瑜,先后任職于微軟和海豚瀏覽器,從事搜索引擎、音樂檢索/哼唱搜索、內(nèi)容分發(fā)推薦算法和對話機器人技術(shù)研發(fā)。長期以來持續(xù)關(guān)注和實踐大規(guī)模數(shù)據(jù)算法性能優(yōu)化、搜索引擎、推薦系統(tǒng)和人工智能技術(shù)。
王琛,英國愛丁堡大學(xué)人工智能專業(yè)碩士,現(xiàn)為百納信息技術(shù)有限公司人工智能方向負(fù)責(zé)人。早年參加過信息學(xué)奧林匹克競賽獲得河北省1名、全國三等獎,并保送進(jìn)入中山大學(xué)。大學(xué)期間,在ACM競賽上也屢獲佳績。碩士畢業(yè)后就職于百度基礎(chǔ)架構(gòu)部,參與大數(shù)據(jù)平臺研發(fā)工作,對大數(shù)據(jù)分析處理、分布式系統(tǒng)架構(gòu)等方面都有比較深刻的理解。2014年加入百納,負(fù)責(zé)多個項目的研發(fā),自2016年起負(fù)責(zé)人工智能方向的探索。
胡振邦,擁有博士學(xué)位,百納信息技術(shù)有限公司高級算法研究員,畢業(yè)于中國地質(zhì)大學(xué)計算機學(xué)院地學(xué)信息工程專業(yè)。讀博期間,參與了關(guān)于遙感衛(wèi)星圖像識別分析的863項目,并且是主要的研發(fā)人員。畢業(yè)以來,一直從事圖像識別方面的算法研發(fā)工作,主要方向包括目標(biāo)檢測、圖文檢索、圖像分類與驗證等,在圖像處理、計算機視覺等方面都有深厚的積累和經(jīng)驗。
高杰,是一位1980年出生于蘇北的“愛學(xué)習(xí)、能折騰、有情懷”的大叔。畢業(yè)于揚州中學(xué)特招班,1998年入學(xué)華中科技大學(xué)機械系,兼修管理、會計,自學(xué)計算機,2003年考入南京大學(xué)軟件學(xué)院,曾任德國西門子內(nèi)部SAP咨詢師,還在中銀國際TMT投行、金山軟件集團投資部任過職,2015年與合伙人聯(lián)合創(chuàng)立了圖靈科技集團,與華爾街優(yōu)秀交易團隊一起致力于量化交易、算法模型和人工智能在金融領(lǐng)域的應(yīng)用,目前這家公司管理著超過20億元的資產(chǎn),是細(xì)分市場的領(lǐng)先公司。
1 深度學(xué)習(xí)簡介 1
1.1 深度學(xué)習(xí)介紹 1
1.2 深度學(xué)習(xí)的趨勢 7
1.3 參考資料 10
2 TensorFlow系統(tǒng)介紹 12
2.1 TensorFlow誕生的動機 12
2.2 TensorFlow系統(tǒng)簡介 14
2.3 TensorFlow基礎(chǔ)概念 16
2.3.1 計算圖 16
2.3.2 Session會話 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庫 32
3.2 Titanic題目實戰(zhàn) 34
3.2.1 Kaggle平臺介紹 34
3.2.2 Titanic題目介紹 35
3.2.3 數(shù)據(jù)讀入及預(yù)處理 38
3.2.4 構(gòu)建計算圖 40
3.2.5 構(gòu)建訓(xùn)練迭代過程 44
3.2.6 執(zhí)行訓(xùn)練 46
3.2.7 存儲和加載模型參數(shù) 47
3.2.8 預(yù)測測試數(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 啟動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 圖像識別的難題 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“能說會道” 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實現(xiàn)正弦序列預(yù)測 135
5.3 LSTM模型 138
5.3.1 長期依賴的難題 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 對話機器人 164
5.6.1 對話機器人的發(fā)展 165
5.6.2 基于seq2seq的對話機器人 169
5.7 小結(jié) 181
5.8 參考資料 182
6 CNN+LSTM看圖說話 183
6.1 CNN+LSTM網(wǎng)絡(luò)模型與圖像檢測問題 184
6.1.1 OverFeat和Faster R-CNN圖像檢測算法介紹 185
6.1.2 遮擋目標(biāo)圖像檢測方法 187
6.1.3 ReInspect算法實現(xiàn)及模塊說明 188
6.1.4 ReInspect算法的實驗數(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圖像摘要生成算法實現(xiàn)說明 214
6.2.4 NIC算法的實驗數(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 噪聲對比估計類別采樣損失函數(shù) 281
7.2.3 負(fù)樣本估計類別采樣損失函數(shù) 286
7.2.4 類別采樣logistic損失函數(shù) 286
7.3 小結(jié) 287
7.4 參考資料 288
結(jié)語 289