
theano 在深度學習架構中是祖師級的存在。它的開發始于 2007,早期開發者包括傳奇人物 yoshua bengio 和 ian goodfellow。
theano 基于 python,是一個擅長處理多元數組的庫(這方面它類似于 numpy)。當與其他深度學習庫結合起來,它十分适合資料探索。它為執行深度學習中大規模神經網絡算法的運算所設計。其實,它可以被更好地了解為一個數學表達式的編譯器:用符号式語言定義你想要的結果,該架構會對你的程式進行編譯,來高效運作于 gpu 或 cpu。
它與後來出現的 tensorflow 功能十分相似(或者應該說,tensorflow 類似 theano ),因而兩者常常被放在一起比較。它們本身都偏底層,同樣的,theano 像是一個研究平台多過是一個深度學習庫。你需要從底層開始做許多工作,來建立你需要的模型。比方說,theano 沒有神經網絡的分級。
但随着這些年的發展,大量基于 theano 的開源深度學習庫被開發出來,包括 keras, lasagne 和 blocks。這些更高層級的 wrapper api,能大幅減少開發時間以及過程中的麻煩。甚至,據雷鋒網(公衆号:雷鋒網)所知,很少開發者會使用“裸奔”的 theano,多數人需要輔助的 api。順便說一句,theano 是一整套生态系統,别隻用它裸奔,然後抱怨不好用。
在過去的很長一段時間内,theano 是深度學習開發與研究的行業标準。而且,由于出身學界,它最初是為學術研究而設計,這導緻深度學習領域的許多學者至今仍在使用 theano。但随着 tensorflow 在谷歌的支援下強勢崛起,theano 日漸式微,使用的人越來越少。這過程中的标志性事件是:創始者之一的 ian goodfellow 放棄 theano 轉去谷歌開發 tensorflow。
是以,資深一些的開發者往往認為,對于深度學習新手,用theano 練練手并沒有任何壞處。但對于職業開發者,還是建議用 tensorflow。
優點:
python + numpy 的組合
使用計算圖
rnn 與計算圖相容良好
有 keras 和 lasagne 這樣高層的庫
不少開發者反映,它的學習門檻比tensorflow 低
缺點:
本身很底層
比 torch 臃腫
不支援分布式
有的錯誤資訊沒什麼用
大模型的編譯時間有時要很久
對事先訓練過的模型支援不足
用的人越來越少
caffe
這又是一個祖師級的深度學習架構,2013 年就已問世。
它的全稱是 “convolution architecture for feature extraction”,意為“用于特征提取的卷積架構”,很明白地展現了它的用途。caffe 的創始人,是加州大學伯克利分校的中國籍博士生賈揚清。當時賈在伯克利計算機視覺與學習中心做研究。博士畢業後,他先後在谷歌和 facebook 工作。
在 ai 開發者圈子中,caffe 可以說是無人不知、無人不曉。據 github 最新的機器學習項目熱度排名,caffe 僅位列 tensorflow 之後,雄踞第二。它是一個被廣泛使用的機器視覺庫,把 matlab 執行快速卷積網絡的方式帶到 c 和 c++。雖然 caffe 被部分開發者看做是通用架構,但它的設計初衷是計算機視覺——并不适于其他深度學習應用,比如文字、語音識别和處理時間序列資料。
caffe 的主要用途:利用卷積神經網絡進行圖像分類。這方面它代表了業内一流水準,是開發者的首選。
說到 caffe,就不得不提 model zoo。後者是在 caffe 基礎上開發出的一系列模型的彙聚之地。是以,開發者使用 caffe 最大的好處是:能在 model zoo 海量的、事先訓練好的神經網絡中,選擇貼近自己使用需求的直接下載下傳,并立刻就能用。
就雷鋒網所知,這些模型中有很多是世界一流的。有很多它們的教程:
alex’s cifar-10 tutorial with caffe
training lenet on mnist with caffe
imagenet with caffe
業内人士普遍認為,caffe 适合于以實作基礎算法為主要目的的工業應用,有利于快速開發。但對于處理較特殊的任務,它存在靈活性不足的問題——為模型做調整常常需要用 c++ 和 cuda,雖然 python 和 matlab 也能做些小調整。
非常适合前饋神經網絡和圖像處理任務
非常适于利用現有神經網絡
不寫代碼也能訓練模型
python 互動界面做得不錯
需要 c++ 和 cuda 來編寫新 gpu 層級。
在遞歸神經網絡上表現不佳
對于大型神經網絡,它十分繁瑣(googlenet, resnet)
沒有商業支援
torch
相比其他開源架構,torch 是一個非主流。
沒錯,說的就是它的開發語言:基于1990 年代誕生于巴西的 lua,而非機器學習界廣泛采用的 python。其實 lua 和python 都屬于比較容易入門的語言。但後者明顯已經統治了機器學習領域,尤其在學界。而企業界的軟體工程師最熟悉的是 java,對 lua 也比較陌生。這導緻了 torch 推廣的困難。是以,雖然 torch 功能強大,但并不是大衆開發者的菜。
那麼它強大在哪裡?
首先,torch 非常适用于卷積神經網絡。它的開發者認為,torch 的原生互動界面比其他架構用起來更自然、更得心應手。
其次,第三方的擴充工具包提供了豐富的遞歸神經網絡( rnn)模型。
因為這些強項,許多網際網路巨頭開發了定制版的 torch,以助力他們的 ai 研究。這其中包括 facebook、twitter,和被谷歌招安前的 deepmind。
與 caffe 相比,在 torch 裡定義一個新層級比它要容易,因為你不需要寫 c++ 代碼。和 tensorflow 和 theano 比起來,torch 的靈活度更高,因為它是指令式的;而前兩者是陳述式的(declarative),你必須 declare 一個計算圖。這使得在 torch 上進行束搜尋(beam search)這樣的操作要比它們容易得多。
torch 的熱門應用:在增強學習領域,用卷積神經網絡和代理處理圖像問題。
興趣主要在增強學習的開發者, torch 是首選。
靈活度很高
高度子產品化
容易編寫你自己的層級
有很多訓練好的模型
需要學 lua
通常需要自己寫訓練代碼
不适于循環神經網絡
scikit-learn
scikit-learn 是老牌的開源 python 算法架構,始于 2007 年的 google summer of code 項目,最初由 david cournapeau 開發。
它是一個簡潔、高效的算法庫,提供一系列的監督學習和無監督學習的算法,以用于資料挖掘和資料分析。scikit-learn 幾乎覆寫了機器學習的所有主流算法,這為其在 python 開源世界中奠定了江湖地位。
它的算法庫建立在 scipy (scientific python) 之上——你必須先安裝 scipy 才能使用 scikit-learn 。它的架構中一共包括了:
numpy: 基礎的多元數組包
scipy: 科學計算的基礎庫
matplotlib: 全面的 2d/3d 測繪
ipython: 改進的互動控制器
sympy: 符号數學
pandas:資料結構和分析
它命名的由來:scipy 的擴充和子產品在傳統上被命名為 scikits。而提供學習算法的模組就被命名為 scikit-learn。
它與 python 世界另一大算法架構——tensorflow 的主要差別是:tensorflow 更底層。而 scikit-learn 提供了執行機器學習算法的子產品化方案,很多算法模型直接就能用。
經過篩選的、高品質的模型
覆寫了大多數機器學習任務
可擴充至較大的資料規模
使用簡單
靈活性低