天天看點

28款GitHub最流行的開源機器學習項目(一):TensorFlow排榜首

現在機器學習逐漸成為行業熱門,經過二十幾年的發展,機器學習目前也有了十分廣泛的應用,如:資料挖掘、計算機視覺、自然語言處理、生物特征識别、搜尋引擎、醫學診斷、dna序列測序、語音和手寫識别、戰略遊戲和機器人等方面。

雲栖社群特意翻譯整理了目前github上最受歡迎的28款開源的機器學習項目,以供開發者參考使用。

28款GitHub最流行的開源機器學習項目(一):TensorFlow排榜首

tensorflow 是谷歌釋出的第二代機器學習系統。據谷歌宣稱,在部分基準測試中,tensorflow的處理速度比第一代的distbelief加快了2倍之多。

具體的講,tensorflow是一個利用資料流圖(data flow graphs)進行數值計算的開源軟體庫:圖中的節點( nodes)代表數學運算操作,同時圖中的邊(edges)表示節點之間互相流通的多元數組,即張量(tensors)。這種靈活的架構可以讓使用者在多樣化的将計算部署在桌上型電腦、伺服器或者移動裝置的一個或多個cpu上,而且無需重寫代碼;同時任一基于梯度的機器學習算法均可夠借鑒tensorflow的自動分化(auto-differentiation);此外通過靈活的python接口,要在tensorflow中表達想法也變得更為簡單。

tensorflow最初由google brain小組(該小組隸屬于google's machine intelligence研究機構)的研究員和工程師開發出來的,開發目的是用于進行機器學習和深度神經網絡的研究。但該系統的通用性足以使其廣泛用于其他計算領域。

目前google 内部已在大量使用 ai 技術,包括 google app 的語音識别、gmail 的自動回複功能、google photos 的圖檔搜尋等都在使用 tensorflow 。

開發語言:c++

許可協定:apache license 2.0

scikit-learn是用于機器學習的python 子產品,它建立在scipy之上。該項目由david cournapeau 于2007年創立,當時項目名為google summer of code,自此之後,衆多志願者都為此做出了貢獻。

主要特點:

操作簡單、高效的資料挖掘和資料分析

無通路限制,在任何情況下可重新使用

建立在numpy、scipy 和 matplotlib基礎上

scikit-learn的基本功能主要被分為六個部分:分類、回歸、聚類、資料降維、模型選擇、資料預處理,具體可以參考官方網站上的文檔。經過測試,scikit-learn可在 python 2.6、python 2.7 和 python 3.5上運作。除此之外,它也應該可在python 3.3和python 3.4上運作。

注:scikit-learn以前被稱為scikits.learn。

開發語言:python

許可協定:3-clause bsd license

caffe 是由神經網絡中的表達式、速度、及子產品化産生的深度學習架構。後來它通過伯克利視覺與學習中心((bvlc)和社群參與者的貢獻,得以發展形成了以一個伯克利主導,然後加之github和caffe-users郵件所組成的一個比較松散和自由的社群。

caffe是一個基于c++/cuda架構架構,開發者能夠利用它自由的組織網絡,目前支援卷積神經網絡和全連接配接神經網絡(人工神經網絡)。在linux上,c++可以通過指令行來操作接口,對于matlab、python也有專門的接口,運算上支援cpu和gpu直接無縫切換。

易用性:caffe的模型與相應優化都是以文本形式而非代碼形式給出, caffe給出了模型的定義、最優化設定以及預訓練的權重,友善快速使用;

速度快:能夠運作最棒的模型與海量的資料;

caffe可與cudnn結合使用,可用于測試alexnet模型,在k40上處理一張圖檔隻需要1.17ms;

子產品化:便于擴充到新的任務和設定上;

使用者可通過caffe提供的各層類型來定義自己的模型;

目前caffe應用實踐主要有資料整理、設計網絡結構、訓練結果、基于現有訓練模型,使用caffe直接識别。

許可協定: bsd 2-clause license

predictionio 是面向開發人員和資料科學家的開源機器學習伺服器。它支援事件采集、算法排程、評估,以及經由rest apis的預測結果查詢。使用者可以通過predictionio做一些預測,比如個性化推薦、發現内容等。predictionio 提供20個預設算法,開發者可以直接将它們運作于自己的資料上。幾乎任何應用與predictionio內建都可以變得更“聰明”。其主要特點如下所示:

基于已有資料可預測使用者行為;

使用者可選擇你自己的機器學習算法;

無需擔心可擴充性,擴充性好。

predictionio 基于 rest api(應用程式接口)标準,不過它還包含 ruby、python、scala、java 等程式設計語言的 sdk(軟體開發工具包)。其開發語言是scala語言,資料庫方面使用的是mongodb資料庫,計算系統采用hadoop系統架構。

開發語言:scala

許可協定: apache license 2.0

brain是 javascript 中的 神經網絡庫。以下例子說明使用brain來近似 xor 功能:

<code></code>

<code>var output = net.run([1, 0]); // [0.987]</code>

當 brain 用于節點中,可使用npm安裝:

當 brain 用于浏覽器,下載下傳最新的 brain.js 檔案。訓練計算代價比較昂貴,是以應該離線訓練網絡(或者在 worker 上),并使用 tofunction() 或者 tojson()選項,以便将預訓練網絡插入到網站中。

開發語言:javascript

keras是極其精簡并高度子產品化的神經網絡庫,在tensorflow 或 theano 上都能夠運作,是一個高度子產品化的神經網絡庫,支援gpu和cpu運算。keras可以說是python版的torch7,對于快速建構cnn模型非常友善,同時也包含了一些最新文獻的算法,比如batch noramlize,文檔教程也很全,在官網上作者都是直接給例子淺顯易懂。keras也支援儲存訓練好的參數,然後加載已經訓練好的參數,進行繼續訓練。

keras側重于開發快速實驗,用可能最少延遲實作從理念到結果的轉變,即為做好一項研究的關鍵。

當需要如下要求的深度學習的庫時,就可以考慮使用keras:

考慮到簡單快速的原型法(通過總體子產品性、精簡性以及可擴充性);

同時支援卷積網絡和遞歸網絡,以及兩者之間的組合;

支援任意連接配接方案(包括多輸入多輸出訓練);

可在cpu 和 gpu 上無縫運作。

keras目前支援 python 2.7-3.5。

cntk(computational network toolkit )是一個統一的深度學習工具包,該工具包通過一個有向圖将神經網絡描述為一系列計算步驟。在有向圖中,葉節點表示輸入值或網絡參數,其他節點表示該節點輸入之上的矩陣運算。

cntk 使得實作群組合如前饋型神經網絡dnn、卷積神經網絡(cnn)和循環神經網絡(rnns/lstms)等流行模式變得非常容易。同時它實作了跨多gpu 和伺服器自動分化和并行化的随機梯度下降(sgd,誤差反向傳播)學習。

下圖将cntk的處理速度(每秒處理的幀數)和其他四個知名的工具包做了比較了。配置采用的是四層全連接配接的神經網絡(參見基準測試腳本)和一個大小是8192 的高效mini batch。在相同的硬體和相應的最新公共軟體版本(2015.12.3前的版本)的基礎上得到如下結果:

28款GitHub最流行的開源機器學習項目(一):TensorFlow排榜首

cntk自2015年四月就已開源。

convnetjs是利用javascript實作的神經網絡,同時還具有非常不錯的基于浏覽器的demo。它最重要的用途是幫助深度學習初學者更快、更直覺的了解算法。

它目前支援:

常見的神經網絡子產品(全連接配接層,非線性);

分類(svm/ softmax)和回歸(l2)的成本函數;

指定和訓練圖像處理的卷積網絡;

基于deep q learning的實驗強化學習模型。

<a href="http://cs.stanford.edu/~karpathy/convnetjs/demo/mnist.html">convolutional neural network on mnist digits</a>

<a href="http://cs.stanford.edu/~karpathy/convnetjs/demo/cifar10.html">convolutional neural network on cifar-10</a>

<a href="http://cs.stanford.edu/~karpathy/convnetjs/demo/classify2d.html">toy 2d data</a>

<a href="http://cs.stanford.edu/~karpathy/convnetjs/demo/regression.html">toy 1d regression</a>

<a href="http://cs.stanford.edu/~karpathy/convnetjs/demo/autoencoder.html">training an autoencoder on mnist digits</a>

<a href="http://cs.stanford.edu/people/karpathy/convnetjs/demo/rldemo.html">deep q learning reinforcement learning demo</a>

許可協定:mit license

28款GitHub最流行的開源機器學習項目(一):TensorFlow排榜首

pattern是python的一個web挖掘子產品。擁有以下工具:

資料挖掘:網絡服務(google、twitter、wikipedia)、網絡爬蟲、html dom解析;

自然語言處理:詞性标注工具(part-of-speech tagger)、n元搜尋(n-gram search)、情感分析(sentiment analysis)、wordnet;

機器學習:向量空間模型、聚類、分類(knn、svm、 perceptron);

網絡分析:圖形中心性和可視化。

其文檔完善,目前擁有50多個案例和350多個單元測試。 pattern目前隻支援python 2.5+(尚不支援python 3),該子產品除了在pattern.vector子產品中使用lsa外沒有其他任何外部要求,是以隻需安裝 numpy (僅在mac os x上預設安裝)。

許可協定:bsd license

28款GitHub最流行的開源機器學習項目(一):TensorFlow排榜首

nupic是一個實作了htm學習算法的機器智能平台。htm是一個關于新(大腦)皮質(neocortex)的詳細人工智能算法。htm的核心是基于時間的連續學習算法,該算法可以存儲和調用時間和空間兩種模式。nupic可以适用于解決各類問題,尤其是異常檢測和流資料源預測方面。

nupic binaries檔案目前可用于:

linux x86 64bit

os x 10.9

os x 10.10

windows 64bit

nupic 有自己的獨特之處。許多機器學習算法無法适應新模式,而nupic的運作接近于人腦,當模式變化的時候,它會忘掉舊模式,記憶新模式。

theano是一個python庫,它允許使用者有效地定義、優化和評估涉及多元數組的數學表達式,同時支援gpus和高效符号分化操作。theano具有以下特點:

與numpy緊密相關--在theano的編譯功能中使用了numpy.ndarray ;

透明地使用gpu--執行資料密集型計算比cpu快了140多倍(針對float32);

高效符号分化--theano将函數的導數分為一個或多個不同的輸入;

速度和穩定性的優化--即使輸入的x非常小也可以得到log(1+x)正确結果;

動态生成 c代碼--表達式計算更快;

廣泛的單元測試和自我驗證--多種錯誤類型的檢測和判定。

自2007年起,theano一直緻力于大型密集型科學計算研究,但它目前也很被廣泛應用在課堂之上( 如montreal大學的深度學習/機器學習課程)。

28款GitHub最流行的開源機器學習項目(一):TensorFlow排榜首

mxnet是一個兼具效率和靈活性的深度學習架構。它允許使用者将符号程式設計和指令式程式設計相結合,以追求效率和生産力的最大化。其核心是動态依賴排程程式,該程式可以動态自動進行并行化符号和指令的操作。其中部署的圖形優化層使得符号操作更快和記憶體使用率更高。該庫輕量且便攜帶,并且可擴充到多個gpu和多台主機上。

其設計說明提供了有用的見解,可以被重新應用到其他dl項目中;

任意計算圖的靈活配置;

整合了各種程式設計方法的優勢最大限度地提高靈活性和效率;

輕量、高效的記憶體以及支援便攜式的智能裝置;

多gpu擴充和分布式的自動并行化設定;

支援python、r、c++和 julia;

對“雲計算”友好,直接相容s3、hdfs和azure。

mxnet不僅僅是一個深度學習項目,它更是一個建立深度學習系統的藍圖、指導方針以及黑客們對深度學習系統獨特見解的結合體。

開發語言:jupyter notebook

開源許可:apache-2.0 license

vowpal wabbit是一個機器學習系統,該系統推動了如線上、散列、allreduce、learning2search、等方面機器學習前沿技術的發展。 其訓練速度很快,在20億條訓練樣本,每個訓練樣本大概100個非零特征的情況下:如果特征的總位數為一萬時,訓練時間為20分鐘;特征總位數為1000萬時,訓練時間為2個小時。vowpal wabbit支援分類、 回歸、矩陣分解和lda。

當在hadoop上運作vowpal wabbit時,有以下優化機制:

懶惰初始化:在進行all reduce之前,可将全部資料加載到記憶體中并進行緩存。即使某一節點出現了錯誤,也可以通過在另外一個節點上使用錯誤節點的資料(通過緩存來擷取)來繼續訓練。

speculative execution:在大規模叢集當中,一兩個很慢的mapper會影響整個job的性能。speculative execution的思想是當大部分節點的任務完成時,hadoop可以将剩餘節點上的任務拷貝到其他節點完成。

通過設計了一個遊戲使得ruby語言和人工智能學習更加有樂趣和互動起來。

使用者扮演了一個勇士通過爬上一座高塔,到達頂層擷取珍貴的紅寶石(ruby)。在每一層,需要寫一個ruby腳本指導戰士打敗敵人、營救俘虜、到達樓梯。使用者對每一層都有一些認識,但是你永遠都不知道每層具體會發生什麼情況。你必須給戰士足夠的人工智能,以便讓其自行尋找應對的方式。

勇士的動作相關api:

warrior.walk: 用來控制勇士的移動,預設方向是往前;

warrior.feel:使用勇士來感覺前方的情況,比如是空格,還是有怪物;

warrior.attack:讓勇士對怪物進行攻擊;

warrior.health:擷取勇士目前的生命值;

warrior.rest:讓勇士休息一回合,恢複最大生命值的10%。

space.empty:感覺前方是否是空格;

space.stairs:感覺前方是否是樓梯;

space.enemy: 感覺前方是否有怪物;

space.captive:感覺前方是否有俘虜;

space.wall:感覺前方是否是牆壁。

開發語言:ruby

譯者:劉崇鑫 校對:王殿進