10個(gè)機(jī)器學(xué)習(xí)的JavaScript示例
在過去的每一年,用于機(jī)器學(xué)習(xí)(Machine Learning)的庫在變得越來越快和易用。一直以來Python都是機(jī)器學(xué)習(xí)的***語言,但現(xiàn)在幾乎可將所有語言用于神經(jīng)網(wǎng)絡(luò)(neural networks),這里當(dāng)然也包括JavaScript!
近幾年,Web生態(tài)系統(tǒng)取得了很大進(jìn)步,雖然JavaScript和Node.js的性能比Python和Java略差,但它們已足夠處理許多機(jī)器學(xué)習(xí)問題。Web語言具有被廣泛且易于使用的優(yōu)勢——你只需一個(gè)Web瀏覽器就可以運(yùn)行一個(gè)JavaScript語言編寫的機(jī)器學(xué)習(xí)項(xiàng)目。
雖然許多JavaScript語言編寫的機(jī)器學(xué)習(xí)庫是剛剛誕生并且還在持續(xù)開發(fā)中,但還是值得去嘗試使用它們。這篇文章會(huì)介紹幾個(gè)JavaScript語言編寫的機(jī)器學(xué)習(xí)庫以及一些很酷的AI Web應(yīng)用示例,它們可以很好的幫助你開始AI之旅。
1. Brain
使用Brain 可以輕松的創(chuàng)建神經(jīng)網(wǎng)絡(luò),并且可通過輸入/輸出數(shù)據(jù)對它進(jìn)行訓(xùn)練。因?yàn)橛?xùn)練神經(jīng)網(wǎng)絡(luò)會(huì)消耗比較多的資源,所以推薦在Node.js環(huán)境中而不是直接使用瀏覽器來訓(xùn)練神經(jīng)網(wǎng)絡(luò)。在官網(wǎng)上有個(gè)可以識別顏色(recognize color contrast)的小demo (PS:試了下,這個(gè)demo現(xiàn)在是404頁面)。
2. Deep playground
這是一個(gè)寓教于樂的Web應(yīng)用,可以讓你以游戲的方式來探索神經(jīng)網(wǎng)絡(luò)的不同部分。它有一個(gè)友好的界面用于讓你控制數(shù)據(jù)的輸入,算法所用的神經(jīng)元數(shù)量以及其它一些會(huì)影響輸出結(jié)果的權(quán)值因素。這是一個(gè)開源項(xiàng)目,它是使用TypeScript編寫的機(jī)器學(xué)習(xí)庫并且有完善的文檔,從中我們可以許多東西。
3. FlappyLearning
FlappyLearning 項(xiàng)目大約800行代碼,這個(gè)項(xiàng)目包含一個(gè)機(jī)器學(xué)習(xí)庫并且實(shí)現(xiàn)了一個(gè)很有趣的demo——學(xué)習(xí)玩 Flappy Bird 游戲。它使用了一種叫做 Neuroevolution 的AI技術(shù),使用了受自然神經(jīng)系統(tǒng)激發(fā)而產(chǎn)生的算法,可以從每次成功或失敗的迭代中進(jìn)行動(dòng)態(tài)進(jìn)行學(xué)習(xí)。
4. Synaptic
Synaptic是一個(gè)架構(gòu)無關(guān)(architecture-agnostic)且得到積極維護(hù)的Node.js和瀏覽器庫,它允許開發(fā)者構(gòu)建任何類型的神經(jīng)網(wǎng)絡(luò)。它有幾個(gè)內(nèi)置的架構(gòu),使得可以快速測試和比較不同機(jī)器學(xué)習(xí)算法間的異同。它還提供了介紹神經(jīng)網(wǎng)絡(luò)的文檔及幾個(gè)實(shí)用demo和其它可以幫助我們學(xué)習(xí)機(jī)器學(xué)習(xí)的教程。
5. Land Lines
Land Lines 是一個(gè)有趣的用于搜尋地球衛(wèi)星圖片的Chrome網(wǎng)絡(luò)實(shí)驗(yàn)(web experiment)。這個(gè)應(yīng)用無需服務(wù)調(diào)用:它完全運(yùn)行在瀏覽器環(huán)境中,得益于機(jī)器學(xué)習(xí)的使用,WebGL也可以在移動(dòng)設(shè)備中有很好的表現(xiàn)。你可以在GitHub 上瀏覽源碼或者在這里閱讀完整的示例。
6. ConvNetJS
盡管已不再被積極的維護(hù),但ConvNetJS依然是JavaScriptp中最為先進(jìn)的深度學(xué)習(xí)庫之一。這個(gè)庫最初由斯坦福大學(xué)開發(fā),然后ConvNetJS開始在GitHub上流行,社區(qū)為它添加了許多特性和教程。ConvNetJS直接運(yùn)行在瀏覽器環(huán)境中,支持多種學(xué)習(xí)技術(shù),并且它接近底層原理使得它更適有較多神經(jīng)網(wǎng)絡(luò)方面經(jīng)驗(yàn)的人。
7. Thing Translator
Thing Translator是一個(gè)網(wǎng)絡(luò)實(shí)驗(yàn),它可以讓你的手機(jī)識別真是的物體并用不同的語言標(biāo)注物體的名稱。這個(gè)應(yīng)用完全建立在web技術(shù)之上并且利用了Google提供的兩種機(jī)器學(xué)習(xí)APIs——用于圖像識別的Cloud Vision 和用于自然語言翻譯的Translate API。
8. Neurojs
Nerojs用于建立基于增強(qiáng)學(xué)習(xí)(reinforcement learning)的AI系統(tǒng)框架。不幸的是這個(gè)開源項(xiàng)目除了一個(gè)自動(dòng)駕駛實(shí)驗(yàn)的demo外并沒有完善的文檔,這個(gè)demo對組成神經(jīng)網(wǎng)絡(luò)的不同部分有著很好的描述。這個(gè)庫借助如現(xiàn)代化工具如:webpack 和babel,使用純JavaScript進(jìn)行開發(fā)。
9. Machine_learning
這也是一個(gè)允許我們僅使用JavaScript創(chuàng)建并訓(xùn)練神經(jīng)網(wǎng)絡(luò)的庫。它很容易就可以安裝到Node.js和客戶端環(huán)境,并且擁有對開發(fā)人員十分友好的的API。這個(gè)庫提供了許多示例,可以幫助你理解機(jī)器學(xué)習(xí)的核心原理。
10. DeepForge
DeepForge是一個(gè)用于深度學(xué)習(xí)且易于使用的開發(fā)環(huán)境。它允許你使用簡單的圖形接口創(chuàng)建神經(jīng)網(wǎng)絡(luò),支持在遠(yuǎn)程機(jī)器上訓(xùn)練模型,并且內(nèi)置版本控制系統(tǒng)。這個(gè)項(xiàng)目基于Node.js和MongoDB且運(yùn)行在瀏覽器環(huán)境中。
彩蛋: Machine Learning in Javascript
Burak Kanber 發(fā)布的一些列優(yōu)秀博文中講述了機(jī)器學(xué)習(xí)的基本原理。這些教程寫的很好且專門面向JavaScript開發(fā)者。如果你想深入理解機(jī)器學(xué)習(xí),這些博文是很好的學(xué)習(xí)資源。
結(jié)語
盡管JavaScript的機(jī)器學(xué)習(xí)生態(tài)尚未成熟,但仍然建議使用上述資源來開啟你的機(jī)器學(xué)習(xí)之路并對一些核心技術(shù)建立感性認(rèn)識。正如文章中展示的一些實(shí)驗(yàn),你也可以僅使用瀏覽器和少量JavaScript代碼來創(chuàng)建許多有趣的東西。