ICLR 送出論文提及頻率
今日,Reddit 上的一條文章吸引了大家的關注:有網友統計,相比于 2018 年,在 ICLR 2019 送出論文中,提及不同架構的論文數量發生了極大變化。
首先,說下 2018 年和 2019 年論文送出數量。ICLR 2019 将于明年 5 月 6 日-9 日在美國新奧爾良舉行,今年 9 月 27 日下午 18 時,大會論文送出截止。據統計,ICLR 2019 共收到 1591 篇論文投稿,相比去年的 1000 餘篇增長了 60%。
其次,介紹下統計方法,相當簡單。在 Frankensteinian search 搜尋框下分别搜尋提及不同架構的論文結果,如下:

網友發現,提及 TensorFlow 的論文數量從 2018 年的 228 篇略微提升到了 266 篇,Keras 從 42 升到 56,但 Pytorch 的數量從 87 篇提升到了 252 篇。從資料上可以明顯看出,采用 PyTorch 的 ICLR 論文在這一年内幾乎要超越 TensorFlow。
- TensorFlow:228→266
- Keras: 42→56
- Pytorch:87→252
在 PyTorch 1.0 推出之際,這樣的資料統計讓我們不得不聯想到:TensorFlow 的深度學習架構霸主地位是否還保得住?既然 PyTorch 1.0 預覽版已經釋出,那麼讓我們再把兩個架構放在一起對比下,看哪一款才是适合你的深度學習架構。
TensorFlow VS PyTorch
自 2015 年開源以來,深度學習架構的天下就屬于 TensorFlow。不論是 GitHub 的收藏量或 Fork 量,還是業界使用量都無可比拟地位列第一。
TensorFlow 的版本疊代
但是 TensorFlow 有一個令人诟病的劣勢,即它和 Theano 一樣采用的是靜态計算圖,這令神經網絡的搭建和入門學習都變得更加困難。是以在 2017 年 1 月,Torch7 團隊開源了 PyTorch,它的宗旨是盡可能令深度學習模組化更加簡單。
PyTorch 的版本疊代
其實機器之心在很多對比文章中都發現 TensorFlow 的使用在目前來說還是最為廣泛的,但是 PyTorch 的發展勢頭非常迅猛,尤其是在學術研究領域的應用上。那麼為什麼新近開源的 PyTorch 會那麼受歡迎呢,首先我們需要了解深度學習架構的關鍵點:
- 易于建構大型計算圖
- 易于在計算圖中進行梯度運算
- 能在 GPU 上高效運作(cuDNN、cuBLA 等)
在後兩項中,基本上 TensorFlow 和 PyTorch 都能實作高效的自動微分機制和并行運算機制。但是在第一項中,PyTorch 的哲學是解決當務之急,也就是說即時建構和運作計算圖,這與 TensorFLow 先建立靜态計算圖再發生實際運算相比要簡單地多。是以在第一項上,PyTorch 具備很大優勢,但是 TensorFlow 的靜态計算圖更有利于部署模型,且現在同樣也非常關注動态計算圖。
工業化的缺陷
PyTorch 最開始釋出以來,大家都偏向于使用它做學術研究,而不是用于實際生産。主要的原因可能有兩點:首先它比較新,還不太成熟,是以很多 API 接口和結構也都不太穩定;其次是動态計算圖在部署上不太友善,而像 TensorFlow 這樣的靜态圖可以在不同的環境下調用計算圖和對應參數,是以很容易部署到各種産品中。
由于 PyTorch 與 Python 有着緊密的結合,是以将這種動态計算圖部署到其它産品會比較困難。不論是訓練腳本還是預訓練模型,我們經常需要将研究代碼轉換為 Caffe2 中的計算圖表征,進而實作生産規模上的高效使用。其中 Caffe2 項目是兩年前提出的,其目的是标準化 AI 模型的生産工具,目前該架構在 Facebook 伺服器以及超過 10 億台手機上運作,橫跨了八代 iPhone 和六代安卓 CPU 架構。
之前,從 PyTorch 到 Caffe2 的遷移過程是手動的,耗時間且容易出錯。為了解決這個問題,Facebook 與主要的硬體和軟體公司合作建立了 ONNX(開放神經網絡交換格式),這是一種用于表示深度學習模型的開放格式。通過 ONNX,開發者能在不同的架構間共享模型,例如我們可以導出由 PyTorch 建構的模型,并将它們導入到 Caffe2。
通過 ONNX 和 Caffe2,使用 PyTorch 建構的研究結果可以快速地轉化到生産中。而且昨日釋出的 PyTorch 1.0 預覽版也标志着 PyTorch 開始走向成熟,很多 API 接口和架構結構也都會變得更加穩定,這些都非常有利于将 PyTorch 應用于實際生産中。
性能對比
這兩種深度學習架構都有各自的特點,那麼它們在相同硬體(GPU)上運作相同神經網絡的性能又怎麼樣?Ilia Karmanov 在 GitHub 上開源了一項測試,他在相同的環境下測試由不同架構編寫的相同模型,并借此讨論不同架構的性能。從這些資料中,我們可以了解到在性能上,TensorFlow 和 PyTorch 并不會有顯著的差别,不過在特定的任務上還是有一些不同。
項目位址:
https://github.com/ilkarman/DeepLearningFrameworks以下展示了使用 VGG 在 CIFAR-10 上實作圖像分類的速度:
以下展示了 DenseNet-121 在 ChestXRay 資料集上的訓練速度,在這個圖像識别任務中,PyTorch 要比 TensorFlow 表現得更好一些:
如下展示了在 IMDB 資料集上訓練門控循環單元(GRU)的速度,它們實作的是情感分析任務。對于循環神經網絡,PyTorch 和 TensorFlow 的性能差不多,不過 PyTorch 在 P100 晶片上普遍表現得比 TensorFlow 好。
該項目還有更多的對比與分析,感興趣的讀者可檢視原 GitHub 項目。