Go 语言在机器学习中有未来吗?| 观点

Go 是一种开源编程语言,最初由 Google 设计,用于优化系统级服务的构建和使用、在大型代码库上轻松工作,以及利用多核联网机器。Go 于 2009 年推出,作为一种静态类型和编译型编程语言,深受 C 语言的影响,注重简单性、安全性和并发性。

Go 最主要用于创建大规模应用程序,例如 Docker 和 Kubernetes。此外,由于低延迟、高效的跨平台性能和易扩缩性,Go 被 Netflix、PayPal 和 Uber 等公司广泛使用。不过,尽管 Go 有很多优点,但它在机器学习中并不常用

本文将探索在机器学习中积极使用 Go 所要面对的挑战以及 Go 可以在机器学习领域立足的途径


将 Go 用于机器学习的主要挑战

Go 是一种强大高效的编程语言,速度快、性能高,能够满足 AI 解决方案的 CPU 密集型、高计算量计算需求。它比 Python 更快,并具有易用、高效和并发等诸多优势,在某些情况下优于机器学习中使用的其他语言。

Go 有潜力创建稳健且可扩缩的机器学习应用,甚至性能也比某些竞品更为优越,但它在 ML 中仍然是一个被忽视的选择。Go 在机器学习中的低采用率主要归因于它面临的一些重大挑战,而机器学习领域的旧编程语言已经解决了这些挑战。Go 面临的挑战包括缺少高级库、没有 CUDA 的原生绑定,以及统计和呈现功能不够完善。

缺少高级库

作为一门相对较新的语言,相较于已经存在了数十年且拥有完善机器学习生态系统和库的其他语言,Go 的工具和库要少得多。因此,Go 可用于 ML 任务的高质量库和工具更少

这意味着,想为机器学习使用 Go 的开发者必须花费更多时间构建自定义解决方案,或者与并非专为 Go 设计的现有库和框架集成。

扫描二维码关注公众号,回复: 16299753 查看本文章

多年来,Go 库已经获得多项显著改进:GoLearn 提供了 scikit-learn 样式的拟合与预测功能,以及测试拆分和交叉验证效用函数,GoMind 提供了神经网络功能,类似于 TensorFlow 的图计算机器学习Gorgonia 提供了扩展能力。

但总体而言,这些库的深度仍逊于以 Python 为中心并且经过了数十年发展的库。并且,在某些功能上,Go 也会体现出显著差距,例如自然语言处理 (NLP) 任务,特别是与 spaCyNLTK 相比。

没有 CUDA 的原生绑定

统一计算设备架构 (CUDA) 是 NVIDIA 为图形处理单元 (GPU) 编程开发的并行计算平台和编程模型。它让开发者可以利用 NVIDIA GPU 的高性能计算能力加快各种应用,例如,机器学习、科学计算、图像和视频处理等。

以 GPU 的大规模并行性加快可并行化的计算是 CUDA 的主要优点。然而,Go 不像 Python 那样具有与 CUDA 的原生绑定

要在 Go 代码中使用 CUDA,首先需要导入并利用 C 函数来创建 CUDA 绑定。公平地说,C 代码通过 cgo 命令嵌入 Go,从而可以创建调用 C 代码的 Go 软件包。但是,只有熟练掌握 C 语言才能依赖 C 代码和 cgo 进行高效的编码和调试。这会产生巨大的开销,同时也会产生特定于 C 语言的问题,例如内存安全情况和安全漏洞。

也有第三方代码软件包带有用于 CUDA 的 Go 绑定的效用函数,例如 cuda

实验约束

从本质上讲,Go 并不特别适合实验。Go 代码是一种编译型语言,会转化为可由 CPU 直接执行的机器码,而不是在运行时由运行时环境解释。这项特性有助于提高 Go 的速度和效率,但是,如果不先编译,就无法编写和执行 Go 代码。因此,相对于 Python 和 R 等解释型语言,在 Go 中相对难以尝试不同的想法和测试不同的问题解决办法。

Go 不像其他语言那样抽象自底层硬件。这对于需要低级优化或严格控制硬件资源的任务来说可能是一个优势,但也可能使 Go 代码更加冗长,需要更多的前期设置和配置,而 Python 在某些情况下相对而言更灵活、更易用。考虑到 scikit-learn 和 TensorFlow 等库和框架的深度,以及在一个软件包中为特征提取、聚类和降维等任务提供更简单解决方案的可用性,Go 并不是机器学习实验的最理想选择。

Go 这样的编译型语言通常是高性能任务的更优选,例如服务器端编程和实时应用程序优化。

数学和统计功能不足

如前所述,Go 缺乏 Python 等业界重量级选手的深度。它只有少量专注于统计、微积分和矩阵操作的专属库和软件包,不足以满足机器学习和人工智能开发的需求。

这不一定对所有人来说都是劣势,有些开发者乐于为机器学习算法或数学逻辑主动编写代码。不过,这也表示 Go 在相同数据操作、分析和预测算法上的易用性仍要低于 Python。

总体而言,Python、R 和 Julia 推出最早,在机器学习社区中地位稳固。Go 要想成为可行的替代方案,还有很长一段路要走,特别是这些现有编程语言也在持续发展,使其 机器学习和 AI 功能更优秀、更简单、更有效。


Go 中的高级库

Go 中的 GonumGorgoniaGoLearn 等高级库为构建和训练神经网络、执行数值计算和其他机器学习任务提供了工具。

然而,它们的功能并不如 Python 库选项中的功能丰富。TensorFlow、scikit-learn 和 spaCy 等 Python 库和框架是为满足机器学习开发者的需求而创建和迭代开发,在机器学习行业中很受欢迎。它们提供了适合自然语言处理、图像嵌入向量、神经网络和其他机器学习 要素需要的功能。

相同的功能在 Go 中也可以实现,并且,得益于 Go 相比其他编程语言的优势(例如联网、并发和数据处理),它们可能会更强大、更高效。

不过,创建这些功能目前只能在 Go 社区中产生用处,因为 Go 在机器学习社区中并不像 Python 或 R 等语言那样流行。与更早的对应功能相比,其贡献者数量也存在巨大差距,导致库和工具的生态系统相对较小,使得寻找某些问题的既有解决方案更加困难。


情况是否正在发生变化?

Go 的人气越来越高,社区也在不断发展。目前,据 StackShare 统计,已有 2,751 家公司使用 Go,其中包括 Uber、Twitch、Shopify 和 Slack。此外,根据 2021 Stack Overflow 开发者调查,大约 9.55% 的开发者使用 Go,是第 14 位最流行的编程语言。

虽然这对 Go 社区来说是个好消息,但它并没有真正转化到机器学习领域。Go 最出名的能力在于创建可扩缩服务器和大型软件系统、编写并发程序以及启动快速轻量级微服务。就连 Go 官方网站也没有将机器学习列为其典型用例。

这表明 Go 目前正在远离机器学习领域,也在机器学习社区中缺乏立足点。

未来用例

Go 在机器学习方面还没有值得注意的亮点。不过,考虑到语言的优势,与其将 Go 视为开发机器学习模型的语言,不如将其看作为机器学习模型服务的语言

Go 可用于构建机器学习模型服务器,允许模型被其他应用程序或系统访问和使用。这对于在生产中部署机器学习模型或构建可供其他开发者或用户访问的机器学习 API 非常有用。它可用于构建机器学习应用,例如由机器学习驱动的推荐引擎或自然语言处理工具。它还可用于为这些类型的应用构建后端基础架构或面向用户的界面。

对于 Go 社区来说,创建更多工具包和框架来实现更快、更高效的服务器端机器学习,可能会在机器学习领域为更多实验有效开放代码库。


结论

本文探索了 Go 在机器学习方面的潜在优势、目前阻碍 Go 在这一领域得到广泛使用的挑战、改进的途径,以及 Go 的潜在未来用例。



本文由外部贡献者撰写

Sooter Saalu

Sooter Saalu 是一位数据专家,在职业生涯中担任过数据分析师、数据科学家和数据工程师。他具有临床心理学教育背景,致力于为技术和非技术受众撰写引人入胜的数据故事。



GoLand 相关阅读

关于 GoLand

GoLand 是对 JavaScript、TypeScript 和数据库提供扩展支持的跨平台 Go IDE。GoLand 不仅可以让你快速读写和修改 Go 代码,它还能与 Web、前端、后端和数据库共同运作。


GoLand 提供了一系列智能功能,如智能代码补全、一步撤销的安全重构、强大的内置调试器以及具有快速修复的实时错误检测。借助 GoLand,无论是新手还是经验丰富的专业人士,所有 Go 开发者都可以创建快速、高效且可靠的代码。

进一步了解 GoLand

⏬ 戳「阅读原文」了解更多

本文分享自微信公众号 - JetBrains(JetBrainsChina)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

Redis 7.2.0 发布,影响最深远的版本 中国程序员拒写赌博程序被拔 14 颗牙,全身损伤达 88% Flutter 3.13 发布 System Initiative 宣布将其所有软件全部开源 字节首个大模型独立 App 亮相,Grace 更名“豆包” Spring 6.1 已兼容虚拟线程和 JDK 21 Linux 平板电脑 StarLite 5:默认搭载 Ubuntu、12.5 英寸 Chrome 116 正式发布 红帽重新部署桌面 Linux 开发,主要开发者被调离 Kubernetes 1.28 正式发布
{{o.name}}
{{m.name}}

猜你喜欢

转载自my.oschina.net/u/5494143/blog/10091967