閱讀439 返回首頁    go 阿裏雲 go 技術社區[雲棲]


《TensorFlow技術解析與實戰》——第1章 人工智能概述 1.5為什麼要學TensorFlow

本節書摘來自異步社區《TensorFlow技術解析與實戰》一書中的第1章,第1.5節,作者李嘉璿,更多章節內容可以訪問雲棲社區“異步社區”公眾號查看

第1章 人工智能概述

1.5 為什麼要學TensorFlow

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

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

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

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

1

圖1-9

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-10所示。

__20170524095846

圖1-10

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

__20170524095856

圖1-11

1.5.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等)的接口。
__20170524101159

圖1-12

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

1.5.2 使用TensorFlow的公司

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

__20170524101210

圖1-13

1.5.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作為生產平台和科研基礎研發已經越來越堅實可靠。

最後更新:2017-05-24 10:31:17

  上一篇:go  《TensorFlow技術解析與實戰》——第1章 人工智能概述 1.6機器學習的相關賽事
  下一篇:go  Nodejs基礎:stream模塊入門介紹與使用