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

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"过去的几年中,Python已成为机器学习和深度学习的首选编程语言。与机器学习和深度学习相关的大多数书籍和在线课程要么只用Python,要么再带上R语言。Python有着丰富的机器学习和深度学习库、专门优化的实现,具备可伸缩性和大量功能,因而广受欢迎。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但Python并不是编写机器学习应用程序的唯一选择。社区中有越来越多的开发人员正在使用JavaScript来运行机器学习模型。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"尽管JavaScript(目前)并不能在机器学习领域替代根基深厚的Python,但掌握JavaScript机器学习技能也是有很多不错的理由的,本文就会介绍其中的四个。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"私有机器学习"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"大多数机器学习应用程序都基于客户端-服务器架构。用户必须将数据发送到机器学习模型所运行的地方。客户端-服务器架构有一些显著优势。开发人员可以在服务器上运行他们的模型,并通过Web API将其提供给用户应用程序。这样开发人员就可以使用没法跑在用户设备上的超大型神经网络了。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但在许多情况下,在用户的设备上执行机器学习推断才是最佳选项。例如,由于隐私问题,用户可能不希望将他们的照片、私人聊天消息和电子邮件发送到运行机器学习模型的服务器上。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"还好,并非所有机器学习应用程序都需要昂贵的服务器。许多模型经过压缩后可以跑在用户设备上。此外,移动设备制造商正在为他们的设备配备新型芯片,来支持本地的深度学习推理。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但问题在于,许多用户设备并不默认支持Python机器学习。MacOS和大多数Linux版本预装了Python,但你还是需要单独安装各种机器学习库。Windows用户必须手动安装Python。而移动操作系统对Python解释器的支持非常差。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"相比之下,所有现代移动和桌面浏览器都原生支持JavaScript。这意味着JavaScript机器学习应用程序可以确保在大多数台式机和移动设备上运行。因此,如果你的机器学习模型运行在浏览器中的JavaScript代码上,你就能肯定几乎所有用户都可以访问它。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"市面上已经有一些JavaScript机器学习库了。TensorFlow.js就是一个例子,它是谷歌著名的TensorFlow机器学习和深度学习库的JavaScript版本。如果你使用智能手机、平板电脑或台式计算机访问TensorFlow.js演示页面,会发现许多使用JavaScript机器学习的现成示例。它们在你的设备上运行机器学习模型,而无需将任何数据发送到云端,而且你不需要安装其他任何软件。其他一些功能强大的JavaScript机器学习库包括ML5.js、Synaptic和Brain.js。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.infoq.cn\/resource\/image\/d3\/8e\/d34bd493eccfa2325b50c5df6371fd8e.jpg","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":10}}],"text":"上图:TensorFlow.js应用程序的示例。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"快速和定制的ML模型"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"隐私并不是设备端机器学习的唯一优势。在某些应用程序中,从设备向服务器发送数据的往返过程可能会导致延迟,从而影响用户体验。在其他一些情况下,用户可能希望在没有互联网连接的情况下也能够运行机器学习模型。在这类场景中,在用户设备上运行JavaScript机器学习模型会非常方便。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"JavaScript机器学习的另一个重要用途是模型定制。例如,假设你要开发一个文本生成机器学习模型,可以适应每个用户的语言偏好。一种解决方案是在服务器上为每个用户存储一种模型,并根据用户的数据对其进行训练。随着用户的增长,这将给服务器增加额外的负载,并且还需要你将潜在的敏感数据存储在云端。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"一种替代方法是在服务器上创建一个基本模型,并在用户设备上创建副本,然后使用JavaScript机器学习库来根据用户数据微调模型。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"一方面,这会将数据保留在用户的设备上,而无需将其发送到服务器。另一方面,这样就无需向云端发送额外的推理和训练负载,从而解放服务器的资源。而且,即便用户与服务器断开连接,他们仍然可以使用机器学习功能。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.infoq.cn\/resource\/image\/b7\/e2\/b7dda7dd63ab29c9d3f61a91772c2de2.jpg","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":10}}],"text":"上图:客户端机器学习允许开发人员在用户设备上运行自定义模型。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"轻松将机器学习集成到Web和移动应用程序中"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"JavaScript机器学习的另一个好处是轻松与移动应用程序集成。移动操作系统对Python的支持仍处于初级阶段。但是,市面上已经有了丰富的跨平台JavaScript移动应用开发工具,例如Cordova和Ionic。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"这些工具非常受欢迎,因为你可以用它们只编写一次代码就部署到iOS和Android设备上。为了让代码在不同的操作系统之间保持兼容,跨平台开发工具会启用一个“Webview”,这是一个可以运行JavaScript代码并能嵌入到目标操作系统的原生应用程序中的浏览器对象。这些浏览器对象支持JavaScript机器学习库。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"一个例外是React Native,一种流行的跨平台移动应用程序开发框架,它不依赖Webview来运行应用程序。但是,鉴于移动机器学习应用程序的普及,谷歌已经为React Native发布了TensorFlow.js的一个特别版本。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果你是用原生代码编写移动应用,并且希望集成JavaScript机器学习代码,则可以将自己的嵌入式浏览器对象(例如iOS中的WKWebView)添加到你的应用中。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"还有其他一些针对移动应用程序的机器学习库可选,例如TensorFlow Lite和CoreML。但是,它们需要在移动应用的目标平台中编写原生代码。相比之下,JavaScript机器学习兼容性极佳。如果你已经实现了机器学习应用程序的浏览器版本,则只需很少或不做任何更改即可轻松将其移植到移动应用程序中。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"服务器上的JavaScript机器学习"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"机器学习的主要挑战之一是训练模型,对于深度学习而言尤其如此。在深度学习中,学习过程需要在多个epoch上进行昂贵的反向传播计算。虽然你可以在用户设备上训练深度学习模型,但如果神经网络很大,这可能需要数周或数月的时间才能完成。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Python更适合机器学习模型的服务端训练。它可以扩展并在服务器群集上分配负载,以加快训练过程。训练完模型后,你可以对其进行压缩并交付给用户设备以推理。所幸,用不同语言编写的机器学习库是高度兼容的。例如,如果你使用TensorFlow或Keras for Python训练深度学习模型,则可以将其保存为几种独立于语言的格式,例如JSON或HDF5。然后,你可以将保存的模型发送到用户的设备,并使用TensorFlow.js或其他JavaScript深度学习库来加载。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但值得注意的是,服务端JavaScript机器学习也在日趋成熟。你可以在JavaScript应用服务器引擎Node.js上运行JavaScript机器学习库。TensorFlow.js有一个适用于运行Node.js的服务器的特别版本。与TensorFlow.js交互的JavaScript代码与在浏览器中运行的应用程序所使用的JavaScript代码相同。但在后台,这个库利用服务器上的特殊硬件来加快训练和推理速度。PyTorch是另一种流行的Python机器学习库,目前还没有正式的JavaScript实现,但开源社区已经为这个库开发了JavaScript绑定。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"使用Node.js进行机器学习是一个相当新的概念,但它正在快速发展,因为人们越来越有兴趣在Web和移动应用程序中添加机器学习功能。随着JavaScript机器学习社区的不断发展和相关工具的不断成熟,对于许多希望在自身技能组合中添加机器学习的Web开发人员来说,这种技术可能会成为他们的首选。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"作者介绍"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Ben Dickson是一名软件工程师,也是TechTalks的创始人,这个博客探讨了技术是如何解决和制造问题的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"原文链接:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/venturebeat.com\/2021\/04\/23\/4-reasons-to-learn-machine-learning-with-javascript\/?fileGuid=CTPT8pVQqdv8DvD3","title":"","type":null},"content":[{"type":"text","text":"https:\/\/venturebeat.com\/2021\/04\/23\/4-reasons-to-learn-machine-learning-with-javascript\/"}]}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章