1. 项目概述:我们真的用对“代数”了吗?

最近和几个搞机器学习的朋友聊天,发现一个挺有意思的现象:大家张口闭口都是“线性代数”、“矩阵运算”,好像AI就等于线性代数。但当我问起“为什么一定是线性代数?非线性代数不行吗?”或者“张量运算和矩阵乘法在底层逻辑上到底有什么不同?”时,往往得到的回答是“大家都是这么用的”、“框架就是这么实现的”。这让我想起一个观点: 我们可能正在大规模地、不自知地使用着“错误的代数”

这里的“错误”并非指数学上的谬误,而是一种 概念上的错配与思维上的局限 。我们习惯性地将AI模型,尤其是深度学习,框定在线性代数的语境下去理解和构建,却忽略了数据与问题本身可能遵循着更复杂、更本质的代数结构。这就好比试图用一把标准的螺丝刀去拧所有形状的螺丝,有些能对上,有些勉强能用但效率低下,还有些则完全无法处理,甚至可能损坏螺丝或工具本身。

这篇内容,我想从一个一线实践者的角度,聊聊我们习以为常的“AI代数”背后可能存在的认知偏差。这不是一篇数学论文,而是关于 如何更“正确”地选择和使用数学工具 的实践反思。我们会探讨线性代数为何成为默认选择,它的局限性在哪里,以及有哪些被我们忽视的“更合适的代数”正在特定场景下展现出潜力。无论你是算法工程师、数据科学家,还是对AI原理有浓厚兴趣的开发者,理解这一点,或许能帮你跳出框架的束缚,更本质地思考模型设计,甚至发现新的优化方向。

2. 线性代数:为何成为AI的“通用语”?

2.1 历史路径依赖与计算友好性

线性代数在AI,特别是深度学习中的统治地位,首先源于一条清晰的历史技术路径。早期的神经网络灵感来源于生物神经元,其数学模型(如MCP神经元)本质上就是加权求和,即线性组合。当我们将网络层抽象为函数变换时,最直接、最易于分析和计算的变换就是线性变换,而线性变换的数学语言正是矩阵。

从计算层面看,线性代数拥有无与伦比的硬件亲和性。现代GPU(图形处理器)和TPU(张量处理器)的架构,其核心优化目标就是大规模、高并行的矩阵/张量乘法与加法运算。CUDA库、BLAS(基础线性代数子程序)等底层计算库经过数十年的优化,使得矩阵运算达到了极高的效率。这种硬件与基础软件的深度绑定,创造了一个强大的正向循环:因为硬件擅长矩阵计算,所以算法设计围绕矩阵展开;因为算法普遍使用矩阵,所以硬件厂商更极致地优化矩阵计算。这就使得任何试图脱离这个循环的数学工具,在起步阶段就面临着巨大的性能劣势。

注意 :这种路径依赖具有很强的“惯性”。即便存在理论上更优美的数学工具,如果其计算无法高效映射到现有的硅基硬件(如GPU的SIMD架构)上,那么在追求训练速度和模型规模的工业界就难以被采纳。这首先是一个工程经济学问题,其次才是数学问题。

2.2 模型的线性化表达与优化便利

尽管深度神经网络以“深度”和非线性激活函数著称,但其基本构建块——全连接层、卷积层——在激活函数作用前,都是严格的线性变换。一个全连接层就是 Y = XW + b ,其中 W 是权重矩阵, b 是偏置向量。卷积操作也可以通过Toeplitz矩阵或im2col技巧转化为大型矩阵乘法。这种统一的线性表达,为模型设计、实现和理论分析带来了极大的便利。

在优化方面,反向传播算法的核心是链式法则,而计算梯度本质上涉及大量的雅可比矩阵(一阶偏导数矩阵)乘法。线性代数为梯度计算提供了现成的、易于并行化的公式。例如,对于损失函数L关于权重矩阵W的梯度,在线性层背景下可以简洁地表示为上游梯度与输入矩阵的乘积。如果使用其他代数结构,推导梯度公式将变得异常复杂,且难以实现高效的批量计算。

此外,许多成功的网络架构创新,如残差连接(ResNet)、注意力机制(Transformer),其设计直觉和有效性分析也高度依赖于线性代数的视角。例如,Transformer中的自注意力机制,可以清晰地分解为查询(Q)、键(K)、值(V)的线性投影和缩放点积运算,整个计算流程完全由矩阵操作描述。这种透明性使得研究者能够直观地理解和调整模型行为。

3. “错误”的体现:线性代数的局限性场景

当我们把线性代数当作“万能工具”时,就会在一些特定类型的数据和问题上遇到明显的“水土不服”。这种不适配,就是“使用错误代数”的直观体现。

3.1 结构化数据与图数据:关系才是核心

社交网络、分子结构、知识图谱、推荐系统中的用户-物品交互,这些数据本质上是 。图的核心是节点和边所构成的关系结构。传统的做法是将图通过邻接矩阵或节点特征矩阵来表示,然后套用基于矩阵的神经网络(如图卷积网络GCN)。但这存在根本问题:

  1. 信息损失 :将图压平成矩阵,损失了其拓扑结构中的高阶信息和局部连接模式。邻接矩阵是稀疏的,直接进行矩阵运算效率低下且难以捕获长程依赖。
  2. 置换不变性 :图的性质不应随节点编号顺序的改变而改变(即置换不变性)。但矩阵表示依赖于特定的节点排序,标准的矩阵乘法不具备这种不变性,需要额外的架构设计(如池化操作)来近似实现。
  3. 规模问题 :大型图的邻接矩阵维度极高,无法直接放入内存进行计算。

此时,更“正确”的代数工具是 图论 群论 ,特别是 等变图神经网络 的理论基础。它明确地将对称性(如置换、旋转)作为网络设计的约束条件,使用群表示论来构建等变层。虽然其底层实现最终可能仍转化为特定形式的矩阵运算,但设计思想已截然不同,是从数据的内在对称性出发,而非强行套用线性模板。

3.2 几何与物理数据:流形与微分几何

在计算机视觉、机器人学、物理模拟中,数据通常存在于非欧几里得空间中,例如球面(S^2)、旋转群(SO3)、双曲空间等。典型例子包括:

  • 3D点云 :点的集合,其整体形状具有刚性变换(旋转、平移)不变性。
  • 分子构象 :原子在三维空间中的坐标,其能量函数具有旋转和平移不变性。
  • 方向数据 :如风向、物体朝向,其值域是一个圆环或球面。

强行用R^n中的向量表示这些数据,并使用标准线性层,会破坏其固有的几何约束。例如,对三维旋转进行线性插值,得到的结果可能不是一个有效的旋转矩阵(无法保证正交性)。同样,在球面上两点之间求“均值”,用线性平均后再投影回球面,并非测地线意义上的真正平均。

更合适的数学工具是 微分几何 李群李代数 。在这套语言下,数据点被视为流形上的点,网络层应设计为流形之间的映射,并保持相应的几何性质(如等变性、不变性)。优化算法也需要在流形上进行,例如使用黎曼优化。近年来兴起的 几何深度学习 正是试图将这种“正确的代数”系统化地引入AI。

3.3 组合优化与离散结构:布尔代数与范畴论

许多AI应用,如自动定理证明、程序合成、芯片布局、调度问题,其核心是组合与离散结构。输入和输出通常是树、逻辑公式、图匹配、排列等离散对象。试图用连续向量空间中的线性变换来逼近这些离散的、结构化的变换,往往事倍功半。

例如,在神经符号计算中,我们希望神经网络能学习逻辑规则。逻辑规则遵循布尔代数的运算律(与、或、非、蕴含)。用基于线性代数的MLP去拟合一个异或门尚且需要引入非线性,去拟合复杂的逻辑组合则更加困难,且模型缺乏可解释性,无法保证输出结果的逻辑一致性。

更自然的工具是 范畴论 ,它为描述不同数学结构之间的关系提供了高阶语言。在AI中,范畴论可以用来形式化模型组合、抽象数据类型和计算图。虽然范畴论本身不提供具体的算法,但它能指导我们设计出更贴合问题本质的模型架构。另一种路径是 图神经网络与离散推理 的结合,显式地在模型中引入离散决策变量和约束满足模块。

3.4 实操中的“勉强”与性能损失

在日常工作中,我们常常能感受到这种“错配”带来的性能损失或设计别扭:

  • 位置编码的引入 :Transformer本身是置换等变的(打乱输入序列顺序,输出序列相应位置的特征也会被打乱)。但为了注入序列的顺序信息,我们必须额外加入正弦/余弦位置编码或可学习的位置向量。这实际上是在弥补纯线性注意力机制对顺序信息的“无视”,是一种工程上的修补。
  • 归一化层的滥用 :Batch Norm、Layer Norm等归一化技术被广泛使用以稳定训练。其中一个重要作用是缓解内部协变量偏移。但从另一个角度看,如果我们的网络层设计得更“几何正确”(例如使用等变层),数据的分布变化可能更温和,对归一化的依赖也许会降低。
  • 对对称性先验的忽视 :在设计一个处理图像的CNN时,我们默认它应该具有平移不变性(通过卷积和池化实现),但对于许多任务(如卫星图像分析、医学影像),图像还可能具有旋转或缩放不变性。标准的CNN不具备这些性质,需要数据增强或特殊结构(如旋转等变卷积)来弥补。如果我们从一开始就使用具备相应对称性的代数框架来构建网络,可能获得更好的样本效率和泛化能力。

4. 迈向“更正确”的代数:实践中的探索方向

认识到问题只是第一步,关键在于如何在实践中探索和应用更合适的数学工具。这并非要完全抛弃线性代数,而是要学会在正确的层级和场景下使用它,或者将其作为更高级代数结构的实现工具。

4.1 图神经网络:从消息传递到等变网络

对于图数据,现代GNN的核心范式是 消息传递 。每个节点通过聚合其邻居节点的特征来更新自身状态。这个过程可以用代数语言描述为:

  1. 对每个节点,生成发送给邻居的消息(通常是一个可微函数)。
  2. 对每个节点,聚合来自所有邻居的消息(使用求和、求平均、求最大值等置换不变函数)。
  3. 结合自身上一轮的特征和聚合的消息,更新节点状态。

虽然消息传递的实现代码中充满了矩阵索引和向量运算,但其 设计理念 已经超越了简单的线性代数。它直接操作于图结构之上。更前沿的 等变图网络 则更进一步,它确保当输入图发生某种对称变换(如旋转整个点云)时,网络的输出也会发生相应的、可预测的变换。这要求网络的每一层都是“等变层”,其设计需要用到群表示论,将特征向量视为群的表示空间中的向量。

实操心得 :在实现GNN时,不要只盯着邻接矩阵。多从“节点视角”和“边视角”思考,利用深度学习框架(如PyTorch Geometric, DGL)提供的基于节点的API。这更符合图计算的本质。当处理3D点云或分子时,优先考虑现成的等变网络库(如e3nn, SE(3)-Transformer),它们内置了正确的几何先验,往往能取得比普通GCN更好的效果。

4.2 几何深度学习:流形上的层与优化

对于几何数据,一个实用的路径是采用 流形感知的神经网络层 。例如:

  • 球面卷积网络 :定义在球面S^2上的卷积,利用球谐函数作为基,其计算类似于傅里叶变换后的滤波。
  • 旋转等变网络 :处理3D旋转的数据,确保网络输出随输入旋转而等变旋转。其核心是使用球谐函数和Clebsch-Gordan系数来保证等变性。
  • 双曲神经网络 :将数据嵌入到双曲空间(庞加莱球模型或双曲面模型)中,利用双曲距离的几何特性更好地建模层次化数据。

在优化层面,当网络参数本身具有约束时(如正交矩阵、Stiefel流形上的点),需要使用 黎曼优化 。PyTorch和TensorFlow都有相应的库(如geoopt, TensorFlow Riemannian)。与在欧氏空间中使用标准梯度下降然后投影不同,黎曼优化直接在流形切空间上计算梯度并沿测地线方向更新,收敛性更好。

注意事项 :几何深度学习的库通常计算更复杂,调试也更困难。在项目初期,一个有效的策略是:先用标准网络+数据增强(如随机旋转)作为基线。如果任务对几何变换非常敏感,且基线模型性能或数据效率不佳,再考虑引入几何网络。同时,要仔细检查数据预处理和后处理是否与流形结构兼容。

4.3 神经符号与结构化预测:混合模型

对于涉及逻辑和离散结构的任务,纯粹的“黑箱”神经网络往往不是最佳选择。 神经符号AI 倡导将神经网络的感知能力与符号系统的推理能力相结合。

一种常见模式是 混合系统

  1. 神经网络作为特征提取器 :用CNN、GNN等处理原始数据(图像、文本、图),输出连续的特征向量或概率分布。
  2. 符号引擎作为推理器 :将神经网络的输出作为证据,输入到基于规则的推理系统、约束求解器(如Z3)或逻辑编程引擎(如Prolog)中,进行可解释的、可验证的推理。
  3. 端到端训练 :通过可微分的近似(如Soft Logic)或策略梯度方法,使整个系统能够端到端训练,让神经网络学会为下游推理提供更好的证据。

例如,在视觉问答中,神经网络识别图像中的物体和关系,生成一个场景图(符号表示),然后一个基于知识库的推理模块根据问题和场景图推导出答案。这种方法的好处是模型决策可追溯,并且可以方便地引入领域知识。

实操步骤示例(概念性)

  1. 定义符号词汇表 :确定任务中涉及的实体、属性和关系。例如,在积木世界,词汇表可能包括 物体(形状, 颜色, 位置) ,关系 在...上面 , 在...左边
  2. 构建可微推理层 :将逻辑规则(如 如果A在B上面且B在C上面,则A在C上面 )转化为可微的计算模块。可以使用神经逻辑网络(Neural Logic Networks)或使用注意力机制模拟逻辑运算。
  3. 联合训练 :设计一个损失函数,同时惩罚感知错误和推理错误。通过梯度下降,让感知网络学会生成更有利于正确推理的符号表示。

4.4 框架与库的选择:站在巨人的肩膀上

探索新代数并不意味着要从零开始造轮子。目前已有不少优秀的库降低了使用门槛:

代数领域 对应问题类型 推荐库/框架 核心能力
图代数 社交网络、分子、推荐系统 PyTorch Geometric (PyG), Deep Graph Library (DGL) 提供了大量GNN层、消息传递接口和标准图数据集。
几何代数(等变网络) 3D点云、分子、刚体运动 e3nn, SE(3)-Transformer, Geomstats 实现了3D旋转/平移等变的神经网络层和流形操作。
双曲几何 树状/层次化数据、知识图谱 Geoopt (PyTorch), Hyptorch 提供了双曲空间中的操作、优化器和网络层。
神经符号/可微推理 逻辑推理、程序合成、约束满足 DeepProbLog, TensorLog, PyReason 将逻辑编程与概率深度学习相结合。
JAX生态系统 研究新型计算范式 JAX, Haiku, Equinox JAX的自动微分和函数式特性非常适合快速原型化新的数学框架。

选择建议 :对于生产环境,成熟度是关键。PyG和DGL已经非常稳定。对于研究或特定几何任务,e3nn是不错的选择。JAX则更适合于研究人员快速实现和实验全新的数学思想。

5. 思维转变:从“用工具”到“选工具”

最后,我想分享几点从“使用错误代数”到“尝试更正确代数”的思维转变心得,这比掌握某个具体库更重要。

5.1 首先分析数据的固有结构

拿到一个新问题时,不要急于套用CNN、RNN或Transformer。先花时间分析:

  • 数据的样本空间是什么? 是欧氏空间中的向量,还是图、集合、流形上的点?
  • 数据具有哪些不变性或等变性? 平移?旋转?缩放?排列?这些对称性是任务相关的还是需要被消除的?
  • 数据之间的关系是局部的还是全局的?是顺序的、树状的还是网状的?
  • 输出空间是什么? 是连续值、类别、结构(如序列、树),还是动作策略?

例如,处理蛋白质结构预测(AlphaFold的核心问题),数据是氨基酸序列(顺序)和原子3D坐标(几何点云)。一个成功的模型必须同时尊重这两种结构:使用Transformer处理序列关系,使用等变GNN处理空间关系。这就是对数据结构的深刻尊重。

5.2 理解现有“黑箱”成功背后的代数原因

许多成功的模型,其力量恰恰源于它们(有意或无意地)使用了更合适的代数结构。

  • Transformer的注意力机制 :抛开线性投影,其核心是缩放点积注意力。这可以看作是在一个由查询、键、值构成的向量空间中,计算一种“软对齐”或“软检索”。有研究将其与核方法、高斯过程联系起来,提供了不同的代数视角。
  • 卷积神经网络 :其成功根本在于利用了图像的 平移等变性 (或近似等变性)。卷积核的共享权重机制,正是这一对称性在参数空间上的体现。理解这一点,就能明白为什么CNN不能天然处理旋转,以及何时需要数据增强或旋转等变卷积。
  • 归一化层 :从代数角度看,Batch Norm是在对小批量数据进行标准化的同时,试图保持网络的表达能力(通过可学习的缩放和平移参数)。它隐式地对数据分布做了假设。

5.3 在实用与优雅之间权衡,进行渐进式改进

完全转向一套新的数学体系风险很高。更务实的做法是 渐进式改进

  1. 基线模型 :先用最成熟的、基于线性代数的模型(如ResNet, Transformer)建立性能基线。
  2. 注入结构先验 :在基线模型上,以插件或修改层的方式,引入对数据结构的尊重。例如,在标准的GCN中加入边特征;在CNN的第一层后加入一个可学习的旋转等变层;在序列模型中加入显式的位置感知注意力。
  3. 混合架构 :采用神经符号混合方法,让神经网络处理其擅长的模式识别部分,让符号系统处理其擅长的逻辑推理部分。
  4. 损失函数设计 :有时,不需要改变网络结构,只需在损失函数中引入基于数据结构的正则项。例如,在3D重建任务中,加入基于流形距离的损失;在图生成任务中,加入鼓励图属性(如连通性、无环性)的惩罚项。

5.4 一个简单的自查清单

在启动一个AI项目时,可以快速问自己以下几个问题,来判断是否可能陷入了“代数错配”:

  • [ ] 我的数据是标准的网格数据(如图像)或序列数据(如文本)吗?如果是,线性代数/卷积/循环结构可能是合适的。
  • [ ] 我的数据是图或网络吗?节点和边的关系是否比节点自身的特征更重要?如果是,考虑图神经网络。
  • [ ] 我的数据存在于一个非平面的空间中吗?(如球面、旋转、具有层次结构)如果是,考虑几何深度学习或双曲嵌入。
  • [ ] 我的任务输出需要严格遵守逻辑规则或组合约束吗?(如代码生成、定理证明、调度)如果是,考虑神经符号混合方法或强化学习结合约束求解。
  • [ ] 我的模型是否严重依赖数据增强来模拟现实世界的变化?(如通过随机旋转图片来获得旋转不变性)如果是,考虑使用本身就具有该等变性的网络层。

AI的实践是一场与复杂性的永恒博弈。线性代数是我们手中最锋利、最趁手的一把剑,但它不是唯一的武器,也未必在所有战场上都是最优解。“Everyone‘s using the wrong algebra in AI”这个说法更像是一个警醒,提醒我们不要被工具驯化,而要成为工具的选择者。理解数据的内在语言,为其匹配更贴切的数学语法,我们构建的模型才会更高效、更鲁棒、更接近智能的本质。这个过程注定充满挑战,但每一次从“错误”向“更正确”的靠近,都可能带来意想不到的突破。至少在我自己的项目中,当我开始有意识地思考数据的代数结构并尝试相应的工具后,不仅模型性能时有提升,更重要的是,我对问题本身和模型行为的理解,都加深了一个层次。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐