【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

用 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/

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

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

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

关注

评论

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

java零基础入门-Java反射机制

喵手

Java 7月月更

【Python技能树共建】python autoscraper 模块

梦想橡皮擦

Python 7月月更

GAN简介及原理分析

秃头小苏

GAN 7月月更

数字化需要安全沙箱技术与零信任架构

FN0

安全 数据安全 零信任

并行计算的量化模型及其在深度学习引擎里的应用

OneFlow

深度学习 模型

【C语言】进阶指针One

謓泽

7月月更

不习惯的Vue3起步一

空城机

Vue3 7月月更

Qt | 定时器实现动画效果时卡住了

YOLO.

c++ 定时器 qt 动画效果 7月月更

面试官:说说数据库事务吧!我:这还不简单

了不起的程序猿

数据库 Java 开发 Java’

Yunikorn 在云上大数据平台中的应用

移动云大数据

恭喜,成功入坑 GitHub 。。。

攻城狮杰森

git GitHub IP DNS 7月月更

CRMEB 单商户 v4.0 升级,稳得很!

CRMEB

科普达人丨漫画图解SGX加密计算黑科技

阿里云弹性计算

加密计算 TEE

一种基于 HiveMetaStore 的跨源查询方案实践

移动云大数据

hive JDBC

基于OpenHarmony的智能指南针

OpenHarmony开发者

OpenHarmony

首个先进级!阿里云大数据+AI平台通过信通院数据平台整体解决方案最高等级评测

阿里云大数据AI技术

人工智能 机器学习 大数据 运维

LeetCode-141. 环形链表(java)

bug菌

Leet Code 7月月更

Android adb常用命令

沃德

android 程序员 7月月更

Javva基础:多线程重点回顾

百思不得小赵

Java 多线程 7月月更

基于物联网设计的老人防摔倒报警系统(华为云IOT)

DS小龙哥

7月月更

ABAP 编程语言中 Class(类)的设计原理剖析

Jerry Wang

服务器 SAP abap Netweaver 7月月更

直播APP系统源码——短视频直播系统源码

开源直播系统源码

直播系统源码 开源源码 短视频系统源码

Apache Pulsar 跨地域复制方案选型实践

移动云大数据

Java应用的优雅停机总结

陈德伟

Java tomcat Spring Boot web开发 优雅停机

三千余字搞定Java并发框架AQS,干货

了不起的程序猿

AQS 并发 Java’ java 编程

浅析 Region split 引入 HFileLink 优化子 Region 操作实现原理

移动云大数据

HBase

实现 ABAP 条件断点的三种方式分享

Jerry Wang

debug SAP abap Netweaver 7月月更

JavaWeb Dubbo使用

沃德

Java 程序员 7月月更

Qt|使用QWebEngineView加载HTML使用及问题

中国好公民st

qt 7月月更

恭喜这2个大模型开源项目进入OpenI启智社区孵化培育管道

OpenI启智社区

人工智能 开源 大模型

Web预览附件

源字节1号

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

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