近日,来自德国的 Robin Wieruch 发布了一系列使用 JavaScript 构建机器学习的教程,本文将主要介绍使用 JavaScript 实现神经网络的方法。
JavaScript 是一种流行的高级编程语言,它被世界上的绝大多数网站所使用,也被所有主流浏览器所支持。随着深度学习的火热,越来越多开发者开始探索使用 JavaScript 实现人工智能与机器学习算法。近日,来自德国的 Robin Wieruch 发布了一系列使用 JavaScript 构建机器学习的教程,本文将主要介绍使用 JavaScript 实现神经网络的方法。
近期,原作者发表了一系列有关在 JavaScript 上实现人工智能和机器学习算法的文章,其中包括:
线性回归和梯度下降
正规方程线性回归
逻辑回归和梯度下降
这些机器学习算法的实现是基于 math.js 库的线性代数(如矩阵运算)和微分的,你可以在 GitHub 上找到所有这些算法:
如果你发现其中存在任何缺陷,欢迎对这个资源提出自己的改进,以帮助后来者。我希望不断为 web 开发者们提供更多、更丰富的机器学习算法。
就我个人来说,我发现实现这些算法在某种程度上是一个非常具有挑战性的任务。特别是当你需要在 JavaScript 上实现神经网络的前向和反向传播的时候。由于我自己也在学习神经网络的知识,我开始寻找适用于这种工作的库。希望在不久的将来,我们能够轻松地在 GitHub 上找到相关的基础实现。然而现在,以我使用 JavaScript 的阅历,我选择了谷歌发布的 deeplearn.js 来进行此项工作。在本文中,我将分享使用 deeplearn.js 和 JavaScript 实现神经网络从而解决现实世界问题的方式——在 web 环境上。
首先,我强烈推荐读者先学习一下深度学习著名学者吴恩达的《机器学习》课程。本文不会详细解释机器学习算法,只会展示它在 JavaScript 上的用法。另一方面,该系列课程在算法的细节和解释上有着令人惊叹的高质量。在写这篇文章之前,我自己也学习了相关课程,并试图用 JavaScript 实现来内化课程中的相关知识。
神经网络的目的是什么?
本文实现的神经网络需要通过选择与背景颜色相关的适当字体颜色来改善网页可访问性。比如,深蓝色背景中的字体应该是白色,而浅黄色背景中的字体应该是黑色。你也许会想:首先你为什么需要一个神经网络来完成任务?通过编程的方式根据背景颜色计算可使用的字体颜色并不难,不是吗?我很快在 Stack Overflow 找到了该问题的解决办法,并根据我的需求做了调整,以适应 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 ];
}
当已经有一个编程的方法可以解决该问题的时候,使用神经网络对于该现实世界问题价值并不大,没有必要使用一个机器训练的算法。然而,由于可通过编程解决这一问题,所以验证神经网络的性能也变得很简单,这也许能够解决我们的问题。查看该 GitHub 库(https://github.com/javascript-machine-learning/color-accessibility-neural-network-deeplearnjs)中的动图,了解它最终表现如何,以及本教程中你将构建什么。如果你熟悉机器学习,也许你已经注意到这个任务是一个分类问题。算法应根据输入(背景颜色)决定二进制输出(字体颜色:白色或黑色)。在使用神经网络训练算法的过程中,最终会根据输入的背景颜色输出正确的字体颜色。
下文将从头开始指导你设置神经网络的所有部分,并由你决定把文件/文件夹设置中的部分合在一起。但是你可以整合以前引用的 GitHub 库以获取实现细节。
JavaScript 中的数据集生成
评论
查看更多