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

2023-11-09

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

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

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

PS:GoLand 使 Go 代码的阅读、编写和更改变得非常容易。即时错误检测和修复建议,通过一步撤消快速安全重构,智能代码完成,死代码检测和文档提示帮助所有 Go 开发人员,从新手到经验丰富的专业人士,创建快速、高效、和可靠的代码。

GoLand正式版下载

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

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

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

缺少高级库

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

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

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

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

没有 CUDA 的原生绑定

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

以 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 并不是 ML 实验的最理想选择。

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

数学和统计功能不足

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

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

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

Go 中的高级库

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

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

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

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

情况是否正在发生变化?

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

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

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

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

未来用例

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Go语言在机器学习中有未来吗? 的相关文章

随机推荐

  • 爬虫实例8(os模块的用法)

    import requests import os url https ss3 bdstatic com 70cFv8Sh Q1YnxGkpoWK1HF6hhy it u 460770515 1829173594 fm 26 gp 0 jp
  • 什么是数字水印

    经常有文章把数字签名和数字水印 傻傻分不清 那今天就介绍一下数字水印 一 数字水印技术原理 数字水印是一种信息隐藏技术 它利用人体感官的限制 将数字信号 如图像 文字 符号 数字等一切可以作为标记 标识的信息与原始数据 如图像 音频 视频数
  • 替代for循环,让Python代码更pythonic

    通常如下使用场景中会用到 for 循环 在一个序列来提取一些信息 从一个序列生成另一个序列 写 for 已成习惯 幸运的是 Python 已经有很多工具可以帮助你完成这些工作 你只需要转移你的思路 并以不同的角度来思考它 通过避免编写 fo
  • Pycharm更换python解释器

    Pycharm工程如何更换pycharm解析器 Mac Pycharm gt Preferences 然后会出来如下界面 Windows file gt Default Settings
  • leetcode 300. 最长递增子序列

    2023 8 23 本题也是dp算法解决的经典题型 dp i 的含义 数组前i个元素的最长递增子序列长度 不多说 直接上代码 class Solution public int lengthOfLIS vector
  • 为什么Git用SHA做版本控制,而非像SVN用int数字或者是时间戳

    在分布式领域中 做的最出色的莫过于Git 而Git主要强大之处就在于运用sha作为版本控制的算法 而许多分布式架构的项目也都意义效仿 而sha算法为什么如此神奇呢 SHA是什么 百度百科定义是 安全散列算法 英语 Secure Hash A
  • pycharm+gitee安装与配置

    下载安装 1 下载地址 https www jetbrains com pycharm download section windows 选择这个免费版进行安装 2 自定义安装路径 3 根据自己的需求选择项 点击下一步 一步步的安装下去就行
  • please select a valid python interpreter(请选择一个解释器)

    1 更改Pycharm的设置 打开settings CTRL ALT S 或者file gt settings 2 在查询框中输interpreter 进行查询 3 选择界面右边上的配置按钮 右击选择add local 4 选择system
  • Linux服务器成功安装CUDA11.3和cudnn

    说在前面 NVIDIA的显卡驱动与CUDA的版本并不是严格的一一对应关系 CUDA实际上也只是一个工具包 我们可以根据自己的需求进行安装 即可以安装多个CUDA版本 同时CUDNN是一个SDK 专门用于神经网络的加速包 它与CUDA也没有严
  • 巨细!Python爬虫详解

    Python技术 爬虫 又称为网页蜘蛛 网络机器人 在 FOAF 社区中间 更经常的称为网页追逐者 它是一种按照一定的规则 自动地抓取网络信息的程序或者脚本 如果我们把互联网比作一张大的蜘蛛网 那一台计算机上的数据便是蜘蛛网上的一个猎物 而
  • 第十一章 GetAway服务网关详解

    目录 一 服务网关使用背景 二 服务网关的种类和区别 三 Gateway 简介 优点 缺点 Gateway组成 三 快速入门案例 1 创建网关服务 引入 GetAway 依赖 2 创建主类 3 配置GetAway网关服务 4 创建 订单服务
  • PyCharm安装教程,图文教程(超详细)

    作者简介 CSDN top100 阿里云博客专家 华为云享专家 网络安全领域优质创作者 推荐专栏 对网络安全感兴趣的小伙伴可以关注专栏 网络安全入门到精通 PyCharm 一 PyCharm下载安装 二 Python下载安装 三 创建项目
  • Unity点击物体后,移动到物体所在位置

    Unity点击物体后 移动到物体所在位置 方法一 OnMouse检测 需要Collider组件 脚本挂在被点击的物体上 using System Collections Generic using UnityEngine using Uni
  • 【Python】字典dict 基础用法

    参考资料 Python字典 Dictionary 操作全解 创建 读取 修改 添加 删除 有序字典 浅复制 排序 字典是 键 值 对的无序可变序列 字典中的每个元素可以分为两部分 键 和 值 定义字典时 每个元素的 键 和 值 用冒号分隔
  • 朴素贝叶斯分类器

    贝叶斯分类器 优点 数据较少任然有效 可以处理多类别的问题 缺点 输入数据准备方式比价敏感 数据类型 标称型数据 朴素贝叶斯决策理论 假设有两类数据 A 和 B 假设有两类数据 A和B 假设有两类数据 A和B 平面直角坐标
  • springboot开发环境生产环境配置文件切换

    一 单个文件切换环境里 在application yml配置文件中添加如下信息 server port 8081 spring profiles active prod 激活prod生产环境 server port 8083 spring
  • “物联网+区块链”技术给农业发展带来新机遇

    运用 物联网 区块链 技术 从鸡苗供应 养殖 再到屠宰 流通等环节 每一只肉鸡的信息数据都被如实记录在 身份证 上 且不可篡改 经区块链加密的多宝鱼生长数据 通过 绿色履历 呈现在消费者面前 从土地承包到播种 加工 稻米的相关信息全部在区块
  • 【机器学习实战】5、Logistic 回归

    文章目录 5 1 基于Logistic回归和Sigmoid函数的分类 5 2 基于最优化方法的最佳回归系数确定 5 2 1 梯度上升法 5 3 python实战 5 3 1 查看数据集分布情况 5 3 2 训练 5 3 3 绘制决策边界 5
  • OpenCV相机标定全过程

    一 OpenCV标定的几个常用函数 findChessboardCorners 棋盘格角点检测 bool findChessboardCorners InputArray image Size patternSize OutputArray
  • Go语言在机器学习中有未来吗?

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