Neural Tangent Kernel (NTK)
神经切线核(NTK)用于衡量网络预测对参数变化的响应,并将神经网络训练与核方法联系起来。
神经切线核(NTK)是一种相似度函数,用于衡量两个输入的神经网络输出对模型参数相同微小变化的响应。当两个输入的参数梯度方向一致时,它们的预测就会强烈耦合。这将神经网络训练与核方法联系起来;核方法通过示例之间的成对相似度进行学习。
Arthur Jacot、Franck Gabriel 和 Clément Hongler 于 2018 年在《神经切线核:神经网络中的收敛与泛化》一文中提出了这一术语,建立了一个数学框架,用于分析预测在训练过程中的演变。
神经切线核的工作原理#
对于一个标量输出的神经网络,计算输出相对于每个可训练参数的导数。这些导数组成一个梯度向量,用于描述预测对模型权重的敏感度。两个输入之间的 NTK 是它们梯度向量的点积。
在一个数据集上,这些成对的值构成一个核矩阵,也称为 Gram 矩阵。矩阵的对角线衡量每个预测对参数变化的敏感度;非对角线元素则描述不同样本之间的耦合。对于多个输出,每对输入会产生一个块,其中包含输出坐标之间的相互作用,这在经验 NTK 计算中有所应用。
在梯度下降过程中,核决定了降低一个样本的预测误差会如何改变其他位置的预测。相关梯度是网络输出的导数;反向传播提供了求导机制。然后,损失函数决定误差修正更新的方向和幅度。
无限宽度、收敛与泛化#
网络的宽度是指隐藏单元的数量,或者卷积层中的通道数。在采用 NTK 参数化并满足适当的初始化和训练假设时,逐渐增加隐藏层的宽度直至趋于无穷,会产生一个在训练过程中保持不变的确定性极限核。有限网络的经验 NTK是在其实际参数处计算的,并且可能随着训练的进行而变化。
在核保持恒定的情形下,训练遵循网络在初始化附近的一阶近似。这就是线性化网络:其预测随参数变化呈线性变化,同时对输入仍保持非线性依赖。相关术语惰性训练描述的是切线特征变化很小的一种情形。特征学习则涉及这些特征在优化过程中发生显著变化。
对于平方误差损失,在核恒定的梯度流下——也就是小步长梯度更新的连续时间极限——误差沿着特征值较大的核特征向量下降得最快。特征向量标识样本之间的模式,特征值则决定这些模式的学习速度。这解释了为什么提前停止可以作为正则化:它限制了对学习速度较慢的成分的拟合,其中包括与噪声和过拟合相关的成分。未见过的输入上的预测取决于它们与训练数据之间的核相似度。
应用与相关概念#
NTK 方法支持核回归以及对图像分类的分析。卷积 NTK(CNTK)将这一构造扩展到了卷积神经网络。Sanjeev Arora 及其同事使用精确 CNTK 计算在 CIFAR-10 上进行分类,为有限卷积网络的训练提供了基于核的方法作为对照。
神经网络高斯过程(NNGP)核描述了在无限宽度极限下,随机初始化的网络输出之间的协方差。NTK 描述由梯度驱动的训练动态。同样,线性探测会在冻结的表征上训练线性分类器;NTK 线性化则将相对于所选可训练参数的导数用作特征。
因此,参数选择会改变支配训练的切线核。在 Ultralytics YOLO26 微调中,freeze 参数会将选定层固定,因此这些层的参数不会为有效训练核贡献更新方向。
计算经验 NTK#
此 PyTorch 示例使用 scikit-learn 内置的手写数字数据集计算两张手写数字图像的核。使用 pip install torch scikit-learn 安装依赖项。
import torch
from sklearn.datasets import load_digits
from torch import nn
torch.manual_seed(0)
digits = load_digits()
inputs = torch.tensor(digits.data[:2], dtype=torch.float32) / 16
model = nn.Sequential(nn.Linear(64, 8), nn.Tanh(), nn.Linear(8, 1))
parameters = tuple(model.parameters())
outputs = model(inputs)
# 每个 Jacobian 行都包含一个输出相对于参数的导数。
rows = []
for output in outputs[:, 0]:
gradients = torch.autograd.grad(output, parameters, retain_graph=True)
rows.append(torch.cat([gradient.flatten() for gradient in gradients]))
jacobian = torch.stack(rows)
kernel = jacobian @ jacobian.T
print(kernel)打印出的 2 x 2 矩阵包含两个自敏感度以及它们之间的跨样本耦合。由于它是按 jacobian @ jacobian.T 构造的,标量输出的经验 NTK 是对称半正定的,其秩同时受样本数量和可训练参数数量的限制。










