2018年最流行的深度學習框架?這份科學的排行榜可以告訴你

ofollow,noindex" target="_blank">機器之心 翻譯
參與 路雪 蔣思源 張倩
2018年最流行的深度學習框架?這份科學的排行榜可以告訴你
深度學習仍然是機器學習領域最熱門的技術。深度學習框架變化迅速,僅僅五年前 Theano 還一枝獨秀,而最近出現了各種各樣的框架,它們都有不同的特性。在本文中,為了評估 2018 到底哪些框架比較流行,作者從領英職位需求、谷歌搜尋熱度、Medium 文章數、arXiv 論文數和 GitHub 活躍度等方面審視不同的框架。
我想尋找值得關注的框架,於是就開發了這個排行榜。Python 語言是深度學習使用的熱門語言,因此我主要關注能相容 Python 的框架。我使用了來自 7 個不同類別的 11 個數據源,並用來評估框架使用、使用者興趣和流行度。
資料地址:https://www.kaggle.com/discdiver/deep-learning-framework-power-scores-2018
2018.09 by Jeff Hale
顯然,TensorFlow 是絕對贏家,還有一些令人驚訝的發現。我們一起來看一下~
角逐者
我們考慮的這些框架都已經開源,它們主要都使用 Python,一些可以相容 R 或其他語言。
TensorFlow 是絕對冠軍。在 GitHub 活躍度、谷歌搜尋、Medium 文章數、亞馬遜書籍和 arXiv 論文這些資料來源上,它所佔的比重都是最大的。它還擁有最多的開發者使用者,以及出現在最多的線上職位描述中。
Keras 具備「一個為人類而非機器設計的 API」。它在幾乎所有評估中都是第二流行的框架。Keras 的後端可以基於TensorFlow、Theano 或 NLTK。如果你是剛入門深度學習的新手,使用 Keras 是不錯的選擇。
PyTorch 是第三流行的框架,也是第二流行的獨立框架。它比TensorFlow 出現時間晚,但發展迅速。PyTorch 允許定製化,而TensorFlow 不能。PyTorch 是由 Facebook 支援開發的。
Theano 由蒙特利爾大學於 2007 年開發,是最老的 Python深度學習框架。現在它的流行度下降了很多,其開發者和維護者宣佈 將停止更新維護 Theano 。不過,Theano 仍然頻繁出現在職位描述中。
MXNet由 Apache 孵化。它和 Theano 的得分很接近,目前處於第四流行的深度學習庫。它擁有大量貢獻者、搜尋結果、相關書籍和學術文章。但是它的使用率比去年有所下降,搜尋它的使用者也不是很多。
CNTK 是微軟推出的認知工具包。它的推出旨在與谷歌、Facebook 競爭,但並沒有獲得特別多的使用。
FastAI 基於 PyTorch 構建。其 api 受到 Keras 的啟發,所需程式碼甚至還更少。FastAI 正為今年 10 月的 1.0 版本釋出而經歷重寫,FastAI 背後的男人 Jeremy Howard 曾經是 Kaggle 比賽冠軍以及 Kaggle 主席。
你可能會問為什麼 FastAI 會在這個名單上,職業開發者對它沒什麼需求,它的使用也不廣泛。但是,它通過免費線上課程平臺 fast.ai 獲得了大批使用者。同時,FastAI 也很強大易用,它的使用率可能會很快增長。
Caffe 不在本名單中,因為它之前更新到 Caffe2,2018 年 3 月 Caffe2 被融合進 PyTorch。
評估準則
為了全面地評估深度學習框架的流行程度,我選擇以下類別和角度為它們進行評分:
-
線上職位描述
-
KDnuggets 使用調查
-
谷歌搜尋熱度
-
Medium 文章數量
-
Amazon 書籍數量
-
arXiv 論文數
-
GitHub 活躍度
支援本次評分的資料都在今年 9 月 16 號收集完,原資料地址為:https://docs.google.com/spreadsheets/d/1mYfHMZfuXGpZ0ggBVDot3SJMU-VsCsEGceEL8xd1QBo/edit?usp=sharing
我使用了 plotly 資料視覺化庫和 Python 的 Pandas 庫來探索並展示各框架的流行度,對於互動性的 plotly 圖表,請看 Kaggle Kernel:https://www.kaggle.com/discdiver/deep-learning-framework-power-scores-2018
線上職位描述
深度學習框架在目前的職場中有著什麼樣的需求?我搜索了領英的職位描述,具體而言為 Simply Hired、Monste 和 Angel List。
TensorFlow 在職位描述中明顯要比其它框架出現得更多,所以如果你希望從事深度學習,最好還是學習這個框架。
我搜索職位描述的方法是採用「machine learning」+「框架名」,所以TensorFlow 就是採用「machine learningTensorFlow」來搜尋的。我其實還採用了其它搜尋方法,但還是這種搜尋方法給出的結果更好。此外,額外的關鍵詞對於區分不同框架而言是非常有必要的,因為我最初還嘗試在這個分析中加入 Caffe 庫。
使用情況
KDnuggets 是一個流行的資料科學網站,他們調查了世界各地資料科學家的軟體庫使用情況,他們會向用戶問道:
在過去的 12 個月中,你在實際專案上會使用哪些分析、大資料、資料科學和機器學習工具?
以下展示了大家對框架的偏好程度:
Keras 在使用總量上非常驚人,它幾乎和TensorFlow 一樣。所以說美國老闆對員工的TensorFlow 技能有壓倒性的需求,而在國際上 Keras 使用的頻率同樣也非常高。
僅有這一個類別是包含國際資料的,因為其他類別加入國際資料可能會非常麻煩。KDnuggets 做這一份報告已經好幾年了,我在這個分析中只用了今年的資料,但我們需要注意 Theano、MXNET 和 CNTK 相比於去年在使用上有所滑落。
谷歌搜尋熱度
在最大的搜尋引擎上度量各框架的搜尋熱度,這也是一個非常好的流行度衡量方法。我們在 Google Trends 中搜索過去幾年的搜尋熱度歷史,雖然它並不提供具體的搜尋數值,但還是能提供相對圖表。
截至 2018 年 9 月 15 日,TensorFlow 平穩佔據 78% 的搜尋比重。PyTorch 接近 Keras,而其它框架的搜尋量在 3 左右或低於 3。
下面我們來簡要看一下搜尋量隨著時間的變化,以瞭解更多歷史背景。下面的表格展示了近兩年的谷歌搜尋情況。
TensorFlow 藍色、Keras 紅色、PyTorch 黃色、Theano 綠色。
TensorFlow、Keras 和 PyTorch 的搜尋量在 2016 年末和 2017 年增長迅速。有趣的是,它們在最近幾個月增長緩慢。我們可以從中看到某種季節性,暑假下降寒假上升。
谷歌搜尋趨勢只允許同時對比五項,因此其它庫在另外一個表上進行對比。所有這些結果都是在美國區域的搜尋結果。儘管搜尋關鍵詞 Theano 和 Keras 還有其它意思,但那些意思主要是在美國以外使用。
Medium 文章數
我計算了多個出版物型別,出現較早的框架在出版方面比較有優勢,未來排行榜將關注出版物數量的變化。下面來看 Medium 文章。
這次出現了新的冠軍。從 Medium 文章提及量來看,Keras 超越TensorFlow,但也算勢均力敵。FastAI 的表現也超出以往。我猜測出現上述結果的原因是 Keras 和 FastAI 對新手比較友好。深度學習新人對它們有很大興趣,而 Medium 是一個教程論壇。
下面我們來看哪些框架在亞馬遜上的實體書比較多。
亞馬遜書籍
我在亞馬遜 Books->Computer Science 分類下搜尋了每個深度學習框架,結果如下:
TensorFlow 又一次奪得冠軍。MXNET 相關書籍的數量超出預期,且多於 Theano。PyTorch 的書相對較少,但這有可能是因為該框架還比較年輕。該評估標準對年頭久的庫較為有利,因為出版書籍需要時間。
或許 Theano 在學術論文方面會比較好吧。
arXiv 論文
arXiv 是線上資料庫,大部分機器學習學術論文都會發表在 arXiv 上。我在該網站上搜索了每個框架,結果如下:
同樣,TensorFlow 的學術論文較多。最大的意外是其它框架的學術論文總數不敵TensorFlow。注意 Keras 在 Medium 和亞馬遜上的流行度比學術論文要高得多。PyTorch 在這塊表現也不好,應該還是因為出現時間較短的緣故。
GitHub 活躍度
GitHub 活躍度是框架流行度的另一個指標。我分別調查了 star、fork、watcher 和貢獻者數量,因為它們單獨的意義要比整體的組合的意義更大。
很明顯,TensorFlow 是 GitHub 上最流行的框架,擁有大量活躍使用者。FastAI 還不錯,畢竟才誕生一年。有趣的是各個框架的貢獻者數量要比其它三個指標接近得多。
收集和分析這些資料之後,是時候總結一下了。
計算排行榜分數步驟
我用以下步驟建立排行榜得分:
-
將所有特徵縮放到區間 [0,1] 之間。
-
聚合職位描述和 GitHub 活躍度這兩個子類別。
-
根據下圖中的權重對類別進行加權。
如上圖所示,線上職位描述和 KDnuggets 使用調查組成了分數的一半,而網頁搜尋、出版物和 GitHub 關注度組成了另一半。這種分割應該是對不同類別最合適的平衡。
4. 為了方便理解,將加權後的得分乘 100。
5. 將每個框架的各類別得分相加,整合成最終的排行榜得分。
Google Sheet 地址:https://docs.google.com/spreadsheets/d/1mYfHMZfuXGpZ0ggBVDot3SJMU-VsCsEGceEL8xd1QBo/edit#gid=0
下圖是對子類別進行加權相加之後的得分。
Jupyter Notebook 地址:https://www.kaggle.com/discdiver/deep-learning-framework-power-scores-2018
下圖再次展示了最終的排行榜得分。
2018.09 by Jeff Hale
100 是最高分,在每一類中代表第一名。TensorFlow 得分接近 100,這也不足為奇,因為這一框架幾乎包攬了所有類別的第一名。點選以下連結獲取圖中未顯示資訊:https://www.kaggle.com/discdiver/deep-learning-framework-power-scores-2018
展望
TensorFlow 現在獨佔鰲頭,這種局勢短期內似乎不會改變。然而,考慮到深度學習世界中事物的發展速度,TensorFlow 被趕超也不是不可能。
時間會證明 PyTorch 是否會超越TensorFlow,就像 React 超越 Angular 一樣。PyTorch 和 React 都是 Facebook 支援的靈活框架,使用者通常認為這兩個框架比谷歌的同類框架易用。
FastAI 能吸引課程之外的使用者嗎?它有大量的學生,使用 API 比 Keras 更容易。
給學習者的建議
如果你正考慮學習其中一種框架且具備 Python、numpy、pandas、sklearn 和 matplotlib 的技能,我建議你從 Keras 入手。該框架使用者基礎很大,在求職時非常有用,Medium 上有很多相關文章,API 也很易用。
如果你已經學過 Keras,那麼選擇下一個要學習的框架可能有點困難。我建議你去學TensorFlow 或 PyTorch,而且要好好學,這樣才能做出良好的深度學習模型。
TensorFlow 顯然是為迎合需求而學習的框架,但 PyTorch 的易用性和靈活性使得它使用起來更加友好。
一旦掌握了這些框架,我建議你留意 FastAI。如果想同時學習基礎和高階深度學習技能,請檢視 FastAI 的免費線上課程,FastAI 1.0 承諾幫助使用者輕鬆實施最新的深度學習策略並快速迭代。
無論你選擇了哪個框架,我希望你現在深入瞭解一下哪個框架需求量最大、使用最頻繁、最受關注。
原文連結:https://www.kaggle.com/discdiver/deep-learning-framework-power-scores-2018
工程 TensorFlow 深度學習框架 Keras PyTorch
相關資料
Machine Learning
機器學習是人工智慧的一個分支,是一門多領域交叉學科,涉及概率論、統計學、逼近論、凸分析、計算複雜性理論等多門學科。機器學習理論主要是設計和分析一些讓計算機可以自動“學習”的演算法。因為學習演算法中涉及了大量的統計學理論,機器學習與推斷統計學聯絡尤為密切,也被稱為統計學習理論。演算法設計方面,機器學習理論關注可以實現的,行之有效的學習演算法。
來源:Mitchell, T. (1997). Machine Learning. McGraw Hill.
Deep learning
深度學習(deep learning)是機器學習的分支,是一種試圖使用包含複雜結構或由多重非線性變換構成的多個處理層對資料進行高層抽象的演算法。 深度學習是機器學習中一種基於對資料進行表徵學習的演算法,至今已有數種深度學習框架,如卷積神經網路和深度置信網路和遞迴神經網路等已被應用在計算機視覺、語音識別、自然語言處理、音訊識別與生物資訊學等領域並獲取了極好的效果。
來源: LeCun, Y., Bengio, Y., & Hinton, G. (2015). Deep learning. nature, 521(7553), 436.
Tensor
張量是一個可用來表示在一些向量、標量和其他張量之間的線性關係的多線性函式,這些線性關係的基本例子有內積、外積、線性對映以及笛卡兒積。其座標在 維空間內,有 個分量的一種量,其中每個分量都是座標的函式,而在座標變換時,這些分量也依照某些規則作線性變換。稱為該張量的秩或階(與矩陣的秩和階均無關係)。 在數學裡,張量是一種幾何實體,或者說廣義上的“數量”。張量概念包括標量、向量和線性運算元。張量可以用座標系統來表達,記作標量的陣列,但它是定義為“不依賴於參照系的選擇的”。張量在物理和工程學中很重要。例如在擴散張量成像中,表達器官對於水的在各個方向的微分透性的張量可以用來產生大腦的掃描圖。工程上最重要的例子可能就是應力張量和應變張量了,它們都是二階張量,對於一般線性材料他們之間的關係由一個四階彈性張量來決定。
來源: 維基百科

機器之心編輯