現(xiàn)在機(jī)器學(xué)習(xí)逐漸成為行業(yè)熱門(mén),經(jīng)過(guò)二十幾年的發(fā)展,機(jī)器學(xué)習(xí)目前也有了十分廣泛的應(yīng)用,如:數(shù)據(jù)挖掘、計(jì)算機(jī)視覺(jué)、自然語(yǔ)言處理、生物特征識(shí)別、搜索引擎、醫(yī)學(xué)診斷、DNA序列測(cè)序、語(yǔ)音和手寫(xiě)識(shí)別、戰(zhàn)略游戲和機(jī)器人等方面。
云棲社區(qū)特意翻譯整理了目前GitHub上最受歡迎的28款開(kāi)源的機(jī)器學(xué)習(xí)項(xiàng)目,以供開(kāi)發(fā)者參考使用。
1. TensorFlow
TensorFlow 是谷歌發(fā)布的第二代機(jī)器學(xué)習(xí)系統(tǒng)。據(jù)谷歌宣稱,在部分基準(zhǔn)測(cè)試中,TensorFlow的處理速度比第一代的DistBelief加快了2倍之多。
具體的講,TensorFlow是一個(gè)利用數(shù)據(jù)流圖(Data Flow Graphs)進(jìn)行數(shù)值計(jì)算的開(kāi)源軟件庫(kù):圖中的節(jié)點(diǎn)( Nodes)代表數(shù)學(xué)運(yùn)算操作,同時(shí)圖中的邊(Edges)表示節(jié)點(diǎn)之間相互流通的多維數(shù)組,即張量(Tensors)。這種靈活的架構(gòu)可以讓使用者在多樣化的將計(jì)算部署在臺(tái)式機(jī)、服務(wù)器或者移動(dòng)設(shè)備的一個(gè)或多個(gè)CPU上,而且無(wú)需重寫(xiě)代碼;同時(shí)任一基于梯度的機(jī)器學(xué)習(xí)算法均可夠借鑒TensorFlow的自動(dòng)分化(Auto-differentiation);此外通過(guò)靈活的Python接口,要在TensorFlow中表達(dá)想法也變得更為簡(jiǎn)單。
TensorFlow最初由Google Brain小組(該小組隸屬于Google's Machine Intelligence研究機(jī)構(gòu))的研究員和工程師開(kāi)發(fā)出來(lái)的,開(kāi)發(fā)目的是用于進(jìn)行機(jī)器學(xué)習(xí)和深度神經(jīng)網(wǎng)絡(luò)的研究。但該系統(tǒng)的通用性足以使其廣泛用于其他計(jì)算領(lǐng)域。
目前Google 內(nèi)部已在大量使用 AI 技術(shù),包括 Google App 的語(yǔ)音識(shí)別、Gmail 的自動(dòng)回復(fù)功能、Google Photos 的圖片搜索等都在使用 TensorFlow 。
開(kāi)發(fā)語(yǔ)言:C++
許可協(xié)議:Apache License 2.0
GitHub項(xiàng)目地址:https://github.com/tensorflow/tensorflow
2. Scikit-Learn
Scikit-Learn是用于機(jī)器學(xué)習(xí)的Python 模塊,它建立在SciPy之上。該項(xiàng)目由David Cournapeau 于2007年創(chuàng)立,當(dāng)時(shí)項(xiàng)目名為Google Summer of Code,自此之后,眾多志愿者都為此做出了貢獻(xiàn)。
主要特點(diǎn):
操作簡(jiǎn)單、高效的數(shù)據(jù)挖掘和數(shù)據(jù)分析
無(wú)訪問(wèn)限制,在任何情況下可重新使用
建立在NumPy、SciPy 和 matplotlib基礎(chǔ)上
Scikit-Learn的基本功能主要被分為六個(gè)部分:分類、回歸、聚類、數(shù)據(jù)降維、模型選擇、數(shù)據(jù)預(yù)處理,具體可以參考官方網(wǎng)站上的文檔。經(jīng)過(guò)測(cè)試,Scikit-Learn可在 Python 2.6、Python 2.7 和 Python 3.5上運(yùn)行。除此之外,它也應(yīng)該可在Python 3.3和Python 3.4上運(yùn)行。
注:Scikit-Learn以前被稱為Scikits.Learn。
開(kāi)發(fā)語(yǔ)言:Python
許可協(xié)議:3-Clause BSD license
GitHub項(xiàng)目地址:https://github.com/scikit-learn/scikit-learn
3.Caffe
Caffe 是由神經(jīng)網(wǎng)絡(luò)中的表達(dá)式、速度、及模塊化產(chǎn)生的深度學(xué)習(xí)框架。后來(lái)它通過(guò)伯克利視覺(jué)與學(xué)習(xí)中心((BVLC)和社區(qū)參與者的貢獻(xiàn),得以發(fā)展形成了以一個(gè)伯克利主導(dǎo),然后加之Github和Caffe-users郵件所組成的一個(gè)比較松散和自由的社區(qū)。
Caffe是一個(gè)基于C++/CUDA架構(gòu)框架,開(kāi)發(fā)者能夠利用它自由的組織網(wǎng)絡(luò),目前支持卷積神經(jīng)網(wǎng)絡(luò)和全連接神經(jīng)網(wǎng)絡(luò)(人工神經(jīng)網(wǎng)絡(luò))。在Linux上,C++可以通過(guò)命令行來(lái)操作接口,對(duì)于MATLAB、Python也有專門(mén)的接口,運(yùn)算上支持CPU和GPU直接無(wú)縫切換。
Caffe的特點(diǎn)
易用性:Caffe的模型與相應(yīng)優(yōu)化都是以文本形式而非代碼形式給出, Caffe給出了模型的定義、最優(yōu)化設(shè)置以及預(yù)訓(xùn)練的權(quán)重,方便快速使用;
速度快:能夠運(yùn)行最棒的模型與海量的數(shù)據(jù);
Caffe可與cuDNN結(jié)合使用,可用于測(cè)試AlexNet模型,在K40上處理一張圖片只需要1.17ms;
模塊化:便于擴(kuò)展到新的任務(wù)和設(shè)置上;
使用者可通過(guò)Caffe提供的各層類型來(lái)定義自己的模型;
目前Caffe應(yīng)用實(shí)踐主要有數(shù)據(jù)整理、設(shè)計(jì)網(wǎng)絡(luò)結(jié)構(gòu)、訓(xùn)練結(jié)果、基于現(xiàn)有訓(xùn)練模型,使用Caffe直接識(shí)別。
開(kāi)發(fā)語(yǔ)言:C++
許可協(xié)議: BSD 2-Clause license
GitHub項(xiàng)目地址:https://github.com/BVLC/caffe
4. PredictionIO
PredictionIO 是面向開(kāi)發(fā)人員和數(shù)據(jù)科學(xué)家的開(kāi)源機(jī)器學(xué)習(xí)服務(wù)器。它支持事件采集、算法調(diào)度、評(píng)估,以及經(jīng)由REST APIs的預(yù)測(cè)結(jié)果查詢。使用者可以通過(guò)PredictionIO做一些預(yù)測(cè),比如個(gè)性化推薦、發(fā)現(xiàn)內(nèi)容等。PredictionIO 提供20個(gè)預(yù)設(shè)算法,開(kāi)發(fā)者可以直接將它們運(yùn)行于自己的數(shù)據(jù)上。幾乎任何應(yīng)用與PredictionIO集成都可以變得更“聰明”。其主要特點(diǎn)如下所示:
基于已有數(shù)據(jù)可預(yù)測(cè)用戶行為;
使用者可選擇你自己的機(jī)器學(xué)習(xí)算法;
無(wú)需擔(dān)心可擴(kuò)展性,擴(kuò)展性好。
PredictionIO 基于 REST API(應(yīng)用程序接口)標(biāo)準(zhǔn),不過(guò)它還包含 Ruby、Python、Scala、Java 等編程語(yǔ)言的 SDK(軟件開(kāi)發(fā)工具包)。其開(kāi)發(fā)語(yǔ)言是Scala語(yǔ)言,數(shù)據(jù)庫(kù)方面使用的是MongoDB數(shù)據(jù)庫(kù),計(jì)算系統(tǒng)采用Hadoop系統(tǒng)架構(gòu)。
開(kāi)發(fā)語(yǔ)言:Scala
許可協(xié)議:Apache License 2.0
GitHub項(xiàng)目地址:https://github.com/PredictionIO/PredictionIO
5. Brain
Brain是 JavaScript 中的 神經(jīng)網(wǎng)絡(luò)庫(kù)。以下例子說(shuō)明使用Brain來(lái)近似 XOR 功能:
var net = new brain.NeuralNetwork();net.train([{input: [0, 0], output: [0]},{input: [0, 1], output: [1]},{input: [1, 0], output: [1]},{input: [1, 1], output: [0]}]);var output = net.run([1, 0]);// [0.987]
當(dāng) brain 用于節(jié)點(diǎn)中,可使用npm安裝:
npm install brain
當(dāng) brain 用于瀏覽器,下載最新的 brain.js 文件。訓(xùn)練計(jì)算代價(jià)比較昂貴,所以應(yīng)該離線訓(xùn)練網(wǎng)絡(luò)(或者在 Worker 上),并使用 toFunction()或者toJSON()選項(xiàng),以便將預(yù)訓(xùn)練網(wǎng)絡(luò)插入到網(wǎng)站中。
開(kāi)發(fā)語(yǔ)言:JavaScript
GitHub項(xiàng)目地址:https://github.com/harthur/brain
6. Keras
Keras是極其精簡(jiǎn)并高度模塊化的神經(jīng)網(wǎng)絡(luò)庫(kù),在TensorFlow 或 Theano 上都能夠運(yùn)行,是一個(gè)高度模塊化的神經(jīng)網(wǎng)絡(luò)庫(kù),支持GPU和CPU運(yùn)算。Keras可以說(shuō)是Python版的Torch7,對(duì)于快速構(gòu)建CNN模型非常方便,同時(shí)也包含了一些最新文獻(xiàn)的算法,比如Batch Noramlize,文檔教程也很全,在官網(wǎng)上作者都是直接給例子淺顯易懂。Keras也支持保存訓(xùn)練好的參數(shù),然后加載已經(jīng)訓(xùn)練好的參數(shù),進(jìn)行繼續(xù)訓(xùn)練。
Keras側(cè)重于開(kāi)發(fā)快速實(shí)驗(yàn),用可能最少延遲實(shí)現(xiàn)從理念到結(jié)果的轉(zhuǎn)變,即為做好一項(xiàng)研究的關(guān)鍵。
當(dāng)需要如下要求的深度學(xué)習(xí)的庫(kù)時(shí),就可以考慮使用Keras:
考慮到簡(jiǎn)單快速的原型法(通過(guò)總體模塊性、精簡(jiǎn)性以及可擴(kuò)展性);
同時(shí)支持卷積網(wǎng)絡(luò)和遞歸網(wǎng)絡(luò),以及兩者之間的組合;
支持任意連接方案(包括多輸入多輸出訓(xùn)練);
可在CPU 和 GPU 上無(wú)縫運(yùn)行。
Keras目前支持 Python 2.7-3.5。
開(kāi)發(fā)語(yǔ)言:Python
GitHub項(xiàng)目地址:https://github.com/fchollet/keras
7. CNTK
CNTK(Computational Network Toolkit )是一個(gè)統(tǒng)一的深度學(xué)習(xí)工具包,該工具包通過(guò)一個(gè)有向圖將神經(jīng)網(wǎng)絡(luò)描述為一系列計(jì)算步驟。在有向圖中,葉節(jié)點(diǎn)表示輸入值或網(wǎng)絡(luò)參數(shù),其他節(jié)點(diǎn)表示該節(jié)點(diǎn)輸入之上的矩陣運(yùn)算。
CNTK 使得實(shí)現(xiàn)和組合如前饋型神經(jīng)網(wǎng)絡(luò)DNN、卷積神經(jīng)網(wǎng)絡(luò)(CNN)和循環(huán)神經(jīng)網(wǎng)絡(luò)(RNNs/LSTMs)等流行模式變得非常容易。同時(shí)它實(shí)現(xiàn)了跨多GPU 和服務(wù)器自動(dòng)分化和并行化的隨機(jī)梯度下降(SGD,誤差反向傳播)學(xué)習(xí)。
下圖將CNTK的處理速度(每秒處理的幀數(shù))和其他四個(gè)知名的工具包做了比較了。配置采用的是四層全連接的神經(jīng)網(wǎng)絡(luò)(參見(jiàn)基準(zhǔn)測(cè)試腳本)和一個(gè)大小是8192 的高效mini batch。在相同的硬件和相應(yīng)的最新公共軟件版本(2015.12.3前的版本)的基礎(chǔ)上得到如下結(jié)果:
CNTK自2015年四月就已開(kāi)源。
開(kāi)發(fā)語(yǔ)言:C++
GitHub項(xiàng)目地址:https://github.com/Microsoft/CNTK
8. Convnetjs
ConvNetJS是利用Javascript實(shí)現(xiàn)的神經(jīng)網(wǎng)絡(luò),同時(shí)還具有非常不錯(cuò)的基于瀏覽器的Demo。它最重要的用途是幫助深度學(xué)習(xí)初學(xué)者更快、更直觀的理解算法。
它目前支持:
常見(jiàn)的神經(jīng)網(wǎng)絡(luò)模塊(全連接層,非線性);
分類(SVM/ SOFTMAX)和回歸(L2)的成本函數(shù);
指定和訓(xùn)練圖像處理的卷積網(wǎng)絡(luò);
基于Deep Q Learning的實(shí)驗(yàn)強(qiáng)化學(xué)習(xí)模型。
一些在線示例:
Convolutional Neural Network on MNIST digits
Convolutional Neural Network on CIFAR-10
Toy 2D data
Toy 1D regression
Training an Autoencoder on MNIST digits
Deep Q Learning Reinforcement Learning demo+Image Regression ("Painting")+Comparison of SGD/Adagrad/Adadelta on MNIST開(kāi)發(fā)語(yǔ)言:Javascript 許可協(xié)議:MIT License GitHub項(xiàng)目地址:https://github.com/karpathy/convnetjs
9. Pattern
Pattern是Python的一個(gè)Web挖掘模塊。擁有以下工具:
數(shù)據(jù)挖掘:網(wǎng)絡(luò)服務(wù)(Google、Twitter、Wikipedia)、網(wǎng)絡(luò)爬蟲(chóng)、HTML DOM解析;
自然語(yǔ)言處理:詞性標(biāo)注工具(Part-Of-Speech Tagger)、N元搜索(n-gram search)、情感分析(sentiment analysis)、WordNet;
機(jī)器學(xué)習(xí):向量空間模型、聚類、分類(KNN、SVM、 Perceptron);
網(wǎng)絡(luò)分析:圖形中心性和可視化。
其文檔完善,目前擁有50多個(gè)案例和350多個(gè)單元測(cè)試。 Pattern目前只支持Python 2.5+(尚不支持Python 3),該模塊除了在Pattern.vector模塊中使用LSA外沒(méi)有其他任何外部要求,因此只需安裝 NumPy (僅在Mac OS X上默認(rèn)安裝)。
開(kāi)發(fā)語(yǔ)言:Python
許可協(xié)議:BSD license
GitHub項(xiàng)目地址:https://github.com/clips/pattern
10. NuPIC
NuPIC是一個(gè)實(shí)現(xiàn)了HTM學(xué)習(xí)算法的機(jī)器智能平臺(tái)。HTM是一個(gè)關(guān)于新(大腦)皮質(zhì)(Neocortex)的詳細(xì)人工智能算法。HTM的核心是基于時(shí)間的連續(xù)學(xué)習(xí)算法,該算法可以存儲(chǔ)和調(diào)用時(shí)間和空間兩種模式。NuPIC可以適用于解決各類問(wèn)題,尤其是異常檢測(cè)和流數(shù)據(jù)源預(yù)測(cè)方面。
NuPIC Binaries文件目前可用于:
Linux x86 64bit
OS X 10.9
OS X 10.10
Windows 64bit
NuPIC 有自己的獨(dú)特之處。許多機(jī)器學(xué)習(xí)算法無(wú)法適應(yīng)新模式,而NuPIC的運(yùn)作接近于人腦,當(dāng)模式變化的時(shí)候,它會(huì)忘掉舊模式,記憶新模式。
開(kāi)發(fā)語(yǔ)言:Python
GitHub項(xiàng)目地址:https://github.com/numenta/nupic
11. Theano
Theano是一個(gè)Python庫(kù),它允許使用者有效地定義、優(yōu)化和評(píng)估涉及多維數(shù)組的數(shù)學(xué)表達(dá)式,同時(shí)支持GPUs和高效符號(hào)分化操作。Theano具有以下特點(diǎn):
與NumPy緊密相關(guān)--在Theano的編譯功能中使用了Numpy.ndarray ;
透明地使用GPU--執(zhí)行數(shù)據(jù)密集型計(jì)算比CPU快了140多倍(針對(duì)Float32);
高效符號(hào)分化--Theano將函數(shù)的導(dǎo)數(shù)分為一個(gè)或多個(gè)不同的輸入;
速度和穩(wěn)定性的優(yōu)化--即使輸入的x非常小也可以得到log(1+x)正確結(jié)果;
動(dòng)態(tài)生成 C代碼--表達(dá)式計(jì)算更快;
廣泛的單元測(cè)試和自我驗(yàn)證--多種錯(cuò)誤類型的檢測(cè)和判定。
自2007年起,Theano一直致力于大型密集型科學(xué)計(jì)算研究,但它目前也很被廣泛應(yīng)用在課堂之上( 如Montreal大學(xué)的深度學(xué)習(xí)/機(jī)器學(xué)習(xí)課程)。
開(kāi)發(fā)語(yǔ)言:Python
GitHub項(xiàng)目地址:https://github.com/Theano/Theano
12. MXNet
MXNet是一個(gè)兼具效率和靈活性的深度學(xué)習(xí)框架。它允許使用者將符號(hào)編程和命令式編程相結(jié)合,以追求效率和生產(chǎn)力的最大化。其核心是動(dòng)態(tài)依賴調(diào)度程序,該程序可以動(dòng)態(tài)自動(dòng)進(jìn)行并行化符號(hào)和命令的操作。其中部署的圖形優(yōu)化層使得符號(hào)操作更快和內(nèi)存利用率更高。該庫(kù)輕量且便攜帶,并且可擴(kuò)展到多個(gè)GPU和多臺(tái)主機(jī)上。
主要特點(diǎn):
其設(shè)計(jì)說(shuō)明提供了有用的見(jiàn)解,可以被重新應(yīng)用到其他DL項(xiàng)目中;
任意計(jì)算圖的靈活配置;
整合了各種編程方法的優(yōu)勢(shì)最大限度地提高靈活性和效率;
輕量、高效的內(nèi)存以及支持便攜式的智能設(shè)備;
多GPU擴(kuò)展和分布式的自動(dòng)并行化設(shè)置;
支持Python、R、C++和 Julia;
對(duì)“云計(jì)算”友好,直接兼容S3、HDFS和Azure。
MXNet不僅僅是一個(gè)深度學(xué)習(xí)項(xiàng)目,它更是一個(gè)建立深度學(xué)習(xí)系統(tǒng)的藍(lán)圖、指導(dǎo)方針以及黑客們對(duì)深度學(xué)習(xí)系統(tǒng)獨(dú)特見(jiàn)解的結(jié)合體。
開(kāi)發(fā)語(yǔ)言:Jupyter Notebook
開(kāi)源許可:Apache-2.0license
GitHub項(xiàng)目地址:https://github.com/dmlc/mxnet
13. Vowpal Wabbit
Vowpal Wabbit是一個(gè)機(jī)器學(xué)習(xí)系統(tǒng),該系統(tǒng)推動(dòng)了如在線、散列、Allreduce、Learning2search、等方面機(jī)器學(xué)習(xí)前沿技術(shù)的發(fā)展。 其訓(xùn)練速度很快,在20億條訓(xùn)練樣本,每個(gè)訓(xùn)練樣本大概100個(gè)非零特征的情況下:如果特征的總位數(shù)為一萬(wàn)時(shí),訓(xùn)練時(shí)間為20分鐘;特征總位數(shù)為1000萬(wàn)時(shí),訓(xùn)練時(shí)間為2個(gè)小時(shí)。Vowpal Wabbit支持分類、 回歸、矩陣分解和LDA。
當(dāng)在Hadoop上運(yùn)行Vowpal Wabbit時(shí),有以下優(yōu)化機(jī)制:
懶惰初始化:在進(jìn)行All Reduce之前,可將全部數(shù)據(jù)加載到內(nèi)存中并進(jìn)行緩存。即使某一節(jié)點(diǎn)出現(xiàn)了錯(cuò)誤,也可以通過(guò)在另外一個(gè)節(jié)點(diǎn)上使用錯(cuò)誤節(jié)點(diǎn)的數(shù)據(jù)(通過(guò)緩存來(lái)獲?。﹣?lái)繼續(xù)訓(xùn)練。
Speculative Execution:在大規(guī)模集群當(dāng)中,一兩個(gè)很慢的Mapper會(huì)影響整個(gè)Job的性能。Speculative Execution的思想是當(dāng)大部分節(jié)點(diǎn)的任務(wù)完成時(shí),Hadoop可以將剩余節(jié)點(diǎn)上的任務(wù)拷貝到其他節(jié)點(diǎn)完成。
開(kāi)發(fā)語(yǔ)言:C++
GitHub項(xiàng)目地址:https://github.com/JohnLangford/vowpal_wabbit
14. Ruby Warrior
通過(guò)設(shè)計(jì)了一個(gè)游戲使得Ruby語(yǔ)言和人工智能學(xué)習(xí)更加有樂(lè)趣和互動(dòng)起來(lái)。
使用者扮演了一個(gè)勇士通過(guò)爬上一座高塔,到達(dá)頂層獲取珍貴的紅寶石(Ruby)。在每一層,需要寫(xiě)一個(gè)Ruby腳本指導(dǎo)戰(zhàn)士打敗敵人、營(yíng)救俘虜、到達(dá)樓梯。使用者對(duì)每一層都有一些認(rèn)識(shí),但是你永遠(yuǎn)都不知道每層具體會(huì)發(fā)生什么情況。你必須給戰(zhàn)士足夠的人工智能,以便讓其自行尋找應(yīng)對(duì)的方式。
勇士的動(dòng)作相關(guān)API:
Warrior.walk: 用來(lái)控制勇士的移動(dòng),默認(rèn)方向是往前;
warrior.feel:使用勇士來(lái)感知前方的情況,比如是空格,還是有怪物;
Warrior.attack:讓勇士對(duì)怪物進(jìn)行攻擊;
Warrior.health:獲取勇士當(dāng)前的生命值;
Warrior.rest:讓勇士休息一回合,恢復(fù)最大生命值的10%。
勇士的感知API:
Space.empty:感知前方是否是空格;
Space.stairs:感知前方是否是樓梯;
Space.enemy: 感知前方是否有怪物;
Space.captive:感知前方是否有俘虜;
Space.wall:感知前方是否是墻壁。
開(kāi)發(fā)語(yǔ)言:Ruby
GitHub項(xiàng)目地址:https://github.com/ryanb/ruby-warrior
以上為GitHub上最流行的開(kāi)源機(jī)器學(xué)習(xí)項(xiàng)目TOP14,“28款GitHub最流行的開(kāi)源機(jī)器學(xué)習(xí)項(xiàng)目(二)”。
評(píng)論