不同语言的 ML 实现之间的速度差异是什么?

机器算法验证 机器学习 最大似然 算法 软件
2022-03-25 17:49:07

我正在尝试编写自己的 ML 库。出于速度原因,我开始使用 BLAS 用 C 语言编写东西,但后来我了解到 NumPy 和 Theano 也使用 BLAS。我想知道 C/Python/Matlab/Octave 中 ML 算法的实现之间是否存在巨大的速度差异。

有没有人有经验或者可以提供一些数据进行比较?如果没有真正好的理由用纯 C 编写,我宁愿不要。

1个回答

这在很大程度上取决于算法。

有几件事用 C 编写代码不会给您带来任何好处:矩阵运算(点积、元素乘法/函数的应用,如 sin 左右、矩阵求逆、QR 分解,...),因为 BLAS 或 LAPACK叫做。这使得轻松实现许多算法成为可能。

尽管当您需要处理诸如树或巨大图之类的事情时,您将很难匹配 C 的性能,例如决策树、KNN 或具有大量结构的复杂图形模型就是这种情况。

一些随意的想法:

  • 众所周知,如果没有参考实现,机器学习算法很难调试;C 比 Python 更难调试。
  • 在某些情况下,使用 Python 可以获得 C 语言的 90% 的性能,但如果你真的需要快速,则必须坚持使用 C
  • Python 正在通过 theano 和 sklearn 成长为一个非常大的机器学习生态系统,现在是加入的好时机。