2017 深度學習框架發展回顧
深度學習的圖景在不斷變化。Theano是第一個被廣泛採用的深度學習框架,由Yoshua Bengio領導的MILA建立和維護。但情況已經發生改變。今年9月,MILA宣佈,在釋出Theano的最新版本後,2018年將終止Theano的開發和維護。這個訊息並不令人感到意外。在過去的幾年裡,出現了不同的開源Python深度學習框架,這些框架通常是由大型科技公司開發或支援的,而且有些引起了很大的關注。
2017年開源深度學習框架圖景
目前,從GitHub的star和fork數量,以及Stack Overflow活躍度來看,谷歌的TensorFlow似乎是最常用的深度學習框架。有人預計,伴隨著TensorFlow的推出,谷歌將主導這個市場多年。但是,看起來其他框架確實也吸引了越來越多的充滿熱情的使用者群。值得一提的是PyTorch的開發和發展。PyTorch是在2017年1月由Facebook推出的。它是經典機器學習庫Torch框架的一個埠,Torch二進位制檔案包裝於GPU加速的Python。
除了GPU加速和記憶體使用的高效外,PyTorch受歡迎的主要因素是動態計算圖的使用。已經有其他一些不太知名的深度學習框架使用動態計算圖,例如Chainer。動態圖的優點在於,圖(graph)是由run定義(“define by run”),而不是傳統的“define and run”。特別是,在輸入可以變化的情況下,例如文字這樣的非結構化資料,這非常有用而且高效。
圖:PyTorch動態計算圖 - 來源:http://pytorch.org/about/
其他科技巨頭也坐不住了。微軟開發了名為CNTK的內部深度學習框架,在2017年正式推出2.0版本,並將其重新命名為微軟認知工具包(Microsoft Cognitive Toolkit)。 2017年,Facebook還推出了Caffe2。它將成為眾所周知的Caffe框架的繼承者。Caffe框架最初是伯克利視覺和學習中心開發的,現在仍然非常受歡迎,這是由於它的社群性質,它是計算機視覺的應用程式,以及它的Model Zoo ——一系列預訓練的模型。不過,Caffe2似乎還沒有跟上Caffe的腳步。
另一個流行的深度學習框架是MXNet,由微軟和亞馬遜共同支援。MXNet的歷史已經有一段時間了,但是當MXNet作為一個深度學習框架被提及時,我經常聽到人們說“那是一個R語言的深度學習框架吧?”。是的,但不止。MXNet實際上支援許多語言,包括C ++,Python,JavaScript,Go,以及R。MXNet最為突出的是它的可擴充套件性和效能。
這些只是眾多可選擇的框架中的一小部分。其他開源的深度學習框架還有Deeplearning4j和Dlib(基於C ++)。而且在2017年,谷歌旗下的DeepMind釋出了Sonnet(一個建立在TensorFlow上的高階面向物件的庫)。其他值得一提的框架還有H20.ai和Spark。
用Keras直接構建模型— source: https://github.com/keras-team/keras
除了這些框架之外,我們還有一些包裝在一個或多個框架中的介面(interface)。對於深度學習來說,最為人熟知和廣泛使用的介面無疑是Keras。Keras是一個高階深度學習API,用Python編寫,由谷歌的深度學習研究員Franois Chollet開發。谷歌在2017年宣佈,Keras已被選為TensorFlow的高階API。這意味著Keras將被包含在下一個TensorFlow版本中。除了TensorFlow,Keras也可以使用Theano或者CNTK作為後端。
Keras的功能強大,因為它用非常直接的方式,即通過堆疊多個層來建立深度學習模型。使用Keras時,使用者不必進行layers背後的數學運算。這似乎是快速原型設計的一種理想選擇。Keras也是Kaggle比賽的熱門工具。
那麼,一方面我們現在擁有了高階的Keras API,可以讓你輕鬆地構建簡單而高階的深度學習模型;另一方面我們還有低階的TensorFlow框架,能為構建模型提供更大的靈活性。這兩者都由谷歌支援。但是競爭並沒有停止——2017年10月,微軟和亞馬遜的AWS聯合宣佈推出Gluon API。Gluon是一個封裝了MXNet的高階Python深度學習介面,未來它還將支援微軟的CNTK。Gluon是Keras的直接競爭對手,儘管AWS聲稱他們強烈支援所有深度學習框架,但顯然,他們會打著AI民主化的口號押注於Gluon。
用Gluon堆疊卷積層和密集層以及引數初始化
令人驚訝的是,如今TensorFlow的最大競爭對手似乎是PyTorch。社群對PyTorch的興趣越來越高漲,例如,Kaggle的最新競賽中,參賽者經常選擇使用PyTorch作為其解決方案的一部分,PyTorch也被用在最新的研究論文中。而TensorFlow終於引入動態圖機制是在2017年10月釋出的Eager Execution,這是TensorFlow的“define-by-run”介面。谷歌希望通過這次釋出,贏回那些喜歡上PyTorch以及它的動態圖的使用者。
但對於廣受歡迎的深度學習課程fast.ai的開發者來說,這個改變來得太遲了。今年9月,fast.ai宣佈從Keras&TensorFlow轉換到PyTorch。fast.ai的創始研究員、Kaggle的前總裁兼首席科學家Jeremy Howard認為PyTorch將能夠保持領先地位。只有時間能告訴我們答案了。
有這麼多深度學習框架,對於新入門者來說,選擇哪個框架可能是有挑戰性的問題。坦白說,即使是經驗豐富的研究人員和開發人員,也很難跟上深度學習框架最新的發展。對此,一個好訊息是開放神經網路交換(ONNX)格式的釋出。ONNX於9月8日由微軟和Facebook聯合釋出,並在12月釋出了V1版本。ONNX是一個表示深度學習模型的開放格式。它使使用者可以更輕鬆地在不同框架之間轉移模型。例如,它允許使用者構建一個PyTorch模型,然後使用MXNet執行該模型來進行推理。
開放神經網路交換(ONNX)的Github頁面
ONNX由微軟、亞馬遜和Facebook等公司共同發起,宣佈支援ONNX的公司還有AMD、ARM、華為、 IBM、英特爾、Qualcomm等。谷歌不在這個陣營中並不令人驚訝。ONNX從一開始就支援Caffe2,Microsoft Cognitive Toolkit,MXNet和PyTorch,但與其他開源專案一樣,社群也已經為TensorFlow添加了一個轉換器。
小結
2017年深度學習框架方面有很多令人興奮的發展,就跟快速發展的深度學習和人工智慧一樣。很難預測新的一年會發生什麼。我們可能會看到一些整合,不過,大科技公司肯定會想使用和推廣自己的技術棧。我們很高興看到由不同技術巨頭支援的不同框架,它們互相推動,促進更快的創新。這是我對2017年深度學習框架競爭觀察的第一部分,在第二部分中,我將根據不同的度量標準,例如速度、記憶體使用、可移植性和可伸縮性等,來對比不同的框架效能。