【深度學習框架 Theano 慘遭淘汰】微軟數據分析師:為何曾經熱門的 Theano 18 個月就陣亡?

【我們為什麼挑選這篇文章】 Theano 作為一個開源的深度學習框架,由加拿大 蒙特利爾大學於 2016 年 3 月第一次發行版本 0.8,一直到前兩天(2017 年 9 月 28 日)宣布更新完畢 1.0 版本後不在更新,走入歷史。想到 一個深度學習的框架只花了一年半就被淘汰,就很驚訝人工智慧發展之快速。

這篇文章是一位微軟數據分析師綜合評比包括 Theano 在內的四大深度學習框架,有助大家了解 Theano 的效能差在哪、為何會被淘汰? (責任編輯:劉庭瑋)

本文將對目前流行的幾種 Keras 支持的深度學習框架性能做一次綜述性對比,包括 Tensorflow、CNTK、MXNet 和 Theano。 作者 Jasmeet Bhatia 是微軟的數據與人工智能架構師,本文內容僅代表個人觀點。

如果現在有人質疑 Keras 在數據科學家和工程師社區的地位,那麼就先請他去看看專業 AI 和雲計算玩家對 Keras 的支持率吧。官方發布的最新版 Keras,除了支持 Theano 等通用庫之外,已經可以支持 Google 的 Tensorflow 和微軟的 CNTK 深度學習庫。去年,亞馬遜雲宣布他們的系統支持另一款強大的工具 MXNet。

就在前幾週,新一版的 MXNet 也兼容 Keras。不過,截止目前 MXNet 貌似只支持 v1.2.2 版本的 Keras,對最新版 2.0.5 的 Keras 還不支持。

儘管只要產品選用被支持的後端服務,就可以在其中部署 Keras 模型,但是開發人員和架構師們必須牢記 Keras 是屬於適配不同深度學習框架的高層接口,還不支持任意調整外部庫的模型參數。

因此, 如果大家想要精細調節後端框架提供的所有參數,作者建議大家直接選用具體的框架,不必再用 Keras 做一層包裝 不過隨著時間的推移,Keras 的功能必定會逐步完善。但是我們不得不說,目前 Keras 仍然是深度學習項目早期開發階段的一個神器,它讓數據科學家和工程師們可以快速生成和測試複雜的深度學習模型。

Keras 還可以讓開發人員快速對比測試幾種深度學習框架的相對性能。Keras 的配置文件中有一個參數指定了用什麼後端框架。所以,大家只要寫一份代碼,就可以在 Tensorflow、CNTK 和 Theano 上都運行一次而無需改動代碼。

至於說 MXNet,因為它現在只支持 v1.2.2 版本的 Keras,所以要稍微修改代碼才能運行。顯然,這些獨立的框架可以利用開發庫中各式各樣的特性進一步調試優化,不過 Keras 為我們提供了一個比較這些框架基礎性能的機會。

有不少人寫過文章對比 Keras 支持後端的相對性能,Keras 或者後端框架每出一個新版本,我們都能看到性能的巨大改善。

那麼讓我們看看最新版本的 Keras 和各個後端框架能達到什麼性能。

首先,介紹一下本次實驗的硬件配置。

所有的測試都是在裝有 NVidia Tesla K80 GPU 的 Azure NC6 虛擬機上完成的。虛擬機的鏡像文件是 Azure DSVM(Data Science Virtual Machine)。鏡像文件預裝了 Keras、Tensorflow、Theano、MXNet 及其它數據科學工具。為了進行測試實驗,所有應用都升級到最新版本,針對 MXNet 選用 v1.2.2 版本的 Keras。

配置 由於每個框架的依賴不同,作者用三種不同的配置進行測試實驗,具體如下: 儘管所有框架的開發團隊都聲稱正在研發的新版本性能有所提升,可以用於科研項目,不過實際產品還是傾向於使用穩定版本。因此,本次測試的所有後端框架都使用了最新的穩定版本。

性能測試 為了比較各個框架的性能,作者使用了下面五種深度學習模型。為了保證實驗的公平性,所有的模型都來自於 Github 上 Keras 項目的示例代碼。作者在自己的 Github 頁面公佈了所有的測試代碼。值得注意的是,其中兩組測試沒有包括 MXNet 模型。還是由於 MXNet 不支持最新版 Keras 的功能,需要改動較多的代碼才能運行,所以排除在本次實驗之外。其它三組實驗只需少許改動代碼即可支持 MXNet,主要改動在於函數的命名不同。 實驗 1:CIFAR10 CNN

  • 模型類型:卷計算機網絡
  • 數據集/任務名稱: CIFAR10 圖像數據集
  • 目標:將圖片分到 10 個類別

就完成每個 epoch 速度而言,Tensorflow 略勝 MXNet 一籌。就準確率/收斂速度而言,CNTK 在第 25 輪迭代之時略微領先,不過第 50 輪迭代之後所有框架的準確率幾乎趨同。

實驗 2:MNIST CNN

  • 模型類型:卷計算機網絡
  • 數據集/任務名稱:MNIST 手寫數字數據集
  • 目標:識別照片中的手寫數字

在本組實驗中,Tensorflow 的訓練速度略快於 Theano,遠好於 CNTK,不過各個框架的準確率和收斂速度不分伯仲。

實驗 3:MNIST MLP

  • 模型類型:多層感知機/神經網絡
  • 數據集/任務名稱:MNIST 手寫數字數據集
  • 目標:識別照片中的手寫數字

本實驗還是在 MNIST 數據集上測試標準的深度神經網絡模型,CNTK、Tensorflow 和 Theano 的速度大致相同(2.5-2.7s/epoch),而 MXNet 獨樹一幟,達到了 1.4s/epoch 的速度。MXNet 在準確率和收斂速度方面也表現略好。

實驗 4:MNIST RNN

  • 模型類型:層次循環神經網絡
  • 數據集/任務名稱:MNIST 手寫數字數據集
  • 目標:識別照片中的手寫數字

在這組實驗中,CNTK 和 MXNet 的訓練速度比較接近(162-164s/epoch),Tensorflow 比它們稍慢,只有 179s/epoch。Theano 在 RNN 模型上的表現相當糟糕。

實驗 5:BABI RNN

  • 模型類型:循環神經網絡
  • 數據集/任務名稱:bAbi 項目
  • 目標:基於描述和問題訓練兩個循環神經網絡模型。生成的向量用來回答一系列 bAbi 任務。

MXNet 沒有參與本組實驗。Tensorflow 和 Theano 的性能差不多,CNTK 比它們快了 50%,只需 9.5s/epoch。

結論 各組實驗中,不同框架的性能對比

  • Tensorflow 在各組 CNN 模型的實驗中都表現出色,但是在 RNN 模型上表現一般。
  • CNTK 在 BAbi RNN 和 MNIST RNN 實驗中的表現遠遠好於 Tensorflow 和 Theano,但是在 CNN 實驗中不及 Tensorflow。
  • MXNet 在 RNN 測試中的表現略好於 CNTK 和 Tensorflow,在 MLP 實驗中性能碾壓其它所有框架。但是受限於 v2 版 Keras 的功能,無法參與另外兩組對比實驗,不過這種情況馬上會得到解決。
  • Theano 在 MLP 實驗中的性能略好於 Tensorflow 和 CNTK。
總結 從實驗結果來看,所有框架都有各自擅長的領域,目前並沒有哪一種框架能夠全面碾壓其它產品。不過,開源社區的參與者們仍舊在持續開發和維護這幾款產品,不斷提升它們的性能和擴大它們的功能,使得用戶的使用和部署過程更方便。不過,性能只是深度學習模型的一個方面,用戶在實際使用時還要兼顧效果、便捷性等多個因素。原文:Search fastest Keras Deep Learning backend 

(本文經  AI 科技大本營    授權轉載,並同意 TechOrange 編寫導讀與修訂標題,原文標題為 〈 技術| Bengio 終結 Theano 不是偶然,其性能早在 Keras 支持的四大框架中墊底  〉。)

延伸閱讀

挑戰 TensorFlow 霸主地位!Facebook 聯手微軟整合三大 AI 運算框架,讓 AI 協同工作再也不難
Google 工程師手把手教學!用 Arduino 和 TensorFlow 自組圖像識別小汽車
TensorFlow 成 GitHub 上最夯機器學習開源項目,Google 要當機器學習開源界的老大哥
只有開源還不夠用,Google 為機器學習技術 TensorFlow 再一次大升級
快來幫我!》搶 AI 學習系統主導權,谷歌大神推 TensorFlow 全面開源

點關鍵字看更多相關文章: