颠覆!用 LaTeX 写的机器学习库,这波操作太秀了

发布于 2025-04-08 21:14:55

82b5aba2badaa6a80d7d98537445c916.png

今天挖到一个超有意思的库——Neuralatex,一个纯用 LaTeX 编写的机器学习库,这在满是 Python 框架的机器学习领域里,简直是一股清流!NeuRaLaTeX 完全使用 LaTeX 编写,能够在 LaTeX 文档中定义神经网络架构、训练数据和实验,并在编译时执行训练和生成结果。主要是来自约克大学的 James A. D. Gardner、Will Rowan 和 William A. P. Smith 开发。

PixPin_2025-04-08_08-25-47.png

Neuralatex 本质上是基于标量值的自动求导库,和 MicroGrad 类似,但完全用 LaTeX 实现。在 LaTeX 文档里,你能轻松定义神经网络架构、损失函数,还能指定训练数据的生成或加载方式,设置训练超参数和实验。编译文档时,LaTeX 编译器就会自动完成数据处理、网络训练、实验运行和图表生成这些操作。训练过程中的调试输出,既可以记录到编译器日志里,也能直接写进论文中,这种把代码、数据和实验全整合在一起的方式,完美解决了科研中令人头疼的可重复性问题。

为啥要用 LaTeX 来写机器学习库呢?LaTeX 的宏、逗号分隔字符串和灵活的循环选项,给编程带来不一样的体验;把所有东西都放在 LaTeX 源文件里,相当于一份自包含的科研文档,编译时直接执行,再也不用担心代码和数据对不上;有了 Neuralatex,Overleaf 不再只是文档编辑器,摇身一变成为免费的云训练平台;arXiv 50MB 的文件大小限制,让小数据集和模型有了更多机会,大家站在了同一起跑线;在同一个 LaTeX 环境里既能写论文又能写代码,不用在不同工具间来回切换。

从实现层面看,Neuralatex 参考了 MicroGrad,但代码量比 MicroGrad 多不少,自动求导引擎差不多 700 行 LaTeX 代码,神经网络库也有 400 行左右,不过这也让它功能更强大。它基于动态构建的有向无环图(DAG)实现反向传播,还用到了 TiKZ PGF 模块 oo 实现面向对象编程。在 Neuralatex 里求梯度特别简单,调用.backward()就行;定义和调用多层感知器(MLP)也不难,给大家看看示例代码:

\input{nn.tex}
\pgfoonew \x=new Value(2.5,{},'',0) \x.show() \pgfoonew \y=new Value(0.3,{},'',0) \y.show() \x.multiply(\y,z)
\z.show() \z.backward() \x.show() \y.show()

运行这段代码,就能得到对应变量的值和梯度,是不是很神奇?


Value(self: 1, data: 2.5, grad: 0.0, prev: , next: , op: ", isparam: 0, GC: 0.0)
Value(self: 2, data: 0.3, grad: 0.0, prev: , next: , op: ", isparam: 0, GC: 0.0)
Value(self: 3, data: 0.75, grad: 0.0, prev: 1,2, next: , op: *, isparam: 0, GC: 0.0)
Value(self: 1, data: 2.5, grad: 0.3, prev: , next: 3, op: ", isparam: 0, GC: 1.0)
Value(self: 2, data: 0.3, grad: 2.5, prev: , next: 3, op: ", isparam: 0, GC: 1.0)

\input{engine.tex}
\input{nn.tex}

% Create two Value objects to store input values
\pgfoonew \x=new Value(1.0,{},'',0)
\pgfoonew \y=new Value(-1.0,{},'',0)

% Store the object IDs of the input Values in a list
\x.get id(\inputIDx)
\y.get id(\inputIDy)
\edef\templist{\inputIDx,\inputIDy}

% Define the MLP
\pgfoonew \mlp=new MLP(2,{4,4,1})

% Forward pass through MLP
\mlp.forward(\templist,output)

为了展示 Neuralatex 的实力,团队用它训练了一个小 MLP 来对非线性二维螺旋数据集进行分类。在 100 个二维点的数据集上训练 35 个 epoch,用 Macbook Pro 2.4GHz 四核处理器花了 48 小时,虽说时间有点长,但最后评估数据集的准确率达到了 86%。

PixPin_2025-04-08_08-21-08.png

Neuralatex 还提出了两个新指标:Written in LaTeX(WIL),衡量机器学习库中 LaTeX 代码的占比;Source code of method in source code of paper(SCOMISCOP),衡量论文源代码中方法代码的占比。Neuralatex 在这两个指标上都是满分 1.0,直接登顶!

ML LibraryWIL
NeuRaLaTeX1.0
PyTorch [1]0.0
Tensorflow [2]0.0
Matlab [3]0.0

<br/>

Deep learning paperSCOMISCOP
NeuRaLaTeX1.0
Attention is all you need [4]0.0
Deep Residual Learning for Image Recognition [5]0.0

Neuralatex 的未来规划也超有想象力。他们打算加入对各种加速器(GPU、TPU 甚至是强子对撞机)的支持,大幅缩短编译时间;还畅想 Neuralatex 成为未来所有计算的基础;甚至计划推出 Neuralatex 大语言模型,将文档编辑、模型训练和人工智能结合起来。目前团队正在寻找投资,跳过天使轮和种子轮,目标直接冲向独角兽级别,有兴趣的投资者出 1000 万美元就能拿到 1%的股权。

Neuralatex 给机器学习领域带来了全新思路,不管你是科研人员、开发者,还是对新技术感兴趣的小伙伴,都值得去深入了解一下。说不定它会开启机器学习的新篇章呢!要是想获取更多信息,可以点击这里查看论文和源代码。

论文与代码实现

0 条评论

发布
问题