深入淺出Tensorflow(一):深度學習及TensorFlow簡介

作者 | 鄭澤宇

AI前線出品| ID:ai-front

2017年2月16日,Google正式對外發布Google TensorFlow 1.0版本,並保證本次的發布版本API介面完全滿足生產環境穩定性要求。這是TensorFlow的一個重要里程碑,標誌著它可以正式在生產環境放心使用。在國內,從InfoQ的判斷來看,TensorFlow仍處於創新傳播曲線的創新者使用階段,大部分人對於TensorFlow還缺乏了解,社區也缺少幫助落地和使用的中文資料。InfoQ期望通過深入淺出TensorFlow系列文章能夠推動Tensorflow在國內的發展。歡迎加入QQ群(群號:183248479)深入討論和交流。

本文是整個系列的第一篇文章,將會介紹深度學習的發展歷史以及深度學習目前成熟的應用,同時也會介紹目前主流的深度學習工具,以及TensorFlow相比於其他工具的優勢。

從計算機發明之初,人們就希望它能夠幫助甚至代替人類完成重複性勞作。利用巨大的存儲空間和超高的運算速度,計算機已經可以非常輕易地完成一些對於人類非常困難,但對計算機相對簡單的問題。比如統計一本書中不同單詞出現的次數,存儲一個圖書館中所有的藏書或是計算非常複雜的數學公式都可以輕鬆通過計算機解決。然而,一些人類通過直覺可以很快解決的問題,目前卻很難通過計算機解決。人工智慧領域需要解決的問題就是讓計算機能像人類一樣,甚至超越人類完成類似圖像識別、語音識別等問題。

計算機要像人類一樣完成更多智能的工作需要夠掌握人類的經驗。比如我們需要判斷一封郵件是否為垃圾郵件,會綜合考慮郵件發出的地址、郵件的標題、郵件的內容以及郵件收件人的長度,等等。這是我們受到無數垃圾郵件騷擾之後總結出來的經驗。這個經驗很難以固定的方式表達出來,而且不同人對垃圾郵件的判斷也會不一樣。如何讓計算機可以跟人類一樣從歷史的經驗中獲取新的知識呢?這就是機器學習需要解決的問題。

什麼是機器學習?

卡內基梅隆大學(Carnegie Mellon University)的Tom Michael Mitchell教授在1997年出版的書籍Machine Learning中有對機器學習進行非常專業的定義,這個定義在學術界內被多次引用。在這本書中對機器學習的定義為「如果一個程序可以在任務T上,隨著經驗E的增加,效果P也可以隨之增加,則我們稱這個程序可以從經驗中學習」。讓我們通過垃圾郵件分類的問題來解釋機器學習的定義。在垃圾郵件分類問題中,「一個程序」指的是需要用到的機器學習演算法,比如邏輯回歸演算法;「任務T」是指區分垃圾郵件的任務;「經驗E」為已經區分過是否為垃圾郵件的歷史郵件,在監督式機器學習問題中,這也被稱之為訓練數據,也就是說對於機器學習而言,所謂的經驗其實就是數據;「效果P」為機器學習演算法在區分是否為垃圾郵件任務上的正確率。

在使用邏輯回歸演算法解決垃圾郵件分類問題時,我們會先從每一封郵件中抽取對分類結果可能有影響的因素,比如說上文提到的發郵件的地址、郵件的標題及收件人的長度,等等。每一個因素被稱之為一個特徵(feature)。邏輯回歸演算法可以從訓練數據中計算出每個特徵和預測結果的相關度。比如在垃圾郵件分類問題中,我們可能會發現如果一個郵件的收件人越多,那麼郵件為垃圾郵件的概率也就越高。在對一封未知的郵件做判斷時,邏輯回歸演算法會根據從這封郵件中抽取得到的每一個特徵以及這些特徵和垃圾郵件的相關度來判斷這封郵件是否為垃圾郵件。

在大部分情況下,在訓練數據達到一定數量之前,越多的訓練數據可以使邏輯回歸演算法對未知郵件做出的判斷越精準。也就是說邏輯回歸演算法可以根據訓練數據(經驗E)提高在垃圾郵件分類問題(任務T)上的正確率(效果P)。之所以說在大部分情況下,是因為邏輯回歸演算法的效果除了依賴於訓練數據,也依賴於從數據中提取的特徵。假設我們從郵件中抽取的特徵只有郵件發送的時間,那麼即使有再多的訓練數據,邏輯回歸演算法也無法很好地利用。這是因為郵件發送的時間和郵件是否為垃圾郵件之間的關聯不大,而邏輯回歸演算法無法從數據中習得更好的特徵表達。這也是很多傳統機器學習演算法的一個共同的問題。

什麼是深度學習?

對許多機器學習問題來說,特徵提取不是一件簡單的事情。在一些複雜問題上,要通過人工的方式設計有效的特徵集合需要很多的時間和精力,有時甚至需要整個領域數十年的研究投入。例如,假設想從很多照片中識別汽車。現在已知的是汽車有輪子,所以希望在圖片中抽取「圖片中是否出現了輪子」這個特徵。但實際上,要從圖片的像素中描述一個輪子的模式是非常難的。雖然車輪的形狀很簡單,但在實際圖片中,車輪上可能會有來自車身的陰影、金屬車軸的反光,周圍物品也可能會部分遮擋車輪。實際圖片中各種不確定的因素讓我們很難直接抽取這樣的特徵。

圖1 傳統機器學習和深度學習流程對比

深度學習解決的核心問題之一就是自動地將簡單的特徵組合成更加複雜的特徵,並使用這些組合特徵解決問題。深度學習是機器學習的一個分支,它除了可以學習特徵和任務之間的關聯以外,還能自動從簡單特徵中提取更加複雜的特徵。圖1中展示了深度學習和傳統機器學習在流程上的差異。如圖1所示,深度學習演算法可以從數據中學習更加複雜的特徵表達,使得最後一步權重學習變得更加簡單且有效。在圖2中,展示了通過深度學習解決圖像分類問題的具體樣例。深度學習可以一層一層地將簡單特徵逐步轉化成更加複雜的特徵,從而使得不同類別的圖像更加可分。比如圖2中展示了深度學習演算法可以從圖像的像素特徵中逐漸組合出線條、邊、角、簡單形狀、複雜形狀等更加有效的複雜特徵。

圖2 深度學習在圖像分類問題上的演算法流程樣例

人工智慧、機器學習和深度學習的關係

總的來說,人工智慧、機器學習和深度學習是非常相關的幾個領域。圖3總結了它們之間的關係。人工智慧是一類非常廣泛的問題,機器學習是解決這類問題的一個重要手段,深度學習則是機器學習的一個分支。在很多人工智慧問題上,深度學習的方法突破了傳統機器學習方法的瓶頸,推動了人工智慧領域的發展。

圖3 人工智慧、機器學習以及深度學習之間的關係圖

圖4展示了「deep learning」(深度學習)這個詞在最近十年谷歌搜索的熱度趨勢。從圖中可以看出,從2012年之後,深度學習的熱度呈指數上升,到2016年時,深度學習已經成為了谷歌上最熱門的搜索詞。深度學習這個詞並不是最近才創造出來的,它基本就是深層神經網路的代名詞。受到人類大腦結構的啟發,神經網路的計算模型於1943年首次提出。之後感知機的發明使得神經網路成為真正可以從數據中「學習」的模型。但由於感知機的網路結構過於簡單,導致無法解決線性不可分問題。再加上神經網路所需要的計算量太大,當時的計算機無法滿足計算需求,使得神經網路的研究進入了第一個寒冬。

圖4 「deep learning」最近十年在谷歌搜索的熱度趨勢。

到20世紀80年代,深層神經網路和反向傳播演算法的提出很好地解決了這些問題,讓神經網路進入第二個快速發展期。不過,在這一時期中,以支持向量機為主的傳統機器學習演算法也在飛速發展。在90年代中期,在很多機器學習任務上,傳統機器學習演算法超越了神經網路的精確度,使得神經網路領域再次進入寒冬。直到2012年前後,隨著雲計算和海量數據的普及,神經網路以「深度學習」的名字再次進入大家的視野。2012年,深度學習演算法AlexNet贏得圖像分類比賽ILSVRC(ImageNet Large Scale Visual Recognition Challenge)冠軍,深度學習從此開始受到學術界廣泛的關注。

深度學習的應用

圖5展示了歷年ILSVRC比賽的情況,從圖中可以看到,在深度學習被使用之前,傳統計算機視覺的方法在ImageNet數據集上最低的Top5錯誤率為26%。從2010年到2011年,基於傳統機器學習的演算法並沒有帶來正確率的大幅提升。在2012年時,Geoffrey Everest Hinton教授的研究小組利用深度學習技術將ImageNet圖像分類的錯誤率大幅下降到了16%。而且,從2012年到2015年間,通過對深度學習演算法的不斷研究,ImageNet圖像分類的錯誤率以每年4%的速度遞減。這說明深度學習完全打破了傳統機器學習演算法在圖像分類上的瓶頸,讓圖像分類問題得到了更好的解決。如圖5所示,到2015年時,深度學習演算法的錯誤率為4%,已經成功超越了人工標註的錯誤率(5%),實現了計算機視覺研究領域的一個突破。

圖5 歷年ILSVRC圖像分類比賽最佳演算法的錯誤率

在技術革新的同時,工業界也將圖像分類、物體識別應用於各種產品中了。在谷歌,圖像分類、物體識別技術已經被廣泛應用於谷歌無人駕駛車、YouTube、谷歌地圖、谷歌圖像搜索等產品中。谷歌通過圖像處理技術可以歸納出圖片中的主要內容並實現以圖搜圖的功能。這些技術在國內的百度、阿里、騰訊等科技公司也已經得到了廣泛的應用。

在物體識別問題中,人臉識別是一類應用非常廣泛的技術。它既可以應用於娛樂行業,也可以應用於安防、風控行業。在娛樂行業中,基於人臉識別的相機自動對焦、自動美顏基本已經成為每一款自拍軟體的必備功能。在安防、風控領域,人臉識別應用更是大大提高了工作效率並節省了人力成本。比如在互聯網金融行業,為了控制貸款風險,在用戶註冊或者貸款發放時需要驗證本人信息。個人信息驗證中一個很重要的步驟是驗證用戶提供的證件和用戶是同一個人。通過人臉識別技術,這個過程可以被更加高效地實現。

深度學習在語音識別領域取得的成績也是突破性的。2009年深度學習的概念被引入語音識別領域,並對該領域產生了巨大的影響。在短短几年時間內,深度學習的方法在TIMIT數據集上將基於傳統的混合高斯模型(gaussian mixture model,GMM)的錯誤率從21.7%降低到了使用深度學習模型的17.9%。如此大的提高幅度很快引起了學術界和工業界的廣泛關注。從2010年到2014年間,在語音識別領域的兩大學術會議IEEE-ICASSP和Interspeech上,深度學習的文章呈現出逐年遞增的趨勢。在工業界,包括谷歌、蘋果、微軟、IBM、百度等在內的國內外大型IT公司提供的語音相關產品,比如谷歌的Google Now,蘋果的Siri、微軟的Xbox和Skype等,都是基於深度學習演算法。

深度學習在自然語言處理領域的應用也同樣廣泛。在過去的幾年中,深度學習已經在語言模型(language modeling)、機器翻譯、詞性標註(part-of-speech tagging)、實體識別(named entity recognition,NER)、情感分析(sentiment analysis)、廣告推薦以及搜索排序等問題上取得了突出成就。在機器翻譯問題上,根據谷歌的實驗結果,在主要的語言對上,使用深度學習可以將機器翻譯演算法的質量提高55%到85%。表1對比了不同演算法翻譯同一句話的結果。從表中可以直觀地看到深度學習演算法帶來翻譯質量的提高。在2016年9月,谷歌正式上線了基於深度學習的中譯英軟體。現在在谷歌翻譯產品中,所有從中文到英文的翻譯請求都是由基於深度學習的翻譯演算法完成的。

表1 不同翻譯演算法的翻譯效果對比表

TensorFlow:來自Google的深度學習框架

要將深度學習更快且更便捷地應用於新的問題中,選擇一款深度學習工具是必不可少的步驟。

TensorFlow是谷歌於2015年11月9日正式開源的計算框架。TensorFlow計算框架可以很好地支持深度學習的各種演算法,但它的應用也不限於深度學習。

TensorFlow是由Jeff Dean領頭的谷歌大腦團隊基於谷歌內部第一代深度學習系統DistBelief改進而來的通用計算框架。DistBelief是谷歌2011年開發的內部深度學習工具,這個工具在谷歌內部已經獲得了巨大的成功。

基於DistBelief的ImageNet圖像分類系統Inception模型贏得了ImageNet2014年的比賽(ILSVRC)。通過DistBelief,谷歌在海量的非標註YouTube視屏中習得了「貓」的概念,並在谷歌圖片中開創了圖片搜索的功能。使用DistBelief訓練的語音識別模型成功將語音識別的錯誤率降低了25%。在一次BBC採訪中,當時的谷歌首席執行官Eric Schmidt表示這個提高比率相當於之前十年的總和。

雖然DistBelief已經被谷歌內部很多產品所使用,但是DistBelief過於依賴谷歌內部的系統架構,很難對外開源。為了將這樣一個在谷歌內部已經獲得了巨大成功的系統開源,谷歌大腦團隊對DistBelief進行了改進,並於2015年11月正式公布了基於Apache 2.0開源協議的計算框架TensorFlow。相比DistBelief,TensorFlow的計算模型更加通用、計算速度更快、支持的計算平台更多、支持的深度學習演算法更廣而且系統的穩定性也更高。關於TensorFlow平台本身的技術細節可以參考谷歌的論文TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems。

如今在谷歌內部,TensorFlow已經得到了廣泛的應用。在2015年10月26日,谷歌正式宣布通過TensorFlow實現的排序系統RankBrain上線。相比一些傳統的排序演算法,使用RankBrain的排序結果更能滿足用戶需求。在2015年彭博(Bloomberg)的報道中,谷歌透露了在谷歌上千種排序演算法中,RankBrain是第三重要的排序演算法。基於TensorFlow的系統RankBrain能在谷歌的核心網頁搜索業務中佔據如此重要的地位,可見TensorFlow在谷歌內部的重要性。包括網頁搜索在內,TensorFlow已經被成功應用到了谷歌的各款產品之中。如今,在谷歌的語音搜索、廣告、電商、圖片、街景圖、翻譯、YouTube等眾多產品之中都可以看到基於TensorFlow的系統。在經過半年的嘗試和思考之後,谷歌的DeepMind團隊也正式宣布其之後所有的研究都將使用TensorFlow作為實現深度學習演算法的工具。

除了在谷歌內部大規模使用之外,TensorFlow也受到了工業界和學術界的廣泛關注。在Google I/O 2016的大會上,Jeff Dean提到已經有1500多個GitHub的代碼庫中提到了TensorFlow,而只有5個是谷歌官方提供的。如今,包括優步(Uber)、Snapchat、Twitter、京東、小米等國內外科技公司也紛紛加入了使用TensorFlow的行列。正如谷歌在TensorFlow開源原因中所提到的一樣,TensorFlow正在建立一個標準,使得學術界可以更方便地交流學術研究成果,工業界可以更快地將機器學習應用於生產之中。

其他已開源的深度學習工具

除了TensorFlow,目前還有一些主流的深度學習開源工具。筆者認為,不同的深度學習工具都在發展之中,比較當前的性能、功能固然是選擇工具的一種方法,但更加重要的是比較不同工具的發展趨勢。深度學習本身就是一個處於蓬勃發展階段的領域,所以對深度學習工具的選擇,筆者認為應該更加看重工具在開源社區的活躍程度。只有社區活躍度更高的工具,才有可能跟上深度學習本身的發展速度,從而在未來不會面臨被淘汰的風險。

(a)不同深度學習工具社區流行度指標比較

(b)同深度學習工具社區參與度指標比較

圖6 不同深度學習工具在GitHub上活躍程度對比圖,圖中數據獲取的時間為2016年11月17日

圖6對比了不同深度學習工具在GitHub上活躍程度的一些指標。圖6(a)中比較了不同工具在GitHub上受關注的程度。從圖中可以看出,無論是在獲得的星數(star)還是在倉庫被複制的次數上,TensorFlow都要遠遠超過其他的深度學習工具。如果說圖6(a)只能代表不同深度學習工具在社區受關注程度,那麼圖6(b)對比了不同深度學習工具社區參與度。圖6(b)中展示了不同深度學習工具在GitHub上最近一個月的活躍討論貼和代碼提交請求數量。活躍討論帖越多,可以說明真正使用這個工具的人也就越多;提交代碼請求數量越多,可以說明參與到開發這個工具的人也就越多。從圖6(b)中可以看出,無論從哪個指標,TensorFlow都要遠遠超過其他深度學習工具。大量的活躍開發者再加上谷歌的全力支持,筆者相信TensorFlow在未來將有更大的潛力。

本文內容來自作者圖書作品《TensorFlow:實戰Google深度學習框架》,

購買鏈接:re.jd.com/cps/item/1212

作者介紹

鄭澤宇,才雲首席大數據科學家,前谷歌高級工程師。從 2013 年加入谷歌至今,鄭澤宇作為主要技術人員參與並領導了多個大數據項目,擁有豐富機器學習、數據挖掘工業界及科研項目經驗。2014 年,他提出產品聚類項目用於銜接谷歌購物和谷歌知識圖譜(Knowledge Graph)數據,使得知識卡片形式的廣告逐步取代傳統的產品列表廣告,開啟了谷歌購物廣告在搜索頁面投遞的新紀元。他於2013 年 5 月獲得美國 Carnegie Mellon University(CMU)大學計算機碩士學位, 期間在頂級國際學術會議上發表數篇學術論文,並獲得西貝爾獎學金。


-全文完-

關注人工智慧的落地實踐,與企業一起探尋 AI 的邊界,AICon 全球人工智慧技術大會火熱售票中,6 折倒計時一周搶票,詳情點擊:

aicon.geekbang.org/appl

《深入淺出TensorFlow》迷你書現已發布,關注公眾號「AI前線」,ID:ai-front,回復關鍵字:TF,獲取下載鏈接!


推薦閱讀:

K-means聚類 的 Python 實現【圖文解釋】
評論上的情感分析:主題與情感詞抽取
TensorFlow(1)-AlexNet實現
FaceRank-人臉打分基於 TensorFlow 的 CNN 模型,這個妹子顏值幾分? FaceRank 告訴你!
Fully-Convolutional Siamese Networksfor Object Tracking 翻譯筆記

TAG:深度学习DeepLearning | 机器学习 | TensorFlow |