javascript機器編程進行中!

這是對機器學習領域的廣泛介紹。如果你對那些與JavaScript相關的話題感興趣,請在接下來的幾個月裡關注我的網站。我希望能介紹一些主題,讓web開發人員進入這個領域。就像我說的,我自己正在學習這個話題,並試圖通過把這些知識寫下來,將這些知識內化。

Web 開發者如何學習機器學習

有很多資源我想推薦給那些進入機器學習領域的web開發人員。至於我自己,我想至少在12周內刺激我的感官。這就是完成Andrew Ng的機器學習課程的時間。請記住,這是我個人的路線圖,它可能不適合所有人。但這對我的學習有很大幫助,因為我有足夠的學習材料。所以它也可能幫助其他的web開發人員。

如果你只是想對這個話題感興趣,那就開始聽第11集的機器學習指南吧。Tyler Renelle做了一份很棒的工作,介紹了這個話題。因為這是一個播客,你在健身房鍛鍊的時候聽一會,這就是我進入ML的方式。

如果你開始感到興奮,下一步將是學習Andrew Ng的機器學習課程,這需要12周的時間完成。從淺層機器學習算法到神經網絡,從迴歸問題到聚類問題,從領域的理論知識到應用於Octave或Matlab的應用實現,都是一個漫長的過程。這是一種強烈的挑戰,但你可以通過每週花幾個小時的時間和練習來完成。

機器學習課程在5周內從線性迴歸到神經網絡。在第5周的最後,我感到了一種勢不可擋的感覺。“第六週會變得更加複雜嗎?”“哇,這門課讓我學會了從頭開始實施神經網絡。”Andrew給出了一個完美的演練來了解所有這些建立在彼此之上的概念。畢竟,機器學習與函數式編程的功能組合有很多共同之處。但你要自己去了解。我只能說,看到自己第一次在瀏覽器中執行一個神經網絡的實現是一種壓倒一切的感覺。

在這個過程中,我做了所有的每週作業,並使用 Octave 解決了它們。此外,我在 JavaScript 中實現了大部分算法,同時也是為我自己做練習,並得到結論,用一種不適合機器學習但適合web開發人員的語言來實現這些算法是可行的。它起作用了,我在一個開放的GitHub 組織中發佈了它們。它對每個人都有貢獻。但這並不是故事的全部。我還寫了一些主題,讓我內化自己的學習,獲得別人的指導,同時也幫助web開發人員進入這個領域。因此,如果您正在進行這門課程,請查看這些JavaScript實現和相關的這些。這些練習是用於 Nodejs 和瀏覽器的專用機器學習教程。

  • Linear Regression with Gradient Descent in JavaScript
  • Improving Gradient Descent in JavaScript
  • Gradient Descent with Vectorization in JavaScript
  • Multivariate Linear Regression, Gradient Descent in JavaScript
  • Linear Regression with Normal Equation in JavaScript
  • Logistic Regression with Gradient Descent in JavaScript
  • Neural Networks in JavaScript with deeplearn.js

它還不全面,例如缺少常規JavaScript神經網絡實現,但是我希望在某個時候能夠完成JavaScript的所有基本算法。神經網絡實現是通過谷歌最近發佈的 deeplearn.js 完成的。我第一次使用它的時候非常興奮,對於我來說這是我的個人獎勵,在學了5個星期的課程之後,我使用了一個庫,而不是從頭開始用JavaScript 實現神經網絡。讓我們來看看神經網絡的作用,以提高網站的可訪問性。另一個是學習diget使用MNIST數據庫並可視化其結果。也許你把它看作是給GitHub組織貢獻的機會。下一個議程是K-Means,支持向量機(SVM)和主成分分析(PCA),從JavaScript開始!

在你完成了機器學習課程的第5周之後,你應該對機器學習和如何用它解決問題有一個很好的感覺。之後,該課程繼續用淺層算法進行監督學習和無監督學習。它給出瞭如何改進您實現的機器學習算法以及如何為大型數據集進行擴展的指導。當你完成了第5周,你應該繼續使用機器學習指導播客來學習更多關於淺層算法和神經網絡的知識。我聽了它直到第17集,因為後來它大量進入自然語言處理。

此外,在這幾周的課程中,我閱讀了華文音頻的主算法,以獲得關於主題、不同視角和利益相關者的概述,以及它的歷史。在那之後,我開始閱讀開源電子書《深度學習》(Ian Goodfellow, yojoshua Bengio和Aaron Courville)。它發生在課程的第五週之後,完全符合我迄今為止所學到的所有基礎知識。雖然到目前為止我覺得這本書很有挑戰性,但我可以推薦兩本書給你更多的指導。當我讀完第二本書後,我想讀的是邁克爾·尼爾森(Michael Nielsen)的免費電子書《神經網絡》和亞當·吉布森(Adam Gibson),喬什·帕特森(Josh Patterson)的《深度學習》。

還有什麼可以學習機器學習的?在我完成了Andrew Ng的課程之後,我將會休息一下,把所有的學習都消化掉。我可能會在我的博客寫更多關於他們的文章。如果你感興趣的話,你可以訂閱我的博客。但是,還有很多其他的課程我想去看看。

  • Machine Learning Engineer Nanodegree on Udacity
  • Deep Learning Specialization on Coursera
  • Practical Deep Learning for Coders on Fast.ai

這些課程都是由Andrew Fast.ai 也有一個關於計算線性代數的課程,它的基礎數學也在ML。一般來說,機器學習需要大量的數學知識。如果你需要複習某些話題,我可以強烈推薦可汗學院。

  • Linear Algebra
  • Statistics
  • Calculus

回到主題:用JavaScript進行機器學習。有什麼類型的庫支持您使用JavaScript進行機器學習?如果你想從頭開始實施數學運算,那麼是無法繞開 math.js (如矩陣運算)。但是,如果您使用的是高級庫,比如Keras.js或deeplearn.js,你將會使用NDArrays的數學方法,張量和數學運算。除此之外,還有一些其他的庫之前沒有提到,我還沒試過。請記住,不是所有的庫都支持 GPU 加速,但是我想,當涉及到計算效率時,他們中的幾個將在未來提供它。

  • Pavlov.js (Markov Decision Processes)
  • SVM.js (Support Vector Machines)
  • Brain.js (Neural Networks)
  • Synaptic (Neural Networks)
  • Neataptic (Neural Networks, Neuroevolution)
  • WebDNN (Neural Networks, Inference Mode)

在JavaScript中,還有更多的機器學習相關的庫,用於人工智能的其他子領域。

  • Natural (Natural Language Processing)
  • Sentiment (Sentiment Analysis)
  • OpenCV.js (Computer Vision with OpenCV for the Browser)
  • opencv4nodejs (Computer Vision with OpenCV for Node.js)
  • face-recognition.js (Face Recognition)

另一個庫沒有出現在列表中,因為它沒有被積極維護:ConvNetJS。此外,還有兩個庫在JavaScript中實現了淺層機器學習算法:machine_learning和ml。在這些庫中,您可以找到邏輯迴歸、k-means集群、決策樹、k近鄰、主組件分析和JavaScript的naive bayes。

這些庫中有許多隻用於Node.js中的機器學習。因此,他們沒有在瀏覽器中使用計算效率的WebGL。

如果你有其他建議,請在下面留言。如果您知道某些庫是否處於活動狀態,或者已經不再維護,請聯繫我們。我想讓這篇文章為將來而更新。

更多機器學習的編程語言

在學習並將所有的理論概念應用到您所選擇的編程語言(例如JavaScript)之後,您總是可以重新學習一種最適合機器學習的編程語言。它可以是一個很好的學習經驗,來體驗用不同的語言來實現更高效的東西。在用JavaScript解決數學方程時,我也有同樣的感覺。

前一段展示了一些機器學習語言(Python、C/ c++、R、Scala、Java、Matlab、Octave、Julia)和他們的專業領域。用它的庫來提供所有東西的人似乎是Python。我在這裡不能給出任何深刻的建議,因為我沒有使用任何與機器學習相關的語言,但是我個人會選擇Python,如果我在使用JavaScript後繼續學習這個主題。關於學習Python的一個最推薦的資源是通過艱苦的方式學習Python。Andrew Ng在他的機器學習課程中提到,通常機器學習算法是在Octave或Matlab中開發出來的,但後來在Python中實現了。因此,我仍然在尋找一種實用的學習路線圖,將視頻、文本和音頻材料結合起來,就像我為機器學習所做的那樣。如果你有任何建議,請在下面留言。


最後,我很好奇您對web開發人員在JavaScript上的機器學習的反饋。正如我所說的,我現在每天都在學習這個話題。我很可能會在2018年投入更多的時間在這個領域,但我也想聽聽你的想法。你要和我一起去旅行嗎?

此外,我很好奇你是否有機會讓我以專業的方式更深入地瞭解機器學習。目前,我積極從事JavaScript和web開發的自由職業和諮詢工作,並在在這兩方面建立自己的項目,但我希望能在機器學習中獲得專業的地位。我渴望學習,並且會去尋找那些熱心於教授機器學習領域新知識的導師。所以,請花點時間考慮一下,如果有什麼可以幫助我的,請聯繫我。

我的web前端學習交流群:57530,

8719,不定期分享乾貨,還會有2018最新的精品學習資料分享的哦!

最後,我想宣傳一下,BRIIM是一個致力於在 JavaScript 中運行機器學習的社區。雖然我不希望用 JavaScript 來解決實際的機器學習問題,但我期待著看到JavaScript在未來幾年變得更容易被機器學習所使用。這就是為什麼我發起了 BRIIM,讓每個人都聚在一起。這是一個作為一個社區而不是個人來行動的機會。它應該給機器學習提供一個入口點,使其能夠在一個集體活動下工作。與其在web上找到關於機器學習的文章,不如有一個維護良好的資源。不要把所有的東西拼湊在一起來學習關於機器學習的JavaScript,應該有一個高質量的資源為新手鋪平道路。這是一個為JavaScript愛好者跨入機器學習領域的橋樑。因此,我希望在這一旅程中看到您與我同行。


分享到:


相關文章: