本文轉載自公眾號 AI前線,原文地址

對於不同學習階段和不同崗位的開發者來說,什麼樣的深度學習框架才是適合自己的呢?為此,AI 前線邀請了來自BAT的深度學習框架專家解答這個疑問。

以下是選擇深度學習框架時常見的幾個問題:

目前,國內外有哪些主流的深度學習框架?分別有什麼優缺點?

TensorFlow:谷歌大廠出品,社區資源豐富,用戶群體廣泛。如果你的業務是實現一個比較成熟的應用場景,選擇 TensorFlow 是個不錯的選擇,畢竟大部分坑前人已經踩過了。如果你還是一名初學者,想要去實現全新的算法,那要慎重選擇 TensorFlow,因其發展時間較久,代碼庫龐大,想要真正看懂它的代碼會是一個不小的挑戰。

PaddlePaddle:百度出品,跟 TF 類似,PaddlePaddle 也是在百度內部實際應用的工業框架。值得一提的是,PaddlePaddle 為大量工業級模型提供官方支持;大規模分布式訓練技術能力強,支持大規模稠密參數和稀疏參數場景的並行訓練;基於其中文文檔友好、簡單易上手的特點,社區活躍度不斷提高。本土開發者中文交流非常方便。

PaddlePaddle 已經升級為全面的深度學習開發套件,除了核心框架,還開放了 VisualDL、PARL、AutoDL、EasyDL、AI Studio 等一整套的深度學習工具組件和服務平台,更好地滿足不同層次的深度學習開發者的開發需求。18 年百度加大了生態投入,在工業製造、農林領域有不少案例,對於想要落地應用場景,特別是針對中文語言處理的場景和大規模推薦場景,PaddlePaddle 或許是個不錯的選擇。

PyTorch+Caffe2:臉書出品。PyTorch 前身是 Torch(一個基於 Lua 語言的深度學習庫)。PyTorch 靈活性相比 TensorFlow 大大增強,支持動態構圖,開發者可以隨時改變神經網絡的結構。PyTorch 今年因其易用性表現突出,越來越受到學術界的青睞。

如果你是一名初學者,想要去復現前沿的算法,推薦使用 PyTorch。如果你是工業場景開發者,最好先搜一搜是否已經有使用 PyTorch 的成功落地案例。因為在運算效率、工業部署上,PyTorch 還不算成熟。Caffe2 為生產環境設計,提供在各種平台(包括移動設備)的運行時。Caffe2 意在彌補 Pytorch 在生產環境的不足,目前還沒有看到太多開發者反饋 Caffe2 的工業表現,需要更多時間驗證。

MxNet:已被亞馬遜 (Amazon) 選為 AWS 上的深度學習框架,支持動態圖計算。優勢是高效小巧,更適合自定義需求高的公司和研究者。如果你的工作需要對框架進行修改時,改 MxNet 要比改 TF 高效多了。MXNet 的用戶相比其他框架並不算太多,有少量擁戴者。MXNet 在文檔質量方便經常被詬病,新手還需要多磨合一下。

Keras:是一個用於快速構建深度學習原型的高層神經網絡庫,Keras 由純 Python 編寫而成,並基於 Tensorflow、Theano 以及 CNTK 後端。Keras 隱藏了大部分的內部運算,對於新手來說非常友好。如果想要快速入門,建議可以選擇 Keras。但真的想成為深度學習大拿,還是要手動從零開始寫一個神經網絡的代碼,否則容易依賴於 Keras 的易使用性而忽略底層原理。

XDL:阿里出品。X-Deep Learning (XDL) 是針對特定工業級場景(比如廣告)深度學習問題的解決方案,而不是與其他框架並列的底層框架。實際上,XDL 採用橋接的方式支持使用 TensorFlow 和 MXNet 作為單節點的計算後端。對於已經使用 TensorFlow、MXNet 的開發者來說,如果需要在大規模稀疏場景應用可以選擇 XDL 試試, XDL 依賴於阿里提供特定的部署環境,對非阿里系用戶不是很人性化。

不同學習階段、不同崗位的開發者,面對不同的業務場景需求應該選擇什麼深度學習框架?選擇和衡量的標準是什麼?

不同類型的用戶,選擇和衡量的標準會有一定差異。選擇框架通常要考慮易用性、性能、社區、平台支持等問題。初學者應該考慮容易上手的框架。偏研究性的開發者,一般選擇易用而且有領先的模型基線的框架。偏工業應用的開發者可以考慮使用穩定性高、性能好的框架。比較高階的用戶,往往需要同時掌握多個框架。

最新的開源算法可能會基於某個框架,掌握多個框架可以更快復現前沿成果。同時不同框架在不同模型上有性能差異,掌握多個框架也可以選擇在某個場景下最適合的框架。

在選擇深度學習框架時有哪些經驗可以分享?需要考慮哪些因素?

開發者通常用深度學習框架組建網絡,去解決實際企業級業務中的具體問題,比如:詞法分析、機器翻譯等。選擇框架時通常需要關注以下一些因素:

  1. 框架是否已經官方支持了當前最好的算法,比如中文詞法分析任務。
  2. 框架是否高效。同樣的算法用不同框架實現,訓練速度更快,意味着更少的線下資源,更快的迭代速度;預測速度更快,意味着實際部署時可以為企業節省大量的機器資源,也具有更高的響應速度。
  3. 框架的接口是否容易使用。

掌握一個深度學習框架,開發者需要做哪些準備?

在開發者已經學習 Python 程序開發和深度學習基礎知識的前提下,掌握一個深度學習框架,開發者需要了解框架的基本原理,學習並掌握框架的基本概念和用法。

  1. 通常可以先從官方文檔開始,通過大致瀏覽官方文檔對框架基本概念和用法有一個大致的了解。
  2. 另外可以結合官方提供的快速入門例子,在自己的機器上安裝並練習使用。
  3. 然後可以再從官方的模型庫裡面挑選一些算法,進行學習參考。
  4. 結合自己具體任務組建網絡,查看 API 接口文檔,解決實際任務。

深度學習框架能“包治百病”嗎?是否適用於所有應用場景需求?

需要提醒大家的是,深度學習框架不能包至百病,深度學習框架能夠解決的是適合使用深度學習技術的應用場景。

深度學習(DL)是機器學習(ML)的一個分支,也是當下最流行的機器學習方法,雖然近幾年在圖像、語音、自然語言處理等應用方向,深度學習技術都取得了突破性的進展,但是我們依然不應該神話深度學習,認為深度學習無所不能。

適合掌握深度學習的任務應具備這樣一些特點:

  1. 具備大量樣本數據。如果樣本數據難以獲取或者數量太少,我們認為就不適合深度學習技術解決
  2. 樣本數據對場景的覆蓋度足夠完善。深度學習模型的效果完全依賴樣本數據表現,如果出現樣本數據外的情況,模型的推廣性會變差
  3. 結果對可解釋性的要求不高。如果應用場景不僅要機器能夠完成某項任務,還需對完成過程有明確的可解釋性,這樣的場景就不那麼適合深度學習。

中國的深度學習框架有哪些不同於歐美國家主流深度學習開發框架的特點和創新?

從深度學習框架的特點來講,中國和歐美的的區分未必是一個合適的分類方式。很多中國深度學習框架研發的主體是中國工程師,也是在中國公司成長起來的,自然對國內的實際應用特點把握得會更精準,而且在中文文檔、中文教程以及中文模型配套上是獨具特色的。

未來,框架發展會出現哪些趨勢?

首先,當前仍處於深度學習研究和應用的持續火熱期,深度學習框架及平台在研究界和工業界的需求仍持續增長。深度學習框架和平台在產業界的市場佔有還未進入穩定期,當然未來一段時間應該也不會出現完全一家獨大的壟斷局面。

一方面整體的市場需求是很大也很多樣化的,另一方面不同框架在特性及發力點上自然會有一些差異性的適配。隨着深度學習在各行各業的廣泛應用,服務能力強的、更貼近用戶需求的框架會有更大的提升機會。

過去一段時間,動態圖的靈活性、易用性展現出對科研人員極大的吸引力,更多框架開始支持動態圖,但需要進一步解決動態圖下的性能優化問題。因為在工業界,訓練效率和規模化始終是最重要的。所以,各框架取長補短趨同性比較明顯,前端易用性、計算高效性、框架穩定性成為持續優化方向。當然,不同框架的先天基因的特性還是非常明顯的。

此外需要注意的是,AI 專有芯片也在快速發展,框架和底層芯片的軟硬結合一體化研發也日益引起關注。AI 應用部署場景快速擴張,框架對各硬件平台的快速部署和高效推理能力變得非常重要。整體而言,需要支持多硬件的高效計算。這也使得框架 內部架構上傾向於更好的抽象分層,保持整體邏輯的統一性和異構硬件執行的高效性。

另一方面,深度學習框架的內涵也在延展。深度學習框架的出現本身就是為了深度學習研究、實驗和應用的便利性,節省了開發者很大的編程代價。但對於深度學習技術而言,網絡設計其實也是非常重要的一環,基礎的深度學習框架是無法解決這個問題的。所以當下 神經網絡結構的自動設計 AutoDL 技術就成為新的熱點,也和深度學習框架進行更緊密的結合。

從便利深度學習技術應用來講,只靠開源框架還是不夠的,需要場景化組件、模塊、平台和產品的組合打法,框架之上的平台、配套組件構成的深度學習全流程解決方案對實際應用非常關鍵。若想深度學習框架在實際應用中發揮更大作用,是需要 更全面的綜合服務配套建設的。

如何看待接下來的框架之爭?

隨着深度學習技術的普及,各家框架的成熟化,深度學習技術的門檻會越來越低。在研究場景中,好用、靈活易擴展是最重要的考量因素,從目前的趨勢來看,PyTorch 在易用性上有一定優勢。PaddlePaddle 在實際生產場景中,框架的易用性、穩定性、生態資源的豐富度將取代技術的領先性成為開發者更重要的考量因素。

未來,擁有完整生態資源、有實際應用場景支撐的框架會爭奪到越來越多的企業開發者用戶。在國外,依賴於谷歌生態的 TensorFlow,依賴於 AWS 雲生態的 MXNet,未來都有一定的機會。

想要形成自己的產品生態,需要哪些必備條件?

想要形成自己的產品生態,需要具備四大條件:

  1. 掌握能為最終用戶提供巨大收益的核心技術。如深度學習領域框架所涉及的異構計算、並行訓練、多路通信、多端部署及核心算法等關鍵技術。廠商需要擁有深度學習核心技術並形成自己的特色,才具備了生態號召力。
  2. 核心產品或服務能夠規模化地應用和落地。在生態拓展的過程中,廠商有能力通過平台和資源沉澱足夠多的通用解決方案。
  3. 能為最終用戶提供全面的體驗。深度學習框架應用門檻較高,真正在企業廣泛落地,還有很多的工作要做,比如結合企業需求的深度定製優化、深度學習配套工具建設、細緻的企業服務等等,這要求廠商能夠有效整合生態系統中的各個夥伴能力,為最終用戶提供更全面的產品體驗。
  4. 擁有持續創新的能力。廠商應該有足夠的資金和動力讓核心技術和產品持續創新,使得生態系統的用戶相信核心業務能夠一直使他們受益。