什麼是TensorFlow?

想想,在機器學習流行之前,我們是如何做與語音和圖像相關的識別的?大多數是基於規則的系統。例如,做自然語言處理,需要很多語言學的知識;再如,1997年的IBM的深藍計算機對戰國際象棋,也需要很多象棋的知識。

當以統計方法為核心的機器學習方法成為主流後,我們需要的領域知識就相對少了。重要的是做特徵工程(feature engineering),然後調一些參數,根據一些領域的經驗來不斷提取特徵,特徵的好壞往往就直接決定了模型的好壞。這種方法的一大缺點是,對文字等抽象領域,特徵還相對容易提取,而對語音這種一維時域信號和圖像這種二維空域信號等領域,提取特徵就相對困難。

深度學習的革命性在於,它不需要我們過多地提取特徵,在神經網絡的每一層中,計算機都可以自動學習出特徵。為了實現深度學習中運用的神經網絡,TensorFlow這樣的深度學習開源工具就應運而生。我們可以使用它來搭建自己的神經網絡。這就有點兒類似於PHP開發當中的CodeIgniter框架,Java開發當中的SSH三大框架,Python開發當中的Tornado、Django框架,C++當中的MFC、ACE框架。框架的主要目的就是提供一個工具箱,使開發時能夠簡化代碼,呈現出來的模型儘可能簡潔易懂。

為什麼要學TensorFlow?

首先,TensorFlow的一大亮點是支持異構設備分佈式計算(heterogeneous distributed computing)。

何為異構?信息技術當中的異構是指包含不同的成分,有異構網絡(如互聯網,不同廠家的硬件軟件產品組成統一網絡且互相通信)、異構數據庫(多個數據庫系統的集合,可以實現數據的共享和透明訪問[8])。這裡的異構設備是指使用CPU、GPU等核心進行有效地協同合作;與只依靠CPU相比,性能更高,功耗更低。

那何為分佈式?分佈式架構目的在於幫助我們調度和分配計算資源(甚至容錯,如某個計算節點宕機或者太慢),使得上千萬、上億數據量的模型能夠有效地利用機器資源進行訓練。

圖1-1給出的是開源框架TensorFlow的標誌。


程序員學習深度學習TensorFlow

圖1-1


TensorFlow支持卷積神經網絡(convolutional neural network,CNN)和循環神經網絡(recurrent neural network,RNN),以及RNN的一個特例長短期記憶網絡(long short-term memory,LSTM),這些都是目前在計算機視覺、語音識別、自然語言處理方面最流行的深度神經網絡模型。

下面參考《The Unreasonable Effectiveness of Recurrent Neural Networks》[9]這篇文章梳理了一個有效框架應該具有的功能。

  • Tensor庫是對CPU/GPU透明的,並且實現了很多操作(如切片、數組或矩陣操作等)。這裡的透明是指,在不同設備上如何運行,都是框架幫用戶去實現的,用戶只需要指定在哪個設備上進行哪種運算即可。
  • 有一個完全獨立的代碼庫,用腳本語言(最理想的是Python)來操作Tensors,並且實現所有深度學習的內容,包括前向傳播/反向傳播、圖形計算等。
  • 可以輕鬆地共享預訓練模型(如Caffe的模型及TensorFlow中的slim模塊)。
  • 沒有編譯過程。深度學習是朝著更大、更復雜的網絡發展的,因此在複雜圖算法中花費的時間會成倍增加。而且,進行編譯的話會丟失可解釋性和有效進行日誌調試的能力。

在我看來,在目前的深度學習的研究領域主要有以下3類人群。

  • 學者。主要做深度學習的理論研究,研究如何設計一個“網絡模型”,如何修改參數以及為什麼這樣修改效果會好。平時的工作主要是關注科研前沿和進行理論研究、模型實驗等,對新技術、新理論很敏感。
  • 算法改進者。這些人為了把現有的網絡模型能夠適配自己的應用,達到更好的效果,會對模型做出一些改進,把一些新算法改進應用到現有模型中。這類人主要是做一些基礎的應用服務,如基礎的語音識別服務、基礎的人臉識別服務,為其他上層應用方提供優良的模型。
  • 工業研究者。這類人群不會涉及太深的算法,主要掌握各種模型的網絡結構和一些算法實現。他們更多地是閱讀優秀論文,根據論文去復現成果,然後應用到自己所在的工業領域。這個層次的人也是現在深度學習研究的主流人群。

我相信本文的讀者也大都是第二類和第三類人群,且以第三類人群居多。

而在工業界,TensorFlow將會比其他框架更具優勢。工業界的目標是把模型落實到產品上,而產品的應用領域一般有兩個:一是基於服務端的大數據服務,讓用戶直接體驗到服務端強大的計算能力(谷歌雲平臺及谷歌搜索功能);二是直接面向終端用戶的移動端(Android系統)以及一些智能產品的嵌入式。

坐擁Android的市場份額和影響力的谷歌公司,在這兩個方向都很強大。此外,谷歌力推的模型壓縮和8位低精度數據存儲(詳見第 19 章)不僅對訓練系統本身有優化作用,在某種程度上也能使算法在移動設備上的部署獲益,這些優化舉措將會使存儲需求和內存帶寬要求降低,並且使性能得到提升,對移動設備的性能和功耗非常有利。

如果一個框架的用戶生態好,用的人就會很多,而用的人多會讓用戶生態更繁榮,用的人也就會更多。這龐大的用戶數就是TensorFlow框架的生命力。

截至2017年1月,與Caffe、Theano、Torch、MXNet等框架相比,TensorFlow在GitHub上Fork數和Star數都是最多的,如圖1-2所示。


程序員學習深度學習TensorFlow


程序員學習深度學習TensorFlow


程序員學習深度學習TensorFlow


程序員學習深度學習TensorFlow

圖1-2



圖1-3展示了截至2017年2月,近些年幾大機器學習框架的流行程度。


程序員學習深度學習TensorFlow

1-3


1.2.1 TensorFlow的特性

在TensorFlow官方網站[10]上,著重介紹了TensorFlow的6大優勢特性。

  • 高度的靈活性(deep flexibility)。TensorFlow是一個採用數據流圖(data flow graph),用於數值計算的開源軟件庫。只要計算可以表示為一個數據流圖,就可以使用TensorFlow,只需要構建圖,書寫計算的內部循環即可。因此,它並不是一個嚴格的“神經網絡庫”。用戶也可以在TensorFlow上封裝自己的“上層庫”,如果發現沒有自己想要的底層操作,用戶也可以自己寫C++代碼來豐富。關於封裝的“上層庫”,TensorFlow現在有很多開源的上層庫工具,極大地減少了重複代碼量,在第7章中會詳細介紹。
  • 真正的可移植性(true portability)。TensorFlow可以在CPU和GPU上運行,以及在臺式機、服務器、移動端、雲端服務器、Docker容器等各個終端運行。因此,當用戶有一個新點子,就可以立即在筆記本上進行嘗試。
  • 將科研和產品結合在一起(connect research and production)。過去如果將一個科研的機器學習想法應用到商業化的產品中,需要很多的代碼重寫工作。現在TensorFlow提供了一個快速試驗的框架,可以嘗試新算法,並訓練出模型,大大提高了科研產出率。
  • 自動求微分(auto-differentiation)。求微分是基於梯度的機器學習算法的重要一步。使用TensorFlow後,只需要定義預測模型的結構和目標函數,將兩者結合在一起後,添加相應的數據,TensorFlow就會自動完成計算微分操作。
  • 多語言支持(language options)。TensorFlow提供了Python、C++、Java接口來構建用戶的程序,而核心部分是用C++實現的,如圖1-12所示。第4章中會著重講解TensorFlow的架構。用戶也可以使用Jupyter Notebook[11]來書寫筆記、代碼,以及可視化每一步的特徵映射(feature map)。用戶也可以開發更多其他語言(如Go、Lua、R等)的接口。


程序員學習深度學習TensorFlow

圖1-4


最優化性能(maximize performance)。假如用戶有一臺32個CPU內核、4個GPU顯卡的機器,如何將計算機的所有硬件計算資源全部發揮出來呢?TensorFlow給予線程、隊列、分佈式計算等支持,可以讓用戶將TensorFlow的數據流圖上的不同計算元素分配到不同的設備上,最大化地利用硬件資源。關於線程和隊列,將在4.9節中介紹;關於分佈式,將在第14章介紹。

1.2.2 使用TensorFlow的公司

除了谷歌在自己的產品線上使用TensorFlow外,國內的京東、小米等公司,以及國外的Uber、eBay、Dropbox、Airbnb等公司,都在嘗試使用TensorFlow。圖1-5是摘自TensorFlow官方網站的日益壯大的公司牆。


程序員學習深度學習TensorFlow

圖1-5


1.2.3 TensorFlow的發展

2016年4月,TensorFlow的0.8版本就支持了分佈式、支持多GPU運算。2016年6月,TensorFlow的0.9版本改進了對移動設備的支持。2017年2月,TensorFlow的1.0正式版本中,增加了Java和Go的實驗性API,以及專用編譯器XLA和調試工具Debugger,還發布了tf.transform,專門用來數據預處理。並且還推出了“動態圖計算”TensorFlow Fold,這是被評價為“第一次清晰地在設計理念上領先”[12]。

用戶還可以使用谷歌公司的PaaS TensorFlow產品Cloud Machine Learning來做分佈式訓練。現在也已經有了完整的TensorFlow Model Zoo。

另外,TensorFlow出色的版本管理和細緻的官方文檔手冊,以及很容易找到解答的繁榮的社區,應該能讓用戶用起來相當順手。

截至2017年3月,用TensorFlow作為生產平臺和科研基礎研發已經越來越堅實可靠。

1.3 機器學習的相關賽事

說到機器學習,不得不提到每年的一些挑戰賽。近年來取得好成績的隊伍,常常是使用深度學習的方法的。正是這些賽事激勵著全世界科學家不斷採用更優化的方法提高算法結果的準確率,也引領著年度的深度學習探索方向。

1.3.1 ImageNet的ILSVRC

ILSVRC(ImageNet Large Scale Visual Recognition Challenge,大規模視覺識別挑戰賽)是用來大規模評估對象檢測和圖像識別的算法的挑戰賽。從2010年開始,至2016年已舉辦7屆。ImageNet是目前世界上最大的圖像識別數據庫,擁有超過1500萬張有標記的高分辨率圖像的數據集,這些圖像分屬於大概22 000個類別。ILSVRC使用ImageNet的一個子集,分為1 000種類別,每種類別中都有大約1 000張圖像。總之,大約有120萬張訓練圖像,5萬張驗證圖像和15萬張測試圖像。[6]圖1-6所示為ImageNet的官方網站。


程序員學習深度學習TensorFlow

圖1-6



ILSVRC每年邀請谷歌、微軟、百度等IT企業使用ImageNet,測試他們圖片分類系統運行情況。過去幾年中,該系統的圖像識別功能大大提高,出錯率僅為約5%(比人眼還低,人眼的識別錯誤率大概在5.1%)。在2015年,ILSVRC的錯誤率已經降低到了3.57%,採用152層的ResNet獲得了2015年分類任務的第一名。ILSVRC歷年的Top-5錯誤率如圖1-7所示。

在ImageNet上,習慣性地報告兩個錯誤率:Top-1和Top-5。Top-1錯誤率是指,預測輸出的概率最高的類別,是否和人工標記的類別一致,如果不一致,此時的概率。Top-5錯誤率是指,預測輸出的概率最高的前5個類別當中,有沒有和人工標記的類別一致,當5個都不一致時的概率。例如在圖片分類任務下,對一張圖片進行預測,輸出這張圖片分類概率最高的5個類別,只要有一個預測的類別和人工標註的類別標記一致,就是認為正確。當5個都不一致發生的概率就是Top-5錯誤率。


程序員學習深度學習TensorFlow

圖1-7


值得自豪的是,在剛剛過去的ILSVRC 2016上,中國學術界和工業界科研團隊包攬了多項冠軍。

  • CUImage(商湯科技聯合港中文):目標檢測第一。
  • Trimps-Soushen(公安部三所):目標定位第一。
  • CUvideo(商湯科技聯合港中文):視頻中物體檢測子項目第一。
  • NUIST(南京信息工程大學):視頻中的物體探測兩個子項目第一。
  • Hikvvision(海康威視):場景分類第一。
  • SenseCUSceneParsing(商湯科技聯合港中文):場景分析第一。

1.3.2 Kaggle

如果說ILSVRC企業參加的居多,那Kaggle這個平臺則更多地面向個人開發者。圖 1-7展示的是Kaggle的官方網站首頁。

Kaggle成立於2010年,是一個進行數據發掘、數據分析和預測競賽的在線平臺。與Kaggle合作之後,一家公司可以提供一些數據,進而提出一個問題,Kaggle網站上的計算機科學家和數學家(也就是現在的數據科學家)將領取任務,提供潛在的解決方案。最終勝出的解決方案可以獲得3萬美元到25萬美元的獎勵。也就是說,Kaggle也是一個眾包理念,利用全世界的人才來解決一個大問題。


程序員學習深度學習TensorFlow

圖1-7


Kaggle這個比賽非常適合學生參加,因為一般在校學生可能拿不到很多數據。此外,Kaggle不僅對參賽者有算法能力上的要求,而且能鍛鍊參賽者對數據的“嗅覺”,使參賽者從數據本身問題出發來尋求解決方案。

1.3.3 天池大數據競賽

“天池”是阿里搭建的一個大數據競賽平臺,圖1-8展示的是它的官方網站頁面。


程序員學習深度學習TensorFlow

圖1-8


這個平臺上一般會有一些穿衣搭配挑戰、新浪微博互動預測、用戶重複購買行為預測等賽事。平臺提供的“賽題攻略”對新手入門有很大的引領作用。如果在一些項目上取得不錯的成績,還有豐厚的獎金,以及進入阿里巴巴的工作機會。

1.7 國內的人工智能公司

近年來,國內湧現出一批做人工智能的公司,很多原有的互聯網公司也開始試水人工智能方向。雖然不可否認人工智能領域還是有一些泡沫存在,但是這個技術領域的井噴點確實來臨了,確切地說是科研成果的井噴點。我們要做的就是加快科研成果向產品的轉化速度。

國內的騰訊、阿里、百度三大公司在人工智能研究和商業化探索方面走得最早。騰訊優圖是騰訊的人工智能開放平臺;阿里雲ET是阿里巴巴的智能機器人;百度主要在無人駕駛汽車和手機百度客戶端的基於“自然語言的人機交互界面”的“度祕”上發力。這些都是人工智能在產業界應用的探索。此外,還有搜狗、雲從科技、商湯科技、崑崙萬維、格靈深瞳等公司,都在人工智能領域紛紛發力。

下面我們就來介紹國內幾家比較有特色的做人工智能的公司。

(1)陌上花科技:衣+(dress+)。提供圖像識別、圖像搜索、物體追蹤檢測、圖片自動化標記、圖像視頻智能分析、邊看邊買、人臉識別和分析等服務。其官方網站的首頁如圖1-8所示。

程序員學習深度學習TensorFlow

圖1-8


(2)曠視科技:Face++。以人臉識別精度著稱,並且提供人工智能開放平臺。目前已經和美圖秀秀、魔漫相機合作,實現美白、瘦臉、五官美化等美顏效果。此外,還和支付寶合作,未來有望推出“Smile to Pay”。其官方網站首頁如圖1-9所示。


程序員學習深度學習TensorFlow

圖1-9


(3)科大訊飛。主要提供語音識別解決方案,以及語音合成、語言云(分詞、詞性標註、命名實體識別、依存句法分析、語義角色標註等)等語音擴展服務,有完善的SDK及多種語言實現的API。其官方網站首頁如圖1-10所示。


程序員學習深度學習TensorFlow

圖1-10


(4)地平線。嵌入式人工智能的領導者,致力於提供高性能、低功耗、低成本、完整開放的嵌入式人工智能解決方案。其官方網站首頁如圖1-11所示。


程序員學習深度學習TensorFlow

圖1-11

本文摘自《TensorFlow技術解析與實戰》作者:李嘉璇。喜歡的讀者請轉發到朋友圈。

END


相關推薦

推薦中...