本文翻译自 A Theory of Deep Learning,原载于 Hacker News。
引言:思考需要遗忘
博尔赫斯写过一篇小说,讲述一个名叫富内斯(Funes)的人,在骑马事故后获得了感知和记住一切的能力——每一棵树上的每一片叶子,每一条溪流在每一刻的每一道涟漪。他是一个完美的经验主义者:无限的数据、无限的回忆、无限的分辨率。
但他无法思考。
因为思考,正如博尔赫斯所理解的那样,需要遗忘。富内斯能从记忆中重建完整的一天,却无法理解为什么 3:14 从侧面看到的狗,和 3:15 从正面看到的狗,应该被称为同一个东西。
我怀疑他并不擅长思考。思考就是忽略(或遗忘)差异,就是概括,就是抽象。在伊雷内奥·富内斯那拥挤的世界里,只有具体的事物。— 博尔赫斯,《博闻强记的富内斯》(1944)
博尔赫斯在小说中还提到了洛克(Locke),这位 17 世纪的哲学家曾经设想一种不可能的语言——每一个具体的事物,每一块石头、每一只鸟、每一根树枝,都有自己独特的名字。深度学习理论已经建造了洛克的语言,并正在走向富内斯的语言:更多的参数、更多的数据、更深的网络、更多的算力。
各种理论阵营——uniform convergence、optimization、NTK(Neural Tangent Kernel)、PAC-Bayes、stability、mean-field——都在研究同一个问题,却说不同的语言,各自的假设在彼此的框架下毫无意义。
今天的深度学习就像拉瓦锡之前的化学:实践有效,理论不行。在斯坦福大学的 Diffusion Group,研究者们一直在试图回答一个大多数同行认为为时过早且不切实际的问题:为什么深度学习有效? 他们认为找到了答案。
经典理论的困境
偏差-方差权衡的失效
经典统计学习理论有一个核心信条:偏差-方差权衡(bias-variance tradeoff)。太简单会欠拟合,太复杂会过拟合。
深度神经网络是高度表达性的、过参数化的——它们的参数远多于数据点,可以完美拟合任何可能的标签。训练时,网络完美地插值训练数据(包括所有噪声),达到零训练误差。按照经典理论,测试误差应该灾难性地高。
然而,测试误差……也很低。
良性过拟合
这个现象被称为良性过拟合(benign overfitting),它违反了统计学习理论最基本的直觉。你完美拟合了训练数据,噪声理应被放大,但测试误差却很低。噪声要么被摧毁了,要么以某种形式变得无害了。
双重下降
如果你画出测试误差随模型复杂度变化的曲线,经典理论预测的是一个 U 形曲线。但实际的神经网络呈现的是双重下降(double descent)——测试误差随复杂度上升,然后在插值阈值处再次下降。恰恰在网络获得记忆一切能力的那个瞬间,它开始泛化了。
隐式偏差
梯度下降在面对无穷多个都能插值数据的解时,偏偏选择了那些能泛化的解(通常是低范数、低核范数、近似低秩的解)。这被称为隐式偏差(implicit bias)——优化算法自身在隐式地正则化。
Grokking
更有趣的是,当数据生成分布高度结构化但网络不具备正确的归纳偏差时,网络会先记忆训练集,然后在几十万步训练后,突然开始泛化。这就是Grokking。
新理论:输出空间中的动态系统
核心思想:抛弃参数空间
传统方法把神经网络看作假设类中的一个点,试图在数十亿参数的空间中约束其复杂度。新理论提出了一个彻底的简化:完全抛弃参数空间。
取而代之的是,将网络作为一个动态系统,严格在输出空间中分析——关注预测如何演化,误差流向何处。
Neural Tangent Kernel
把所有训练输出堆成一个向量。构造 Jacobian 矩阵——每个输出对每个参数的偏导数。控制一切的核心对象是经验 Neural Tangent Kernel(eNTK):
K = J J^T
这个矩阵告诉你,对于每一对训练点,在一个点上做梯度步对另一个点的预测有多大影响。在梯度流下,训练输出和它们的梯度遵循确定的演化方程。
测试输出通过交叉核(cross-kernel)同步演化。这适用于任何可微架构和任何凸损失函数,不需要任何无限宽度或深度的假设。
损失耗散与特征学习
损失以核设定的速率耗散。将 K 沿特征向量分解,对于平方损失,每个模式沿特征向量的残差以特征值决定的速率衰减。特征值大的模式学得快十倍。在有限训练时间内,低于某个特征值阈值的模式几乎没有移动。给定无限时间,所有模式都会被插值——噪声也不例外。
在特征学习(feature learning)阶段,核不是固定的。随着参数移动,特征向量旋转,特征值移动,信号和噪声被重新排列。
信号通道与储备
为了捕捉整个训练轨迹的累积效应,取 eNTK 的时间积分,得到传播算子(propagator)P。P 沿某个方向的特征值是该方向在整个训练窗口内的总积分平方可达性。
- 信号通道(signal channel):训练中大量耗散损失的方向,特征值大
- 储备(reservoir):训练中几乎没有耗散的方向,特征值小
关键发现是:测试迁移算子在储备上消失。无论网络在储备中记忆了什么,在测试时都是不可见的。
过参数化的意义、深度的意义、归纳偏差的意义——全部在于给核一个能将信号放入通道、将噪声放入储备的谱结构。
统一解释:四大谜题归一
良性过拟合
噪声驻留在储备中。网络记住了训练集中的噪声,但这些噪声在储备中,测试时不可见。无所谓。
作为教学注释:严格来说,在高度过参数化的网络中,这是近零特征值的”软储备”,而非严格的数学零空间。但将其视为硬边界是建立直觉的最佳方式——这正是被困住的噪声在测试时消失的原因。
双重下降
当模型容量横扫插值阈值时,噪声在信号通道和储备之间移动。在插值阈值处,噪声短暂进入信号通道,测试误差飙升;越过阈值后,噪声被吸收回储备。
隐式偏差
隐式偏差是传播算子 P 的谱调度——从最大的核特征值开始填充信号通道。梯度流首先学习简约的、高流动性的模式,最后学习低流动性的模式。通过严格将测试预测限制在这个累积的信号通道内,网络在动态特征空间中有效地找到了最小范数解——而不是在静态参数空间中。
Grokking
Grokking 是信号随着核在训练过程中演化而从储备迁移到信号通道的过程。网络先记忆(快速拟合噪声的模式早早饱和),后泛化(慢速信号模式终于进入信号通道)。
实用算法:直接训练总体风险
同一个解释泛化的算子,还给出了一种直接在总体风险上训练的方法。把小批量中的每个训练点视为对其他点的留一法测试集,并局部化到单个优化器步骤,可以将算子表达式坍缩为一条逐参数规则:
当且仅当一个参数上的批量信号超过其留一法噪声时,更新该参数;否则跳过。
这只是对 Adam 的一行代码改动,却能将 Grokking 加速若干个数量级,抑制 PINNs(物理信息神经网络)中的记忆化,并改善 DPO 微调效果——完全消除对验证集的需求。
未来展望
这套理论揭示了几个令人兴奋的研究方向。
第一,我们一直在以巨大的浪费训练神经网络。 梯度下降目前本质上是在逐点模拟一个动态系统,而这个系统的渐近行为我们已能用封闭形式刻画。在输出空间中,训练动力学可以通过沿实现路径的局部线性微分方程来理解,其中核的主特征模态以指数速度趋于平衡。强迫优化器缓慢走过这些已解的方向是极其低效的——这暗示了一条直接解析跳转到最终网络状态的道路。
第二,直接在总体风险上训练。 这套理论为直接在总体风险上训练神经网络奠定了基础,完全绕过机器学习的基本妥协。从纯经验风险最小化转向真正的泛化目标,可以从根本上消除过拟合。
第三,重新思考模型架构。 理解了过参数化主要服务于创造更大的测试不可见储备,我们就可以重新审视模型架构——是否可能通过设计更小、更高效的模型来最优地隔离标签噪声,从而获得无限规模的泛化收益?
个人思考
这篇文章让我印象最深的是它的哲学深度。博尔赫斯的富内斯不仅仅是一个文学典故——它精确地描述了过拟合的本质:记住一切等于理解不了任何东西。
从工程实践的角度看,”直接在总体风险上训练”的思路非常值得期待。如果真的能消除对验证集的需求,这将彻底改变模型训练的工作流。不过,从理论到工程落地通常还有很长的路要走。
另外,将深度学习的多个谜题统一在一个框架下解释,这种理论美感令人信服。信号通道和储备的二分法简单而优雅,让我想起了信息论中信源编码和信道编码的分离——也许好的理论都是如此,用一个简洁的结构统一看似无关的现象。
核心要点:
- 抛弃参数空间,在输出空间分析——将神经网络视为动态系统,通过 Neural Tangent Kernel 的演化来理解训练过程
- 信号通道与储备的二分法——过参数化创造了储备空间,噪声被吸收其中且测试不可见,这是深度学习泛化的核心机制
- 统一解释——良性过拟合、双重下降、隐式偏差和 Grokking 都是同一机制的不同表现
- 实用价值——由此导出的逐参数更新规则只需修改 Adam 一行代码,却能加速 Grokking、抑制过拟合、消除验证集需求
- 未来方向——从解析跳跃到最终网络状态、直接训练总体风险、重新设计高效架构