写点什么

用 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:302709
用户头像
刘燕 InfoQ高级技术编辑

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

关注

评论

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

今天来聊聊如何挑书

封不羁

读书 个人感想

专科程序员与本科程序员之间有什么区别?薪资待遇又差多少?

码农月半

spring 程序员 面试

计算机操作系统基础(十一)---线程同步之互斥量

书旅

php laravel 线程 操作系统 进程

什么时候不要用微服务?以 Istio 为例

无予且行

Java 微服务 后端

PHP实现一致性哈希算法

任小龙

如何站在架构师的角度做框架

小新

Java 集合 框架

面试中必问的JVM应该怎么学(面试题含答案)

猿灯塔

授权专利争夺正当时

CECBC

数据隐私 授权专利 平台应用服务

cms项目系列(一)——SSM框架搭建

程序员的时光

spring

程序员阿里、京东、美团面试整理的面试题,测试一下你都会了吗?

小谈

Java 阿里巴巴 面试

源码分析 | 数据异构Canal 初探

小新

spring 那点事儿——让你少走弯路

爱java爱自己

Spring Cloud Spring Boot

农产品电商平台的S曲线分析

石云升

增长 S型曲线 破局点

1.2w字 | 初中级前端 JavaScript 自测清单 - 1

Geek_z9ygea

Java 大前端 Web

区块链+金融赋能高原特色农业重点产业

CECBC

打破信息孤岛 区块链+咖啡 特色农业 咖云链

Java架构-Apache POI Excel

猿灯塔

ConcurrentHashMap里面也有死循环

无予且行

Java jdk 面试 jdk8

如何搭建一个Zookeeper集群

Rayjun

大数据 zookeeper 分布式

你真的理解透彻高并发了吗?来看看架构师眼里的高并发

小谈

Java 面试 高并发 高并发系统设计

在Windows上使用IIS来托管站点

Puran

windows IIS Server

编程核心能力之组合

顿晓

Java 学习 pipe

架构师训练营第五周学习总结

张明森

架构师训练营 第 5 周作业

Lingjun

极客大学架构师训练营

饿了么4年,阿里2年:我的总结与思考

程序员生活志

工作经验

SQLite你用对了吗

山楂大卷

sqlite 数据库 选型

解读 java 并发队列 BlockingQueue

猿灯塔

Java

架构师训练营 -week5 命题作业

J.Smile

极客大学架构师训练营

锦囊篇|一文摸懂SharedPreferences和MMKV(二)

ClericYi

为什么建议项目中统一线程池类?

张挺

面试官:既然CPU有MESI,为什么 JMM 还需要volatile关键字?

犬来八荒

Java 面试 JVM 硬件

【思考】互联网厂商争夺企业市场

superman

企业中台 互联网

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