近日,來自德國的 Robin Wieruch 發(fā)布了一系列使用 JavaScript 構建機器學習的教程,本文將主要介紹使用 JavaScript 實現(xiàn)神經(jīng)網(wǎng)絡的方法。
JavaScript 是一種流行的高級編程語言,它被世界上的絕大多數(shù)網(wǎng)站所使用,也被所有主流瀏覽器所支持。隨著深度學習的火熱,越來越多開發(fā)者開始探索使用 JavaScript 實現(xiàn)人工智能與機器學習算法。近日,來自德國的 Robin Wieruch 發(fā)布了一系列使用 JavaScript 構建機器學習的教程,本文將主要介紹使用 JavaScript 實現(xiàn)神經(jīng)網(wǎng)絡的方法。
近期,原作者發(fā)表了一系列有關在 JavaScript 上實現(xiàn)人工智能和機器學習算法的文章,其中包括:
線性回歸和梯度下降
正規(guī)方程線性回歸
邏輯回歸和梯度下降
這些機器學習算法的實現(xiàn)是基于 math.js 庫的線性代數(shù)(如矩陣運算)和微分的,你可以在 GitHub 上找到所有這些算法:
如果你發(fā)現(xiàn)其中存在任何缺陷,歡迎對這個資源提出自己的改進,以幫助后來者。我希望不斷為 web 開發(fā)者們提供更多、更豐富的機器學習算法。
就我個人來說,我發(fā)現(xiàn)實現(xiàn)這些算法在某種程度上是一個非常具有挑戰(zhàn)性的任務。特別是當你需要在 JavaScript 上實現(xiàn)神經(jīng)網(wǎng)絡的前向和反向傳播的時候。由于我自己也在學習神經(jīng)網(wǎng)絡的知識,我開始尋找適用于這種工作的庫。希望在不久的將來,我們能夠輕松地在 GitHub 上找到相關的基礎實現(xiàn)。然而現(xiàn)在,以我使用 JavaScript 的閱歷,我選擇了谷歌發(fā)布的 deeplearn.js 來進行此項工作。在本文中,我將分享使用 deeplearn.js 和 JavaScript 實現(xiàn)神經(jīng)網(wǎng)絡從而解決現(xiàn)實世界問題的方式——在 web 環(huán)境上。
首先,我強烈推薦讀者先學習一下深度學習著名學者吳恩達的《機器學習》課程。本文不會詳細解釋機器學習算法,只會展示它在 JavaScript 上的用法。另一方面,該系列課程在算法的細節(jié)和解釋上有著令人驚嘆的高質量。在寫這篇文章之前,我自己也學習了相關課程,并試圖用 JavaScript 實現(xiàn)來內化課程中的相關知識。
神經(jīng)網(wǎng)絡的目的是什么?
本文實現(xiàn)的神經(jīng)網(wǎng)絡需要通過選擇與背景顏色相關的適當字體顏色來改善網(wǎng)頁可訪問性。比如,深藍色背景中的字體應該是白色,而淺黃色背景中的字體應該是黑色。你也許會想:首先你為什么需要一個神經(jīng)網(wǎng)絡來完成任務?通過編程的方式根據(jù)背景顏色計算可使用的字體顏色并不難,不是嗎?我很快在 Stack Overflow 找到了該問題的解決辦法,并根據(jù)我的需求做了調整,以適應 RGB 空間中的顏色。
function getAccessibleColor(rgb) {
let [ r, g, b ] = rgb;
let colors = [r / 255, g / 255, b / 255];
let c = colors.map((col) => {
if (col <= 0.03928) {
return col / 12.92;
}
return Math.pow((col + 0.055) / 1.055, 2.4);
});
let L = (0.2126 * c[0]) + (0.7152 * c[1]) + (0.0722 * c[2]);
return (L > 0.179)
? [ 0, 0, 0 ]
: [ 255, 255, 255 ];
}
當已經(jīng)有一個編程的方法可以解決該問題的時候,使用神經(jīng)網(wǎng)絡對于該現(xiàn)實世界問題價值并不大,沒有必要使用一個機器訓練的算法。然而,由于可通過編程解決這一問題,所以驗證神經(jīng)網(wǎng)絡的性能也變得很簡單,這也許能夠解決我們的問題。查看該 GitHub 庫(https://github.com/javascript-machine-learning/color-accessibility-neural-network-deeplearnjs)中的動圖,了解它最終表現(xiàn)如何,以及本教程中你將構建什么。如果你熟悉機器學習,也許你已經(jīng)注意到這個任務是一個分類問題。算法應根據(jù)輸入(背景顏色)決定二進制輸出(字體顏色:白色或黑色)。在使用神經(jīng)網(wǎng)絡訓練算法的過程中,最終會根據(jù)輸入的背景顏色輸出正確的字體顏色。
下文將從頭開始指導你設置神經(jīng)網(wǎng)絡的所有部分,并由你決定把文件/文件夾設置中的部分合在一起。但是你可以整合以前引用的 GitHub 庫以獲取實現(xiàn)細節(jié)。
JavaScript 中的數(shù)據(jù)集生成
評論
查看更多