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