Go 用于机器学习:语言的优势与局限

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Go在机器学习中的应用:权衡可能性与局限性



机器学习(ML)领域与Python紧密相连。然而,近年来开发者们越来越多地问这样一个问题:"Go(Golang)能否用于机器学习?"。这种由谷歌创建的语言以其性能、简洁性和出色的并发支持而闻名。在本文中,我们将分析Go在机器学习任务中的使用合理性,它的优势所在,以及与成熟解决方案相比的不足之处。



为什么Go对ML可能有吸引力?



Go最初并非为数据科学而设计。它的主要优势在于执行速度、高效的内存管理以及内置的并行支持(goroutine和channel)。对于需要低延迟和高吞吐量的生产系统来说,这些特性是无价的。与通常作为调用C++库的"胶水"语言的Python不同,Go允许你编写快速且自包含的服务。



Go在ML中的一个关键优势是易于部署。单个编译后的二进制文件不需要安装解释器、虚拟环境或数十个依赖项。这使得Go成为创建执行训练模型推理(预测)的微服务的理想选择。



主要的Go机器学习库



Go的ML生态系统远小于Python,但它确实存在并且正在积极发展。以下是你需要了解的关键库:



  • Gorgonia — Go中主要的深度学习框架。它提供了构建和训练神经网络的底层原语,在精神上类似于TensorFlow或Theano。Gorgonia可以执行自动微分并支持GPU操作。
  • GoLearn — scikit-learn的类似物。它包含流行算法的实现:线性回归、K近邻、决策树、K均值聚类以及数据预处理方法。该库具有清晰的API,但其功能仍然比Python同类库更有限。
  • goml — 另一个专注于易用性的库。它支持线性回归和逻辑回归、神经网络、支持向量机(SVM)以及贝叶斯分类器。
  • TensorFlow Go API — 来自谷歌的官方绑定。它允许你加载和执行预训练的TensorFlow模型(SavedModel格式)。这是生产推理的绝佳选择:在Python中训练模型,在Go中运行它。
  • ONNX Runtime Go — 用于处理ONNX(开放神经网络交换)格式模型的库。它允许你在Go应用程序中使用在PyTorch、TensorFlow或其他框架中训练的模型。


让我们看一个使用Gorgonia创建线性回归的简单示例:



package main

import ( "fmt" "gorgonia.org/gorgonia" "gorgonia.org/tensor")

func main() { g := gorgonia.NewGraph()

// 输入数据 (x) 和标签 (y) x := gorgonia.NewMatrix(g, tensor.Float64, gorgonia.WithShape(3, 1), gorgonia.WithName("x")) y := gorgonia.NewMatrix(g, tensor.Float64, gorgonia.WithShape(3, 1), gorgonia.WithName("y"))

// 模型参数:权重 (w) 和偏置 (b) w := gorgonia.NewMatrix(g, tensor.Float64, gorgonia.WithShape(1, 1), gorgonia.WithName("w"), gorgonia.WithInit(gorgonia.GlorotN(1.0))) b := gorgonia.NewScalar(g, tensor.Float64, gorgonia.WithName("b"), gorgonia.WithInit(gorgonia.Zeroes()))

// 模型:y_pred = x * w + b pred := gorgonia.Must(gorgonia.Add(gorgonia.Must(gorgonia.Mul(x, w)), b))

// 损失函数:MSE loss := gorgonia.Must(gorgonia.Mean(gorgonia.Must(gorgonia.Square(gorgonia.Must(gorgonia.Sub(pred, y))))))

fmt.Println("Graph built")

博客

书籍推荐