前端开发人员仅使用 JavaScript 可以学习多少机器学习知识?

2025-06-09

前端开发人员仅使用 JavaScript 可以学习多少机器学习知识?

Franck V 在 Unsplash 上发布的机器人弹钢琴:https://unsplash.com/photos/U3sOwViXhkY

机器学习和人工智能在科技行业已经风靡一时。听到这两个词,你可能会在脑海中浮现出自动驾驶汽车或聊天机器人的形象,并好奇这些项目背后究竟是怎样的编程。尤其是人工智能,它长期以来一直只是科幻小说的题材,如今我们看到现实生活中的项目出现在新闻中,很难不让人对它产生好奇。

但这些术语究竟是什么意思呢?粗略地搜索一下,你肯定会在获得任何有价值的信息之前就分不清科学与市场营销的区别。过去几个月,我一直在学习和研究机器学习和数据科学领域,所以我知道要拨开那些流言蜚语和炒作的迷雾是多么困难。这篇文章就是关于这段经历,以及我作为一名普通的 JavaScript 开发者所取得的进步。

不过,在我们开始之前,我想先引用我最喜欢的关于机器学习和人工智能的名言:

机器学习和人工智能的区别:

如果它是用 Python 编写的,那它很可能是机器学习

如果是用 PowerPoint 写的,那很可能是 AI

Matt Velloso 在 Twitter 上

我以为机器学习只适合天才(但我不是天才)

我在职业生涯早期就开始接触机器学习 (ML),当时我在一个从事文本识别工作的团队工作。我的工作是创建一个前端应用程序,让用户将文档发送到后端进行解析。

由于很多原因,Python 在机器学习/人工智能 (ML/AI) 领域占据主导地位,所以我以为自己作为前端开发人员不会接触太多机器学习相关的工作。然而,我最终还是在机器学习方面投入了不少精力。文本识别模型对输入的要求非常严格,所以我最终使用 Python 库的 JavaScript 实现在浏览器中预处理文档,以匹配后端。通过这种方式,我还找到了 JavaScript 版本的机器学习框架。你不仅可以使用训练好的模型在浏览器中预测数据,还可以在浏览器中创建和训练模型。

虽然看到 JavaScript 真的能做到所有事情真是太棒了,但机器学习是一个专业领域,需要大量的微积分和统计学基础。所以,虽然我觉得自己 JavaScript 能力很强,但面对机器学习所涉及的高级数学,我却感到力不从心。简而言之,我觉得作为一个低端的前端开发人员,整个数据科学领域都超出了我的能力范围。

离开那个工作项目后,我好几个月都没有接触机器学习。

你不需要成为一名数学家就可以尝试机器学习

恩里科·费米做数学题的照片。可能与机器学习有关,也可能无关。看起来很难。图片由 Science in HD 提供,发布于 https://unsplash.com/photos/aYxQrt5J6jM

(图:在这次旅程之前我认为所有数据科学家都是这样的。)

即使我放弃了机器学习,我仍然想学习 Python。我运营一个聚会,所以决定组织一些研讨会,向社区(以及我自己)传授 Python 知识。我联系了当地的 Python 用户组。该组的组织者 Michael DuPont 和我一起策划了一系列讲座和研讨会,由 Michael 授课,我负责预订场地。

研讨会非常棒,我们还录制了视频上传到 YouTube。这段经历不仅让我学到了很多关于 Python 及其生态系统的知识,还让我学到了一些关于机器学习的有趣知识。

在介绍演讲的最后Michael 介绍了TPOT——一款自动化机器学习工具——并用它来训练一个模型来预测波士顿的房价。这让我非常着迷,因为 TPOT 的作用是收集数据,然后自行构建模型并进行训练。它基本上帮你省去了所有的数学和统计工作。这让我萌生了一个想法:或许,仅仅是或许,成为一名开发人员就足以让你涉足机器学习领域。

使用 JavaScript 进行机器学习

我还运营着一个播客,并因此结识了Gant Laborde,一位对数据科学充满热情的 JavaScript 开发者。我们采访了 Gant,探讨了JavaScript 中的机器学习,并深入探讨了如何开始使用机器学习。

Gant 还透露他正在编写一门JavaScript 机器学习课程。这激起了我的兴趣,因为几乎所有的机器学习教程都只关注 Python。录制结束后,我主动提出要尝试一下 Gant 的课程,他慷慨地把课程资料寄给了我和我的搭档,让我们亲自体验一下。

不久之后,Gant 发布了一门免费的机器学习入门课程。自然而然地,我也报名参加了。

主课程预计需要 3 周,而入门课程预计需要 5 天。

...我花了大约 3 个月的时间完成这两门课程。

由于我的日程繁忙,我完成这两门课程的时间远远超过了预计的 4 周,而且因为我真的想掌握这些内容,并给自己充分的机会学习 Gant 在课程中倾注的所有内容。

所以我花了一些时间⏳,喝了很多杯咖啡☕,写了很多代码👨‍💻。

让我们谈谈我学到了什么🧙‍♂️。

机器学习的本质是预测

这门入门课程对机器学习的入门非常精彩。它让我明白,机器学习的本质是将数据集简化为数字,分析大量的数字,然后根据之前从未见过的数据预测结果。它还让我了解了机器学习的类型及其在现实生活中的应用。

我们所涉及的机器学习和数据科学更多地是关于弱人工智能 (ANI),而非强人工智能 (AGN)。强人工智能是科幻小说中的情节:能够像人类一样运作并自行决策的机器人,例如“天网”等等。弱人工智能则专注于解决特定问题。弱人工智能的一些示例包括:识别图片中的猫还是狗,根据历史数据预测销量,或者从视频中检测人的眼睛是否睁开。

但是算法如何学习回答这些问题呢?

以波士顿住房数据为例,数据集包含一系列特征,例如地理位置、犯罪率、与学校的距离等等。计算机会将这些特征与房价一起进行分析。机器学习算法会读取数千个这样的数据点,以便根据这些特征估算出房价。

想象一下你中学数学课上学到的一条直线。有一个公式可以 100% 准确地告诉你,哪个 x 和 y 坐标会落在这条直线上。假设这条直线的公式为y = x。使用这个公式,我们可以很容易地判断一组坐标是否在这条直线上,对吗?如果你有(0, 0)(1, 1)(2, 2),你知道,只要它们相等,它们就位于这条直线上。

但是机器学习该如何解决这个问题呢?想象一下,如果你没有一个公式可以 100% 准确地告诉你一个点是否在线上。机器学习能帮上什么忙呢?

要用机器学习解决这个问题,你需要向模型输入数千个标记为在指定线上或线外的坐标。经过大量的数学运算和处理时间,你就能得到一个模型,它能以一定的置信度(百分比)告诉你任何给定点位于该线上的可能性。

简而言之,机器学习只是计算机通过反复试验笨拙地学习。

这条笑话推文真正概括了机器学习的核心概念:

机器学习面试:

我:我是机器学习专家

采访者:9 + 10 等于多少?

我:是3。

采访者:差远了。是19。

我:16岁。

采访者:不对。还是19岁

我:18岁。

采访者:不,是19。

我:19岁。

面试官:你被录用了。

机器学习涉及什么样的编码?

值得庆幸的是,TensorFlow 等机器学习框架将训练模型的内部原理(微积分和线性代数💀)抽象了出来。因此,我们无需构建用于处理数据和训练模型的实际算法。

然而,在涉足机器学习时,你仍然需要掌握一定程度的数学知识。你首先需要能够处理数据,并将其传递给机器学习算法和模型。你还需要掌握一些机器学习框架的设置和配置知识。

准备数据

数据科学家的大部分工作都与数据准备有关。当我们在播客中采访数据科学家 Amelia Bennett 时,她将自己描述为一名高薪的数据清洁工,并将数据科学本身描述为“21 世纪的脏活”。

如果你曾经好奇计算机如何学习解析图像、声音和语言,答案就是数学。任何可以用数学描述的东西都可以转化为数字,并输入到机器学习模型中。数据科学家的工作不仅是选择数据,还要转换数据。例如,在计算机视觉领域,这意味着将图像转换为像素阵列(RGB 和位置),供算法用于训练。自然语言处理涉及使用数学描述声波——获取频率和音高随时间的变化,以识别口语单词。

幸运的是,有一些工具可以帮助你将非数字数据转换为数字。例如,TensorFlow 就有很多实用程序专门帮助你处理图像。不过,你需要能够使用这些工具,并且知道应该使用哪些工具。

训练配置

Steve Harvey 在 https://unsplash.com/photos/xWiXi6wRLGo 上展示的带有杂乱电缆和旋钮的音频混音器

机器学习框架抽象了大部分数学知识,但你仍然需要了解不同的算法如何影响训练。所以你不会在纸上解决任何问题,但你仍然会阅读那些名字吓人的数学概念,比如softmaxsigmoidReLu

关于我上面提到的那些激活函数名称之类的术语数量,也值得一提。尤其是在使用 TensorFlow 时,你可能会觉得需要调整的旋钮太多了,以至于你根本不知道该怎么用。TensorFlow API 非常庞大,很难想象有人能完全掌握它们。

注意:你可能还记得我上面提到的 TPOT 之类的 AutoML 框架。这些框架不需要大量的配置,但也让你对输出结果的控制力较弱。虽然这些工具很有用,但随着你对机器学习的深入,你可能会发现自己会使用 TensorFlow 或类似的工具。

猜测

我个人觉得,手头上需要处理的配置数量实在是太多了。我这个人喜欢清楚地知道自己在做什么,以及为什么这么做。然而,这让我与数据科学家的典型工作流程格格不入。

机器学习需要大量的实验。我曾经以为数据科学家一次性训练好模型,但实际上,他们可能需要反复训练才能获得理想的结果。训练模型时,需要调整各种设置,而选择合适的设置更多的是一个反复试验的过程。我必须放弃理解和领悟一切的欲望,才能接受解决机器学习问题所需的实验。

换句话说,数据科学家有点像虚构的疯狂科学家,在实验室里随意混合化学物质——只不过数据科学家混合的是数学函数,而不是装满各种颜色液体的烧杯。

使用 JavaScript 进行机器学习的示例

我对机器学习的基础知识已经打下了扎实的基础,但是我可以用它构建哪些项目呢?在开始讲解代码之前,我们先来聊聊开发人员如何使用机器学习。

使用机器学习时,主要有两种类型的项目:使用预先训练的模型,或构建和训练自己的模型。我在下面提供了这两种类型的例子。

注意:这些演示都是根据Gant Laborde 的 AI 课程中的概念和经验教训制作的

预训练模型示例:

这些应用制作起来非常有趣,几乎不需要任何机器学习知识。我推荐您亲自尝试一下!您可以利用浏览器 API 和 Web 技术快速创建一些令人印象深刻的机器学习项目。

图像 API + MobileNet 示例

动图展示了 mobilenet 对随机照片进行分类

在这个演示中,我从lorem picsum API中提取图像,并使用 React 将它们连接到MobileNet,这是一个可以对图像进行分类的预训练模型。

Lorem Picsum 主要是来自Unsplash 的随机艺术静物和风景照片,因此您可以从 MobileNet 的分类中获得一些有趣的结果。

网络摄像头 + MobileNet 示例

我用 mobilenet 识别各种物体的 Gif

此应用程序将 MobileNet 连接到网络摄像头浏览器 API,以便您可以将手机/相机对准某个物体并对其进行分类。

(如果您对一些疯狂的结果感到疑惑,您应该知道 MobileNet 并未经过识别人类的训练。)

基于浏览器的模型训练示例:

现在我们进入正题。在低端手机和设备上运行这些程序时请注意。

这些示例采用数据集并使用 JavaScript 直接在您的 Web 浏览器中训练模型!

使用 TensorFlow 解决 FizzBu​​zz

Gif 显示模型完成训练并解决 fizzbuzz

此示例向模型输入数千个已使用简单的fizzbuzz算法解析(标记)的数字(100 到 3100)。然后,模型尝试猜测 1-100 之间的数字应该是 fizz、buzz 还是 fizzbuzz。

使用 TensorFlow 进行猫/狗图像识别

我的狗和猫图像识别演示应用程序的 Gif,可以识别随机的狗和猫

该应用程序使用 Gant Laborde 的dogs-n-cats npm 包来训练模型以识别随机的狗或猫。

点击此处查看 codesandbox 上的演示。需要注意的是,在浏览器中使用 2000 张图片训练模型会占用一些内存/资源。

dogs-n-cats 软件包在后台为您完成了大部分准备工作,它会将所有 2000 张猫狗图像预处理并打包成张量。我只需将图像直接输入模型进行训练即可。

其他类型的机器学习

以上示例均涉及监督学习,这意味着我们告诉算法要寻找什么,并为其提供带标签的示例以供学习。监督学习相当简单易懂,但机器学习还有更多方法和应用。

无监督学习和强化学习是两种不同的机器学习方法。在无监督学习中,你给算法一个未标记的数据集,让它自行发现和分类事物。在强化学习中,算法会学习如何通过好或坏的结果来完成任务。以计算机学习通关马里奥关卡为例。

我很想在某个时候尝试一下其他类型的机器学习,但请相信我,通过监督学习取得如此大的进步本身就是一个巨大的里程碑!

您现在是数据科学家吗?

Daniel Herron 在 https://unsplash.com/photos/vBxbZokRL10 上用草书写成的“nope”一词的照片

让我们先把这个问题解决掉:在花了一点时间研究机器学习之后,我绝对不是一个数据科学家

话虽如此,我还是学到了很多关于机器学习的真正内涵,以及数据科学家如何取得我们在这个领域看到的一些令人难以置信的进步。我对计算机视觉、自然语言处理和其他神奇技术背后的魔力(也就是数学)有着深刻的理解。

我也了解机器学习的局限性,并且知道该领域还有很多工作要做。随着更多数据集和更完善、更易用的机器学习框架的普及,我期待着看到未来会发生什么。

就训练模型而言,我确实感觉自己还是个新手。选择合适的激活函数、滤波器、迭代次数等等,涉及太多细微差别和直觉,以至于我觉得自己几乎没有足够的能力去尝试,只能猜测如何正确地训练一个模型。

我也很清楚自己在数据准备过程中使用了大量的捷径。我相信自己可以用电子表格数据训练一个模型,但在准备和标记用于训练的图像方面,我还有很长的路要走。

临别感想

如果你能承受其中涉及的数学运算和反复试验,那么数据科学和机器学习绝对是值得一试的好东西。这是一个充满挑战的技术领域,企业已经开始大力投资,因此,即使对数据科学领域只有基本的了解,对开发者来说也是无价之宝。

我强烈推荐 Gant 的免费机器学习/人工智能概念入门课程。如果你已经完成了这门课程,并且想进一步学习,我推荐你也去看看 Gant 的JavaScript 人工智能/机器学习付费入门课程。Gant 非常努力地让课程中的概念通俗易懂,这一点毋庸置疑。

我希望未来能不断提升自己的机器学习技能。如果您对我接下来的学习方向有任何建议,或者对这篇文章有任何疑问,欢迎在Twitter上联系我!我很乐意听取您的意见。

链接:https://dev.to/leewarrickjr/how-much-can-a-front-end-developer-learn-about-machine-learning-using-only-javascript-2cak
PREV
组织 CSS 时保持理智
NEXT
昂贵的 CSS 属性及其优化方法