678
技術社區[雲棲]
《TensorFlow技術解析與實戰》——導讀

緣起
2017年2月,TensorFlow的首屆開發者峰會(2017 TensorFlow Dev Summit)在美國的加利福尼亞州舉行。在會上,穀歌公司宣布正式發布TensorFlow 1.0版本。本書就是基於最新的1.1.0版本來介紹TensorFlow的技術解析和實戰。
人工智能大潮來了。2016年,AlphaGo擊敗圍棋大師李世石後,人工智能的應用仿佛一夜之間遍地開花。在科技潮流的大環境中,現在矽穀的用人單位越來越傾向於雇用既懂理論(思考者)又懂編程(執行者)的工程師。思考者的日常工作是閱讀文獻以求產生思路,而執行者則是編寫代碼來實現應用。但是要成為一名真正的工程師,學習機器學習是將思考者和執行者相結合的最快途徑。
眾所周知,人工智能是高級計算智能最寬泛的概念,機器學習是研究人工智能的一個工具,深度學習是機器學習的一個子集,是目前研究領域卓有成效的學習方法。深度學習的框架有很多,而TenforFlow將神經網絡、算法這些平時停留在理論層麵的知識,組織成一個平台框架,集合了神經網絡的各個算法函數組成一個工具箱,讓廣大工程師可以專心建造自己的目標領域的“輪子”,而且TenforFlow是基於Python語言的,極易上手,這些優勢迅速吸引了全世界的工程師。
我曾經也是一名前後端開發工程師,更專注於後端工程方向,而潛心研究深度學習和TensorFlow後,我被TensorFlow深深地迷住了。我發現它對各行各業將會有很深遠的影響,並且會大大地解放勞動力。
與傳統工程師的主要工作——實現產品需求或者設計高可用性架構不同,深度學習讓人總結和抽象人類是怎樣理解和看待問題的,並把這種方式教給機器。例如,在AlphaGo的研究中,人們需要先抽象出人類思考圍棋的方式,然後將這種方式抽象成算法,並且配合人類大腦構造中神經網絡的傳輸來實現這些算法。這時,工程師不會再寫實現業務需求的邏輯代碼,而是深度學習中將神經網絡的“黑盒”和模型效果非常好卻缺乏“可解釋性”的特性相結合,在次次實驗中盡量找出規律。記得美國前總統肯尼迪在宣布登月計劃時曾說:“我們選擇去月球,不是因為它簡單,而是因為它困難。”今天,我相信,所有致力於人工智能方向的工程師之所以自豪地去研究,也不是因為它簡單,而是因為它困難。我們研究它,是因為立足於現在這個點往前看,我們看不到已經建好的高樓大廈,看到的是一片等待我們去發掘的空曠的大地,而這個發掘過程需要的是十足的遠見、決心、勇氣和信心。
我在學習的過程中,由於深度學習的資料英文的居多,在理解上走了不少彎路。我把學到的知識和原理用心整理並用文字表述出來,寫成這本書,希望能幫助沒有接觸過深度學習的廣大程序員迅速上手,而不再被英文閱讀理解擋在門外。說實話,TensorFlow的文檔以及API接口是比較抽象的,再加上有一些從工程方向轉入深度學習的人以前沒有過深度學習的經驗,所以如果帶著工程類程序研發的思維去學習,甚至是實現業務邏輯需求的思維去學習,效果會很差。我希望這本書能為讀者呈現一個通俗易懂、形象生動的TensorFlow,使讀者迅速走入深度學習的世界。
在本書的寫作過程中,為了能充分擠出時間,深夜當我困倦時,我常常讓自己以最不舒服的方式入睡,希望能盡量少睡,以此增加仔細鑽研的時間。有時我還會打開電視,將音量設置為靜音,感受房間中電視背景光閃爍的動感,以此提醒自己時間的流動。剛開始我會坐在工作台前寫作,累了又會抱著筆記本坐在床上繼續寫作,有時會寫著寫著不知不覺地睡著,淩晨三四點鍾又醒來,感受黑夜裏的那片安寧,心情頓時平靜,再次投入到鑽研中。每每有靈感,都非常激動;每每再次深入一個概念,增刪易稿,把原理逼近真相地講透,都讓我非常有成就感。
麵向的讀者
我素來不愛探究數學公式的推導原理,對符號也很茫然,隻是在必須要用時才對這些公式進行詳細的推導,但是我卻對這些原理在應用層麵如何使用出奇地感興趣。本書的目標就是帶讀者進入造“應用輪子”的大門。我會以最少的數學公式講清楚如何用TensorFlow實現CNN、RNN,如何在實戰中使用TensorFlow進行圖片分類、人臉識別和自然語言處理等,以及如何將想訓練的數據、想實現的應用親手做出來。
同時,Python語言是一門相當高級的語言,有“可執行的偽代碼”的美譽,可以用極少的代碼行去完成一個複雜的功能,同時Python還有極為豐富的第三方庫,讓全世界很多工程師的開發工作變得異常簡單。TensorFlow是用Python語言實現的框架,對很多學生來說非常容易上手,當然,如果是有開發經驗的工程師,就更容易學會。如果說設計神經網絡模型像是蓋一棟大樓,那麼TensorFlow強大的API用起來會讓人感覺就像搭積木一樣容易。因此,懂點兒Python,即便不怎麼懂數學和算法原理也沒關係,盡管跟著我一起學便是。
在翻譯學上有一個概念叫作“平行語料庫”,這個概念來自製作於公元前196年的古埃及羅塞塔石碑,石碑上用希臘文字、古埃及文字和當時的通俗體文字刻了同樣的內容。在本書進行某個概念的講解時,雖然是用Python代碼作示範,但TensorFlow前端開發同時也支持多種上層語言,本書講解過程中也會兼顧到用C++、Java、Go語言做開發的讀者。
我希望,本書成為不同領域的讀者進入人工智能領域的“墊腳石”,也希望所有的讀者在人生路上能利用TensorFlow這個工具大放異彩。
我有很重的強迫症,因此,在編寫本書的過程中,閱讀了國內外很多與TensorFlow相關的資料,對本書的目錄結構和框架經過很多次反複琢磨和調整;在寫完之後,我又從頭到尾地讀過好幾遍,並且和了解TensorFlow不同方麵的人反複交流,根據建議又反複修改。這一切就是希望它能通俗易懂,把讀者快速領入深度學習的大門。
這扇門的背後是異彩紛呈的,身懷這門技藝的人是應該非常自豪的,但這扇門的背後也是非常辛苦的,有時數據需要自己去想辦法解決,還需要每天看論文,知曉最新科研成果,給自己以啟發,反複地做實驗,研究算法和模型,尋求提升和解決方法,經常會遇到在很長一段時間沒有思路的情況。但是,隻要做的東西是開創的,令人稱讚的,就會開心地享受這個過程。
我專為本書讀者建立了一個QQ交流群(320420130),希望在群裏與大家深入討論和交流學習過程中遇到的問題,也希望與大家分享最新的研究成果。
致謝
非常感謝穀歌大腦的工程師Jeff Dean,在得知我目前正在寫這本書的時候,他特地發了郵件鼓勵我:“聽說你寫了一本關於TensorFlow的書,真是太好了。希望你很享受學習TensorFlow的這段經曆,並享受運用TensorFlow完成各種任務的這種體驗。我非常高興你為中文社區寫這本書。”[1]這讓我更堅定了傳播TensorFlow深度學習的決心。
感謝百度矽穀AI實驗室資深科學家王益老師關於AI on Kubernetes的建議。
感謝在百度工作時的同事陳後江,在寫作過程中,我們有時在周末的深夜還進行討論,印象最深的一次是在大冬天晚上,我們恰好都在外麵,相互通了20多分鍾電話,手凍得像冰棒似的。還要感謝童牧晨玄,他也是深度學習領域的愛好者,對關鍵的概念理解得非常透徹,能十分精準地講出原理。
非常感謝《Redis實戰》一書的譯者黃健宏,他對技術寫作有很豐富的經驗。和他聊書總是能聊到淩晨以後,討論到暢快處,甚至聊到天亮,他對問題的思考就像是“演雜技”一樣,精準又恰到好處;同時,他又是一個非常讓人感到溫暖和踏實的朋友。
非常感謝iOS資深開發者唐巧,他在國內社區樂於分享的精神造福了很多的技術從業者,也正是他的推薦讓我和本書的編輯楊海玲老師結下了這段美好的情誼。
非常感謝人民郵電出版社的楊海玲編輯,她最開始想到這個寫作方向,我們一起一點一點地討論書的內容,確認書的寫作框架。在寫作過程中,她的細致、專業、獨到的見解也為本書增色不少。她對內容嚴謹和認真的態度令人動容。
非常感謝中科院計算所劉昕博士對本書第6章神經網絡的發展提出的建議;感謝曾經的百度同事畢驍鵬對第8章、第9章、第13章、第14章、第20章、第21章提出的極為細致的建議,尤其是他擅長GPU和FPGA的部分,對本書的硬件加速提供了很多建議;感謝中科院智能信息處理重點實驗室常務副主任山世光對第10章人臉識別部分提出的建議;感謝劉元震對本書第11章提出的建議;感謝我的好朋友容器專家苗立堯對第17章提出的建議;感謝百度地圖導航專家梁騰騰對第19章移動端開發給予的極為細致的建議;感謝阿裏巴巴數據科學與技術研究院高級專家孫亮博士對整本書的結構和知識點提出的建議。
感謝我的好朋友吳麗明,曾經那麼幫助過我;感謝我的好朋友饒誌臻先生,一直誘惑我買蘋果設備,有個硬件發燒友真的很幸福;感謝我的閨蜜謝禹曦,好久沒有和你聚餐了,甚是思念。
最後,還得感謝一位流行歌手——“火星弟弟”華晨宇,他在舞台上那一次次創意和感染力的演出深深地吸引了我,他在台下那認真刻苦作曲改歌的樣子也激勵著我,每次想到他的事跡,都給我極大的鼓勵。
非常感謝本書的每一位讀者,本書的完成過程非常辛苦但也充滿甜蜜。我在“知乎”(ID:李嘉璿)和網站(tf.greatgeekgrace.com)上也會回答關於“人工智能”的各類問題,希望通過內容的更新與讀者不斷交流。另外,由於水平有限,在內容上表述上難免也有遺漏和疏忽,也懇請讀者多多指正。
2017年4月於北京石景山
個人博客:blog.greatgeekgrace.com
TensorFlow交流社區:tf. greatgeekgrace.com
電子郵箱:qiyueli_2013@163.com
前言
第一篇 基礎篇
第1章 人工智能概述
1.1什麼是人工智能
1.2什麼是深度學習
1.3深度學習的入門方法
1.4什麼是TensorFlow
1.5為什麼要學TensorFlow
1.6機器學習的相關賽事
1.7國內的人工智能公司
1.8小結
第2章 TensorFlow環境的準備
2.1下載TensorFlow 1.1.0
2.2基於pip的安裝
2.3基於Java的安裝
2.4從源代碼安裝
2.5依賴的其他模塊
2.6小結
第3章 可視化TensorFlow
3.1PlayGround
3.2TensorBoard
3.3可視化的例子
3.4小結
最後更新:2017-05-24 15:01:19