我用 JavaScript 來學習機器學習
作者 | Ben Dickson
策劃 | 劉燕
過去的幾年中,Python 已成爲機器學習和深度學習的首選編程語言。與機器學習和深度學習相關的大多數書籍和在線課程要麼只用 Python,要麼再帶上 R 語言。Python 有着豐富的機器學習和深度學習庫、專門優化的實現,具備可伸縮性和大量功能,因而廣受歡迎。
但 Python 並不是編寫機器學習應用程序的唯一選擇。社區中有越來越多的開發人員正在使用 JavaScript 來運行機器學習模型。
儘管 JavaScript(目前)並不能在機器學習領域替代根基深厚的 Python,但掌握 JavaScript 機器學習技能也是有很多不錯的理由的,本文就會介紹其中的四個。
私有機器學習
大多數機器學習應用程序都基於客戶端 - 服務器架構。用戶必須將數據發送到機器學習模型所運行的地方。客戶端 - 服務器架構有一些顯著優勢。開發人員可以在服務器上運行他們的模型,並通過 Web API 將其提供給用戶應用程序。這樣開發人員就可以使用沒法跑在用戶設備上的超大型神經網絡了。
但在許多情況下,在用戶的設備上執行機器學習推斷纔是最佳選項。例如,由於隱私問題,用戶可能不希望將他們的照片、私人聊天消息和電子郵件發送到運行機器學習模型的服務器上。
還好,並非所有機器學習應用程序都需要昂貴的服務器。許多模型經過壓縮後可以跑在用戶設備上。此外,移動設備製造商正在爲他們的設備配備新型芯片,來支持本地的深度學習推理。
但問題在於,許多用戶設備並不默認支持 Python 機器學習。MacOS 和大多數 Linux 版本預裝了 Python,但你還是需要單獨安裝各種機器學習庫。Windows 用戶必須手動安裝 Python。而移動操作系統對 Python 解釋器的支持非常差。
相比之下,所有現代移動和桌面瀏覽器都原生支持 JavaScript。這意味着 JavaScript 機器學習應用程序可以確保在大多數臺式機和移動設備上運行。因此,如果你的機器學習模型運行在瀏覽器中的 JavaScript 代碼上,你就能肯定幾乎所有用戶都可以訪問它。
市面上已經有一些 JavaScript 機器學習庫了。TensorFlow.js 就是一個例子,它是谷歌著名的 TensorFlow 機器學習和深度學習庫的 JavaScript 版本。如果你使用智能手機、平板電腦或臺式計算機訪問 TensorFlow.js 演示頁面,會發現許多使用 JavaScript 機器學習的現成示例。它們在你的設備上運行機器學習模型,而無需將任何數據發送到雲端,而且你不需要安裝其他任何軟件。其他一些功能強大的 JavaScript 機器學習庫包括 ML5.js、Synaptic 和 Brain.js。
上圖:TensorFlow.js 應用程序的示例
快速和定製的 ML 模型
隱私並不是設備端機器學習的唯一優勢。在某些應用程序中,從設備向服務器發送數據的往返過程可能會導致延遲,從而影響用戶體驗。在其他一些情況下,用戶可能希望在沒有互聯網連接的情況下也能夠運行機器學習模型。在這類場景中,在用戶設備上運行 JavaScript 機器學習模型會非常方便。
JavaScript 機器學習的另一個重要用途是模型定製。例如,假設你要開發一個文本生成機器學習模型,可以適應每個用戶的語言偏好。一種解決方案是在服務器上爲每個用戶存儲一種模型,並根據用戶的數據對其進行訓練。隨着用戶的增長,這將給服務器增加額外的負載,並且還需要你將潛在的敏感數據存儲在雲端。
一種替代方法是在服務器上創建一個基本模型,並在用戶設備上創建副本,然後使用 JavaScript 機器學習庫來根據用戶數據微調模型。
一方面,這會將數據保留在用戶的設備上,而無需將其發送到服務器。另一方面,這樣就無需向雲端發送額外的推理和訓練負載,從而解放服務器的資源。而且,即便用戶與服務器斷開連接,他們仍然可以使用機器學習功能。
上圖:客戶端機器學習允許開發人員在用戶設備上運行自定義模型
輕鬆將機器學習集成到 Web 和移動應用程序中
JavaScript 機器學習的另一個好處是輕鬆與移動應用程序集成。移動操作系統對 Python 的支持仍處於初級階段。但是,市面上已經有了豐富的跨平臺 JavaScript 移動應用開發工具,例如 Cordova 和 Ionic。
這些工具非常受歡迎,因爲你可以用它們只編寫一次代碼就部署到 iOS 和 Android 設備上。爲了讓代碼在不同的操作系統之間保持兼容,跨平臺開發工具會啓用一個 “Webview”,這是一個可以運行 JavaScript 代碼並能嵌入到目標操作系統的原生應用程序中的瀏覽器對象。這些瀏覽器對象支持 JavaScript 機器學習庫。
一個例外是 React Native,一種流行的跨平臺移動應用程序開發框架,它不依賴 Webview 來運行應用程序。但是,鑑於移動機器學習應用程序的普及,谷歌已經爲 React Native 發佈了 TensorFlow.js 的一個特別版本。
如果你是用原生代碼編寫移動應用,並且希望集成 JavaScript 機器學習代碼,則可以將自己的嵌入式瀏覽器對象(例如 iOS 中的 WKWebView)添加到你的應用中。
還有其他一些針對移動應用程序的機器學習庫可選,例如 TensorFlow Lite 和 CoreML。但是,它們需要在移動應用的目標平臺中編寫原生代碼。相比之下,JavaScript 機器學習兼容性極佳。如果你已經實現了機器學習應用程序的瀏覽器版本,則只需很少或不做任何更改即可輕鬆將其移植到移動應用程序中。
服務器上的 JavaScript 機器學習
機器學習的主要挑戰之一是訓練模型,對於深度學習而言尤其如此。在深度學習中,學習過程需要在多個 epoch 上進行昂貴的反向傳播計算。雖然你可以在用戶設備上訓練深度學習模型,但如果神經網絡很大,這可能需要數週或數月的時間才能完成。
Python 更適合機器學習模型的服務端訓練。它可以擴展並在服務器羣集上分配負載,以加快訓練過程。訓練完模型後,你可以對其進行壓縮並交付給用戶設備以推理。所幸,用不同語言編寫的機器學習庫是高度兼容的。例如,如果你使用 TensorFlow 或 Keras for Python 訓練深度學習模型,則可以將其保存爲幾種獨立於語言的格式,例如 JSON 或 HDF5。然後,你可以將保存的模型發送到用戶的設備,並使用 TensorFlow.js 或其他 JavaScript 深度學習庫來加載。
但值得注意的是,服務端 JavaScript 機器學習也在日趨成熟。你可以在 JavaScript 應用服務器引擎 Node.js 上運行 JavaScript 機器學習庫。TensorFlow.js 有一個適用於運行 Node.js 的服務器的特別版本。與 TensorFlow.js 交互的 JavaScript 代碼與在瀏覽器中運行的應用程序所使用的 JavaScript 代碼相同。但在後臺,這個庫利用服務器上的特殊硬件來加快訓練和推理速度。PyTorch 是另一種流行的 Python 機器學習庫,目前還沒有正式的 JavaScript 實現,但開源社區已經爲這個庫開發了 JavaScript 綁定。
使用 Node.js 進行機器學習是一個相當新的概念,但它正在快速發展,因爲人們越來越有興趣在 Web 和移動應用程序中添加機器學習功能。隨着 JavaScript 機器學習社區的不斷髮展和相關工具的不斷成熟,對於許多希望在自身技能組合中添加機器學習的 Web 開發人員來說,這種技術可能會成爲他們的首選。
作者介紹
Ben Dickson 是一名軟件工程師,也是 TechTalks 的創始人,這個博客探討了技術是如何解決和製造問題的。
原文鏈接:
https://venturebeat.com/2021/04/23/4-reasons-to-learn-machine-learning-with-javascript/
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/vOOmsRVCEo2L-2MxG8RVlA