一句话:提出类型化高阶线性语言 Cajal,并证明其程序可编译为线性神经元,从而以可微方式直接编程神经网络。
神经网络通常通过梯度下降等学习算法从数据中间接习得功能,难以直接嵌入离散算法,因为离散结构往往不可微,无法与基于梯度的学习兼容。本文提出 Cajal (⊸, 𝟚):一种类型化、高阶且线性的编程语言,旨在作为直接编程神经网络的最小载体。作者证明 Cajal 程序可编译为线性神经元,使离散算法能以与梯度学习兼容的可微形式表达。基于 Cajal 实现,作者将线性神经元与其他神经网络链接,在学习前确定其部分功能。实验表明,这种链接可加速学习、提高数据效率并更易调试。论文表明线性编程语言为直接编程神经网络提供了路径,促进学习与普通编程离散结构之间的丰富交互。
We don’t program neural networks directly. Instead, we rely on an indirect style where learning algorithms, like gradient descent, determine a neural network’s function by learning from data. This indirect style is often a virtue; it empowers us to solve problems that were previously impossible. But it lacks discrete structure. We can’t compile most algorithms into a neural network—even if these algorithms could help the network learn. This limitation occurs because discrete algorithms are not obviously differentiable, making them incompatible with the gradient-based learning algorithms that determine a neural network’s function. To address this, we introduce Cajal ( ⊸ , 𝟚 ): a typed, higher-order and linear programming language intended to be a minimal vehicle for exploring a direct style of programming neural networks. We prove Cajal ( ⊸ , 𝟚 ) programs compile to linear neurons, allowing discrete algorithms to be expressed in a differentiable form compatible with gradient-based learning. With our implementation of Cajal ( ⊸ , 𝟚 ), we conduct several experiments where we link these linear neurons against other neural networks to determine part of their function prior to learning. Linking with these neurons allows networks to learn faster, with greater data-efficiency, and in a way that’s easier to debug. A key lesson is that linear programming languages provide a path towards directly programming neural networks, enabling a rich interplay between learning and the discrete structures of ordinary programming.
DOI 原文 · arXiv · PDF(开放获取) · DBLP
@article{abs-2511-13769,
title = {Compiling to Linear Neurons},
author = {Joey Velez-Ginorio and Nada Amin and Konrad Kording and Steve Zdancewic},
journal = {Proceedings of the ACM on Programming Languages},
volume = {10},
number = {POPL},
year = {2026},
doi = {10.1145/3776677}
}