什麼叫做深度學習框架,其作用是什麼

深度學習小白,最近聽說了許多深度學習的框架。然而對框架這個東西本身(包括其作用,意義等)並不能理解。希望大神們能從比較宏觀抽象的角度,給出一個生動形象的答案,最好可以運用比喻的手法?(? ? ?ω? ? ?)?


深度學習框架也就像Caffe、tensorflow這些幫助你進行深度學習的工具,簡單來說就是庫,編程時需要import caffe。

作一個簡單的比喻,一套深度學習框架就是這個品牌的一套積木,各個組件就是某個模型或演算法的一部分,你可以自己設計如何使用積木去堆砌符合你數據集的積木。

好處是你不必重複造輪子,模型也就是積木,是給你的,你可以直接組裝,但不同的組裝方式,也就是不同的數據集則取決於你。

深度學習框架的出現降低了入門的門檻,你不需要從複雜的神經網路開始編代碼,你可以依據需要,使用已有的模型,模型的參數你自己訓練得到,你也可以在已有模型的基礎上增加自己的layer,或者是在頂端選擇自己需要的分類器。

當然也正因如此,沒有什麼框架是完美的,就像一套積木里可能沒有你需要的那一種積木,所以不同的框架適用的領域不完全一致。

題外話:我剛開始入門深度學習的時候,也對框架有過疑問,覺得像caffe,CNN模型是給的,直接訓練就行了,那如何設計自己的模型呢。但後來深入後,就發現框架不就是像積木一樣嘛,總不能說積木就沒有自己設計的成分吧?如果你不嫌麻煩,從頭開始設計網路結構,也是可以的…


吃貨的我來舉個栗子。深度學習就像菜譜,數據就是肉和青菜,深度學習框架就是炒菜的鍋和鏟。誰說炒一碟紅燒土豆一定要用caffe出品的鍋,誰說炒一碟香煎蓮藕一定要用google出品的鏟?我們只要學會菜譜,研究一下鍋和鏟的屬性並多加實踐練習,就可以炒出一碟香噴噴的菜。


既然提到深度學習的框架,那麼我們現在可以來分析一下深度學習的框架:

在深度學習領域的五大巨頭裡,它們都各自力挺一種深度學習框架:像谷歌有自家的TensorFlow、Facebook有Torch、百度有Paddle Paddle、微軟有CNTK、而亞馬遜的AWS則有MXNet,現在還有支持HADOOP的NL4J深度學習框架。

表1.1 是五大主流深度學習框架概要對比表。每種框架都有其優缺點,選擇的時候更加需要根據自身業務的實際需求。例如需要用到對時間序列分析的,那麼就會使用循環神經網路RNN,而Caffe、MXNet就是對圖像卷積處理非常友善而缺乏循環神經網路,Google的TensorFlow則是支持其他機器學習演算法,還支持增強學習Reinforcement learning演算法。常言道,欲先攻必先利器,在正式進入深度學習之前,讓我們一起來了解一下各大主流深度學習框架之間的關係與其優缺點。

1. Caffe 1.0

Caffe1.0 是第一個主流的工業級深度學習工具。在2013年底由UC Berkely的賈揚清基於C和C++開發的深度學習框架,其特點是具有非常出色的卷積神經網路實現,尤其在13年至16年期間大部分與視覺有關的深度學習論文都採用了caffe框架。而到至今為止Caffe在計算機視覺領域依然是最流行的工具包。可是因為開發早和歷史遺留問題,其架構的缺點是不夠靈活、缺乏對遞歸網路RNN和語言建模的支持,因此Caffe不適用於文本、聲音或時間序列數據等其他類型的深度學習應用。

2. TensorFlow 0.88

TensorFlow基於python編寫,通過C/C++引擎加速,是Google開源的第二代深度學習框架。TensorFlow處理遞歸神經網RNN非常友好,並且內部實現使用了向量運算的符號圖方法,使用圖graph來表示計算任務,這樣使得新網路的指定變得相當容易,支持快速開發。TensorFlow其用途不止於深度學習,還可以支持增強學習和其他演算法,因此擴展性很好。缺點是目前TensorFlow還不支持「內聯(inline)」矩陣運算,必須要複製矩陣才能對其進行運算,複製龐大的矩陣會導致系統運行效率降低,並佔用部分內存。另外TensorFlow不提供商業支持,僅為研究者提供的一種新工具,因此公司如果要商業化需要考慮開源協議問題。

3. Torch

Torch由Facebook用Lua編寫的開源計算框架,支持機器學習演算法。其具有有較好的靈活性和速度。實現並且優化了基本的計算單元,可以很簡單地在此基礎上實現自己的演算法,不用浪費精力在計算優化上面。Facebook於2017年1月開放了Torch的Python API ― PyTorch源代碼,其支持動態計算圖,能處理長度可變的輸入和輸出,這尤其適用於循環神經網路RNN的應用。缺點是介面為lua語言,需要時間去學習新的編程語言。

4. Theano

Theano是深度學習框架中的元老,使用Python編寫。Theano派生出了大量Python深度學習庫,最著名的包括Blocks和Keras。其最大特點是非常的靈活,適合做學術研究的實驗,且對遞歸網路和語言建模有較好的支持,缺點是速度較慢。

5. MXNet

MXNet主要由C/C++編寫,提供多種API的機器學習框架,面向R、Python和Julia等語言,目前已被亞馬遜雲服務作為其深度學習的底層框架。由於MXNet是16年新興的深度學習框架,因此大量借鑒了Caffe的優缺點。其最主要的特定是是分散式機器學習通用工具包DMLC 的重要組成部分,因此其分散式能力較強。MXNet還注重靈活性和效率,文檔也非常的詳細,同時強調提高內存使用的效率,甚至能在智能手機上運行諸如圖像識別等任務。但是其與Caffe一樣缺乏對循環神經網路RNN的支持,相對比使用JAVA實現的NL4J在分散式方面沒有JAVA方便。

href="">6. Keras

Keras 是一個基於Theano和TensorFlow的深度學習庫,由於受到深度學習元老框架Torch的啟發,擁有較為直觀的API,有望成為未來開發神經網路的標準Python API。而本書主要採用Keras作為主要代碼API,因為其具有簡潔的API介面,方便理解深度學習的原理與插入代碼片段。

根據筆者的實際開發經驗,希望未來的深度學習模型可以應用於大型的伺服器和分散式集群裡面,建議採用MXNet或者DL4J,如果需要與Hadoop的業務相結合,DL4J或許是最好的選擇。如果只懂C或者C++,不懂python,Caffe或許是你最好的選擇。如果是非商業開發,可以選擇Google的TensorFlow或者是Facebook的Torch,具體需要根據不同的語言進行選擇。對於簡單的教學和demo實驗,我們可以使用Keras去實現簡單的深度學習模型。最後可惜的是在2017年下半年,Yoshua Bengio 宣布 Theano 停止更新維護。


深度學習的框架日新月異,可能上面的總結會有點過時,但是百變不離其中。好好學習一下菜譜,炒個香噴噴,熱辣辣的菜出來震驚一下食神的舞台。


推薦閱讀:

如何評價deepmind放棄torch7選擇tensorflow?
pytorch中的鉤子(Hook)有何作用?

TAG:深度學習DeepLearning | Caffe深度學習框架 | Torch深度學習框架 |