毫無疑問,神經(jīng)網(wǎng)絡和機器學習在過去幾年一直是高科技領域最熱門的話題之一。這一點很容易看出,因為它們解決了很多真正有趣的用例,如語音識別、圖像識別、甚至是樂曲譜寫。
PyBrain的概念是將一系列的數(shù)據(jù)處理的算法封裝到被稱之為Module的模塊中。一個最小的Module通常包含基于機器學習算法的可調(diào)整的參數(shù)集合。Modules包含一個輸入和輸出的buffer,外加誤差buffer用于存在誤差反向傳播的場景。
Modules被嵌入到Network類中,并且使用ConnecTIon對象進行連接,其中可能包含一系列可調(diào)整的參數(shù),比如連接的權重。而Network類本身又是一個Module,因此可以基于此構建多層網(wǎng)絡結構。庫中有快捷的方式構造最常用網(wǎng)絡結構,但原則上這個系統(tǒng)允許嵌入最隨機的連接方式來形成一個無循環(huán)圖。
網(wǎng)絡中的參數(shù)通過Trainer進行調(diào)節(jié),它從Dataset中學習到最優(yōu)化的參數(shù)。還有的增強方式的實驗是通過相關的最優(yōu)化的目標構造模擬環(huán)境進行參數(shù)學習。
Python是最好的編程語言之一,在科學計算中用途廣泛:計算機視覺、人工智能、數(shù)學、天文等。它同樣適用于機器學習也是意料之中的事。
當然,它也有些缺點;其中一個是工具和庫過于分散。如果你是擁有unix思維(unix-minded)的人,你會覺得每個工具只做一件事并且把它做好是非常方便的。但是你也需要知道不同庫和工具的優(yōu)缺點,這樣在構建系統(tǒng)時才能做出合理的決策。工具本身不能改善系統(tǒng)或產(chǎn)品,但是使用正確的工具,我們可以工作得更高效,生產(chǎn)率更高。因此了解正確的工具,對你的工作領域是非常重要的。
在我看來,Python是學習(和實現(xiàn))機器學習技術最好的語言之一,其原因主要有以下幾點:
語言簡單:如今,Python成為新手程序員首選語言的主要原因是它擁有簡單的語法和龐大的社區(qū)。
功能強大:語法簡單并不意味著它功能薄弱。Python同樣也是數(shù)據(jù)科學家和Web程序員最受歡迎的語言之一。Python社區(qū)所創(chuàng)建的庫可以讓你做任何你想做的事,包括機器學習。
豐富的ML庫:目前有大量面向Python的機器學習庫。你可以根據(jù)你的使用情況、技術和需求從數(shù)百個庫中選擇最合適的一個。
上面最后一點可以說是最重要的。驅(qū)動機器學習的算法相當復雜,包括了很多的數(shù)學知識,所以自己動手去實現(xiàn)它們(并保證其正常運行)將會是一件很困難的任務。幸運地是,有很多聰明的、有奉獻精神的人為我們做了這個困難的工作,因此我們只需要專注于手邊的應用程序即可。
最受歡迎的庫我已經(jīng)對一些比較流行的庫和它們擅長的方向做了一個簡短的描述,在下一節(jié),我會給出一個更完整的項目列表。
Tensorflow這是清單中最新的神經(jīng)網(wǎng)絡庫。在前幾天剛剛發(fā)行,Tensorflow是高級神經(jīng)網(wǎng)絡庫,可以幫助你設計你的網(wǎng)絡架構,避免出現(xiàn)低水平的細節(jié)錯誤。重點是允許你將計算表示成數(shù)據(jù)流圖,它更適合于解決復雜問題。
此庫主要使用C++編寫,包括Python綁定,所以你不必擔心其性能問題。我最喜歡的一個特點是它靈活的體系結構,允許你使用相同的API將其部署到一個或多個CPU或GPU的臺式機、服務器或者移動設備。有此功能的庫并不多,如果要說有,Tensorflow就是其一。
它是為谷歌大腦項目開發(fā)的,目前已被數(shù)百名工程師使用,所以無須懷疑它是否能夠創(chuàng)造有趣的解決方案。
盡管和其它的庫一樣,你可能必須花一些時間來學習它的API,但花掉的時間應該是很值得的。我只花了幾分鐘了解了一下它的核心功能,就已經(jīng)知道Tensorflow值得我花更多的時間讓我來實現(xiàn)我的網(wǎng)絡設計,而不僅僅是通過API來使用。
擅長:神經(jīng)網(wǎng)絡
scikit-learnscikit-learn絕對是其中一個,如果不是最流行的,那么也算得上是所有語言中流行的機器學習庫之一。它擁有大量的數(shù)據(jù)挖掘和數(shù)據(jù)分析功能,使其成為研究人員和開發(fā)者的首選庫。
其內(nèi)置了流行的NumPy、SciPy,matplotlib庫,因此對許多已經(jīng)使用這些庫的人來說就有一種熟悉的感覺。盡管與下面列出的其他庫相比,這個庫顯得水平層次略低,并傾向于作為許多其他機器學習實現(xiàn)的基礎。
scikit-learn是我們在CB Insights選用的機器學習工具。我們用它進行分類、特征選擇、特征提取和聚集。我們最愛的一點是它擁有易用的一致性API,并提供了很多開箱可用的求值、診斷和交叉驗證方法(是不是聽起來很熟悉?Python也提供了“電池已備(譯注:指開箱可用)”的方法)。錦上添花的是它底層使用Scipy數(shù)據(jù)結構,與Python中其余使用Scipy、Numpy、Pandas和Matplotlib進行科學計算的部分適應地很好。因此,如果你想可視化分類器的性能(比如,使用精確率與反饋率(precision-recall)圖表,或者接收者操作特征(Receiver OperaTIng CharacterisTIcs,ROC)曲線),Matplotlib可以幫助進行快速可視化??紤]到花在清理和構造數(shù)據(jù)的時間,使用這個庫會非常方便,因為它可以緊密集成到其他科學計算包上。
另外,它還包含有限的自然語言處理特征提取能力,以及詞袋(bag of words)、tfidf(Term Frequency Inverse Document Frequency算法)、預處理(停用詞/stop-words,自定義預處理,分析器)。此外,如果你想快速對小數(shù)據(jù)集(toy dataset)進行不同基準測試的話,它自帶的數(shù)據(jù)集模塊提供了常見和有用的數(shù)據(jù)集。你還可以根據(jù)這些數(shù)據(jù)集創(chuàng)建自己的小數(shù)據(jù)集,這樣在將模型應用到真實世界中之前,你可以按照自己的目的來檢驗模型是否符合期望。對參數(shù)最優(yōu)化和參數(shù)調(diào)整,它也提供了網(wǎng)格搜索和隨機搜索。如果沒有強大的社區(qū)支持,或者維護得不好,這些特性都不可能實現(xiàn)。我們期盼它的第一個穩(wěn)定發(fā)布版。
擅長:非常多
TheanoTheano是一個機器學習庫,允許你定義、優(yōu)化和評估涉及多維數(shù)組的數(shù)學表達式,這可能是其它庫開發(fā)商的一個挫折點。與scikit-learn一樣,Theano也很好地整合了NumPy庫。GPU的透明使用使得Theano可以快速并且無錯地設置,這對于那些初學者來說非常重要。然而有些人更多的是把它描述成一個研究工具,而不是當作產(chǎn)品來使用,因此要按需使用。
Theano最好的功能之一是擁有優(yōu)秀的參考文檔和大量的教程。事實上,多虧了此庫的流行程度,使你在尋找資源的時候不會遇到太多的麻煩,比如如何得到你的模型以及運行等。
擅長:神經(jīng)網(wǎng)絡和深度學習
Pylearn2大多數(shù)Pylearn2的功能實際上都是建立在Theano之上,所以它有一個非常堅實的基礎。
據(jù)Pylearn2網(wǎng)址介紹:
Pylearn2不同于scikit-learn,Pylearn2旨在提供極大的靈活性,使研究者幾乎可以做任何想做的事情,而scikit-learn的目的是作為一個“黑盒”來工作,即使用戶不了解實現(xiàn)也能產(chǎn)生很好的結果。
記住,Pylearn2在合適的時候會封裝其它的庫,如scikit-learn,所以在這里你不會得到100%用戶編寫的代碼。然而,這確實很好,因為大多數(shù)錯誤已經(jīng)被解決了。像Pylearn2這樣的封裝庫在此列表中有很重要的地位。
擅長:神經(jīng)網(wǎng)絡





