Linear Probing
线性探测会在冻结模型的特征上训练线性分类器,以检验其表示编码了什么。内容涵盖工作原理、代码,以及与微调的比较。
线性探测是一种评估预训练模型表征中包含多少有用信息的技术:它只在冻结特征之上训练一个线性分类器,也就是探测器。编码器权重始终不变:图像或文本只通过编码器一次,生成的嵌入成为固定输入,然后由逻辑回归或单个全连接层学习据此预测标签。探测器的准确率越高,说明编码器已经将样本排列得足够好,能用一条直线边界区分类别。在数据结构中,同一名称还指一种无关的方法:通过检查下一个槽位来解决哈希表中的冲突。
线性探测的工作原理#
探测实验会加载一个预训练编码器并将其冻结,在带标签的数据集上执行特征提取,然后基于存储的特征训练线性分类器,并在留出的测试集上报告结果。探测器为每个特征和类别设置一个权重,另加一个偏置,因此只能绘制线性决策边界,无法自行构建新特征;它达到的任何准确率都反映了编码器学到的内容。逻辑回归会对分数应用 softmax 或 sigmoid 函数,但决策边界在特征空间中仍是线性的。由于只有探测器参与训练,特征可以只计算一次并重复使用,因此探测的成本远低于微调。
Ultralytics YOLO26分类模型通过 model.embed() 暴露冻结特征;默认情况下,它会将分类头前一层的输出池化成每张图像一个向量,nano 模型的向量包含 256 个数字。下面的示例使用 CIFAR-10 中的猫和狗图像对这些特征进行探测。模型从未见过这些低分辨率图像,且曾在 ImageNet 上训练;示例还会对原始像素使用相同的探测器进行拟合以作比较:
from pathlib import Path
import numpy as np
from PIL import Image
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from torchvision.datasets.utils import download_and_extract_archive
from ultralytics import YOLO
# 500 cat and 500 dog images from the CIFAR-10 test split
download_and_extract_archive("https://github.com/ultralytics/assets/releases/download/v0.0.0/cifar10.zip", "data")
cats = sorted(Path("data/cifar10/test/cat").glob("*.png"))[:500]
dogs = sorted(Path("data/cifar10/test/dog").glob("*.png"))[:500]
paths, labels = cats + dogs, [0] * 500 + [1] * 500
# Frozen YOLO26 classifier features, and raw pixels as a baseline representation
encoder = YOLO("yolo26n-cls.pt")
features = np.stack([encoder.embed(path, verbose=False)[0].cpu().numpy() for path in paths])
pixels = np.stack([np.asarray(Image.open(path)).ravel() / 255 for path in paths])
# Train the same linear probe on each representation and score it on held-out images
for name, x in [("raw pixels", pixels), ("YOLO26 features", features)]:
x_train, x_test, y_train, y_test = train_test_split(x, labels, test_size=0.3, random_state=0, stratify=labels)
probe = LogisticRegression(max_iter=5000)
probe.fit(x_train, y_train)
print(f"{name}: {probe.score(x_test, y_test):.3f}")探测器在原始像素上的得分为 0.573,仅略高于猜测的 0.5;在 YOLO26 特征上的得分则为 0.833。这一差距衡量了冻结的 YOLO26 编码器所包含、且可通过线性方式获取的类别信息。
探测能揭示什么#
线性探测用于检验信息是否存在,以及是否容易读取。Guillaume Alain 和 Yoshua Bengio 在《使用线性分类器探测理解中间层》中提出将线性分类器探测作为诊断方法,并发现他们所研究网络中的特征可线性分离程度会随深度单调增加。以这种方式探测每一层,可以看出网络在哪一层形成了任务所需的概念。在自监督学习中,ImageNet 上的线性探测准确率成为比较无标签训练编码器的标准方法,因为探测器几乎无法为较弱的表征提供额外助力。在自然语言处理中,对语言模型隐藏状态进行训练的探测器会检验模型是否编码了词性、句法或陈述真假等属性。
探测结果取决于所选层、输入分辨率和预处理、带标签数据量、探测器的正则化,以及训练图像与评估图像的划分。因此,只有这些条件全部保持一致时,编码器之间的比较才有意义。线性探测失败时,小型非线性探测器有时能够成功,这说明信息确实存在,只是以非线性方式编码。
线性探测与相关方法的比较#
- 微调:同时更新部分或全部编码器权重与预测头,通常能在目标数据上获得更高准确率。《微调可能扭曲预训练特征》报告称,在 10 个数据集上,微调的同分布准确率平均比线性探测高 2%,但在分布偏移时低 7%;LP-FT 即先进行线性探测、再从该预测头开始微调的方法,同分布时比完整微调高 1%,分布偏移时高 10%。
- K 近邻评估:根据最近训练嵌入的标签对每个测试嵌入进行分类,无需训练,是自监督编码器的另一种常见评估方案。
- 特征提取与迁移学习:特征提取会生成探测器使用的嵌入;在冻结的骨干网络上训练线性预测头,是成本最低的迁移学习形式。PyTorch 的迁移学习教程将其称为把网络用作固定特征提取器。
线性探测的局限#
线性探测衡量信息以线性方式获取的难易程度,这与表征经过适配后的实用性不同。掩码自编码器(MAE)的作者发现,线性探测与微调结果基本不相关:其 ViT-L 编码器在线性探测下的 ImageNet 准确率为 73.5%,只微调最后一个 Transformer 块后,准确率升至 81.0%;而 MoCo v3 的探测得分高于 MAE,却在每种部分微调设置下都不及 MAE。










