写点什么

用 JavaScript 学习机器学习的 4 个理由

  • 2021-05-18
  • 本文字数:2763 字

    阅读完需:约 9 分钟

用JavaScript学习机器学习的4个理由

过去的几年中,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/

2021-05-18 09:302447
用户头像
刘燕 InfoQ高级技术编辑

发布了 1112 篇内容, 共 539.7 次阅读, 收获喜欢 1977 次。

关注

评论

发布
暂无评论
发现更多内容

规则引擎调研及初步使用 | 京东云技术团队

京东科技开发者

算法 规则引擎 企业号 6 月 PK 榜 匹配算法 rete

带你彻底掌握Bean的生命周期

华为云开发者联盟

后端 开发 华为云 华为云开发者联盟 企业号 6 月 PK 榜

强化学习从基础到进阶-案例与实践[2]:马尔科夫决策、贝尔曼方程、动态规划、策略价值迭代

汀丶人工智能

人工智能 深度学习 强化学习 马尔科夫决策 6 月 优质更文活动

龙蜥白皮书精选:Ancert——硬件兼容性验证与守护

OpenAnolis小助手

开源 龙蜥社区 龙蜥操作系统 Ancert 硬件兼容性

2024深圳电博会

AIOTE智博会

电子信息展

直播源码搭建技术弹幕消息功能的实现

山东布谷科技

软件开发 直播 源码搭建 直播源码

Flutter状态管理新的实践 | 京东云技术团队

京东科技开发者

flutter ios 企业号 6 月 PK 榜 声明式UI

龙蜥操作系统完成与高通 Cloud AI 100 兼容认证

OpenAnolis小助手

开源 操作系统 龙蜥社区 兼容适配 高通

CSR格式如何更新? GES图计算引擎HyG揭秘之数据更新

华为云开发者联盟

大数据 华为云 华为云开发者联盟 企业号 6 月 PK 榜

火山引擎数智平台最新直播活动:ByteHouse技术架构与最佳实践分享

字节跳动数据平台

数据 活动 直播

2023上半年Java高频面试题库总结(600+java面试真题含答案解析)

小小怪下士

Java 程序员 面试

对线面试官-Redis(一)

派大星

Java 面试题

如何设计一个高效的分布式日志服务平台

百度Geek说

分布式 企业号 6 月 PK 榜 服务平台 大模型结合 6 月 优质更文活动

从0到1构造自定义限流组件 | 京东云技术团队

京东科技开发者

限流算法 令牌桶算法 企业号 6 月 PK 榜 接口限流

移动端浏览器性能优化探索

阿里技术

性能优化 移动端开发

分享6个SQL小技巧

EquatorCoco

sql 开发语言

趋势分享 | 多云时代数据安全面临的挑战

原点安全

杭州市等级保护测评机构名录-2023年

行云管家

等保 等级保护 等保测评 杭州

一场专属开发者的技术盛宴——华为开发者联创日首站登陆深圳

华为云PaaS服务小智

云计算 AI 华为云 华为开发者大会2023

堡垒机免费版在哪里下载?是否安全可靠?

行云管家

网络安全 堡垒机 免费堡垒机

PWA和小程序的比较与优势

没有用户名丶

软件测试/测试开发丨Pytest结合数据驱动-JSON

测试人

json 程序员 软件测试 数据驱动 pytest

【直播预告】今晚7点,来HarmonyOS极客松直播间与技术专家聊聊新技术!

HarmonyOS开发者

HarmonyOS

基于ChatGPT函数调用来实现C#本地函数逻辑链式调用助力大模型落地

EquatorCoco

函数 C++ ChatGPT

英特尔锐炫:驱动持续进步,尽展硬件潜力

E科讯

ChatGPT小型平替之ChatGLM-6B本地化部署、接入本地知识库体验 | 京东云技术团队

京东科技开发者

知识库 企业号 6 月 PK 榜 ChatGLM-6B LLM模型

软件设计原则与设计模式

源字节1号

开源 软件开发 前端开发 后端开发 小程序开发

DevOps|中式土味OKR与绩效考核落地与实践

laofo

DevOps OKR 研发效能 绩效考核

强化学习从基础到进阶-常见问题和面试必知必答[2]:马尔科夫决策、贝尔曼方程、动态规划、策略价值迭代

汀丶人工智能

人工智能 深度学习 强化学习 马尔科夫决策 6 月 优质更文活动

用JavaScript学习机器学习的4个理由_AI&大模型_Ben Dickson_InfoQ精选文章