17611538698
webmaster@21cto.com

Golang 会成为 AI 里的 Python 杀手吗?

编程语言 0 60 19小时前
图片

你知道,机器学习世界几乎一直是 Python 的游乐场。这门编程语言拥有大量的库——TensorFlow、PyTorch、Scikit-learn 等等库——可以说,它已经成为数据科学家和机器学习人员的默认选择。

但是如果有一种语言潜伏在暗处,也可以做类似的事情,而性能要好得多,那会怎样?

🤔 嗯,这种编程语言可能就是 Go。本文主要探讨Go 可以为机器学习做些什么,为什么你应该考虑使用它,以及如何开始行动。

Go 的机器学习秘密武器🏓

Go(或者如果你觉得好听点,也可以叫它 Golang)是 Google 创建的一种静态类型编译语言。它的特点是简单、高效,可以同时处理大量事务(这是并发性的一部分)。 现在我们继续,我不撒谎,它没有 Python 那样多的机器学习专用库。但是,这是一个很大的Go 生态系统正在快速发展,越来越多的工具涌现出来用于机器学习任务。

以下是使 Go 成为强大竞争者的关键特征:

  • 性能: 🚀 Go 的编译特性意味着显著加快执行速度,这对于计算密集型 ML 来说是一个重大改变。
  • 并发性: 🤝 内置的 goroutines 和通道可实现高效的并行处理,非常适合大型数据集。
  • 静态类型: ✅ 尽早发现错误,从而产生更健壮、更易于维护的代码(更少的麻烦!)。
  • 可扩展性: ⚙️高效的资源管理和并发性使 ML 应用程序的扩展变得更加容易。
  • 不断发展的生态系统: 🌱Go 机器学习社区充满活力并且正在快速开发新的工具和库。

当 Go 胜过 Python 时:用例和场景🤔 好吧,让我们面对现实。Python 已经取得了巨大的领先优势,而且它不会很快消失。但在某些情况下,选择 Go 进行机器学习项目是明智之举

这就是 Go 真正闪耀的地方:

  • 高吞吐量预测服务: 🏭 想象一下,你正在构建一个需要每秒进行数百万次预测的系统 — 想想欺诈检测、广告中的实时竞价或高频交易。 Python 的 GIL 和解释器开销可能成为这里的主要瓶颈。 Go 的速度和并发性使你能够以更少的资源处理更高的吞吐量。
  • 大规模数据预处理管道: ➿ 在训练模型之前,你通常需要清理、转换和准备大量数据集。这可能涉及高度可并行的复杂操作。Go 的 goroutine 和通道使构建这些数据管道变得非常高效,与 Python 相比,处理时间大大缩短。
  • 资源受限的环境: 📱 想想嵌入式系统、边缘设备,甚至只是想尽量减少云计算成本。与 Python 应用程序相比,Go 的内存占用更小,启动时间更快,在这些情况下可以发挥显著优势。
  • 构建自定义高性能 ML 组件: 🛠️ 如果你要从头开始构建专门的机器学习系统,或者需要优化特定组件以实现最佳性能,Go 可为你提供细粒度的控制。你不受现有 Python 库的限制。这就是 Gorgonia 等库发挥作用的地方。
  • 长期可维护性很重要👨‍💻:与 Python 相比,Go 的静态类型更容易维护。在处理大型项目时(ML 中通常如此),静态类型可以尽早发现错误,并帮助开发人员更快地了解代码流程。
  • 您已经在使用 Go: ➡️这似乎很明显,但如果你的团队或公司已经在基础设施的其他部分对 Go 进行了大量投资,那么使用 Go 进行机器学习可以简化技术堆栈并减少管理多种语言的开销。
  • 易于学习🧑‍🎓:Go 注重简单性和极简设计,让新开发人员更容易上手。这使得社区能够快速发展,创建新库并扩大支持。

并不是说 Go总是比 Python 更好。而是要认识到 Go 为机器学习领域中的特定用例和场景提供了一系列引人注目的优势。

自己动手:探索 Go 的 ML 库🏊 那么,我们该如何Go 的这种魔力用于机器学习?让我们深入研究库领域。这次我们将不仅限于计算机视觉。 Go 的 ML 库概况:一起比较观察🗺️ 我们不必关注单个任务,而是看看一些关键的 Go 库以及它们是如何堆叠的:

  • Gorgonia: ✨ 你可以将 Gorgonia 视为 Go 版 TensorFlow 或 PyTorch,重点是符号计算和微分。它非常适合从头开始构建复杂的神经网络。它提供较低级别的原语,让您拥有更多控制权,但与 Python 中的 Keras 相比,也需要更多的手动工作。它在您需要对模型架构和训练过程进行细粒度控制的情况下表现出色。

通过 GitHub探索

  • GoLearn: 📈 如果 Scikit-learn 是你在 Python 中的首选,那么 GoLearn 可能是你在 Go 中的入门选择。它是一个更通用的机器学习库,提供用于分类、回归、聚类和数据预处理的工具。它的设计易于使用和入门,类似于 Scikit-learn 的理念。对于不一定需要深度学习的任务来说,这个是一个不错的选择。
  • GoMind: 🧠 GoMind 专注于神经网络,其目标是简单易用。如果你想要一种直接的方式来创建和训练神经网络,而又不必深入研究 Gorgonia 等库的复杂性,那么这是一个不错的选择。你可以将其视为一种更用户友好但可能不太灵活的替代方案。
  • GoCV: 🖼️ 是的,我们提到了它,但请一定要结合上下文!GoCV 为 OpenCV 提供绑定。虽然它专注于计算机视觉,但重要的是要记住,计算机视觉通常与机器学习相交叉(想想物体检测、图像分类)。因此,虽然它不是一个通用的 ML 库,但如果你的工作涉及图像或视频,它就是拼图中的关键一块。
  • gonum/mat(来自 Gonum): ➕严格来说,这不是一个“ML”库,但 Gonum 的mat软件包必不可少。它提供矩阵运算,这是几乎所有机器学习算法的基础。它是 Go 版的 NumPy。如果没有高效的矩阵运算,你就无法在 ML 中做很多事情。

主要区别与注意事项:

  • 成熟度: Python 的库通常更成熟,拥有更大的社区和更详尽的文档。Go 的库较新,但正在迅速赶上。
  • 抽象级别: Go 库提供的抽象级别往往低于一些 Python 库。这意味着你可能需要自己编写更多代码,但您也可以更好地控制流程。(Gorgonia 与 Keras 就是一个很好的例子)。
  • 性能:正如我们所强调的,Go 的编译特性使其库具有显著的性能优势,尤其是对于计算密集型任务而言。
  • 社区规模:截至 2025 年 3 月,Go ML 社区仍然比 Python 社区小。这意味着社区支持不太容易获得。

一个简单的 GoLearn 示例(这次没有计算机视觉!)💻

让我们使用 GoLearn 训练一个简单的线性回归模型:


package main

import (
 "fmt"
 "log"
 "github.com/sjwhitworth/golearn/base"
 "github.com/sjwhitworth/golearn/linear_models"
)
func main() {
 // Load data from a CSV file (you'd need to create this file)
 rawData, err := base.ParseCSVToInstances("data.csv", true) // true indicates headers exist
 if err != nil {
 log.Fatal(err)
 }
 // Split the data into training and testing sets
 trainData, testData := base.InstancesTrainTestSplit(rawData, 0.8) // 80% for training
 // Create a new linear regression model
 model := linear_models.NewLinearRegression()
 // Train the model
 err = model.Fit(trainData)
 if err != nil {
 log.Fatal(err)
 }
 // Make predictions on the test data
 predictions, err := model.Predict(testData)
 if err != nil {
 log.Fatal(err)
 }
 //A very basic way to check:
 fmt.Println(predictions)
 // Evaluate the model (you'd typically use a metric like R-squared)
 // (GoLearn provides evaluation metrics, but we're keeping it simple here)
 // ...
}

以下,我们来解释代码:

  1. 导入包: 📦我们导入 GoLearn 的base包用于数据处理和linear_models回归模型。
  2. 加载数据: 📂 我们从 CSV 文件加载数据(您需要data.csv使用数据创建)。true参数表示 CSV 文件有一个标题行。
  3. 分割数据: ➗ 我们将数据分成训练集(80%)和测试集(20%)。
  4. 创建模型: ➕我们创建一个新LinearRegression模型。
  5. 训练模型:Fit 💪我们使用训练数据的方法训练模型。
  6. 做出预测: 🔮我们使用训练后的模型对测试数据做出预测。
  7. 打印:我们打印预测结果(在实际场景中,你会使用适当的评估指标)

这演示了如何使用 GoLearn 完成基本的机器学习任务。它相对简单,类似于在 Python 中使用 Scikit-learn 的方式。

未来属于 Go?🎯

即使 Python 仍是王者(目前而言),Go 也是机器学习领域的有力竞争者。Go 具有速度、并发性和可扩展性的优势。尽管 Python 的生态系统更大,但 Go 的发展速度很快,并且已经非常适合生产环境。所以,是的,它绝对值得考虑用于您的下一个 ML 项目。

这种变化可能不会在一夜之间发生,但潜在的好处呢?它们是巨大的。了解 Go 的强大功能和效率,您知道,也许您会发现机器学习中一些很棒的新可能性!

让我们谈谈 Go 和 ML!📣

你是否正在考虑将 Go 用于机器学习项目?或者可能已经在使用它了?请在下面的评论部分告诉我们你的经验!让我们聊聊 Go 在 ML 世界中的未来!

 

作者:场长

评论