Linear Probing
了解线性探测如何通过逻辑回归、特征提取和 Ultralytics YOLO26 嵌入评估冻结的 AI 表征,用于迁移学习。
线性探测是一种评估和适配技术,通过在冻结特征之上训练一个简单的线性预测器,来衡量模型学到的表示有多大用处。预训练编码器保持不变,只有一个线性层(分类任务中通常是逻辑回归)会使用带标签的数据进行拟合。较强的探测性能表明,编码器的嵌入向量已经组织好了相关概念,因此可以通过简单的决策边界将它们分离。
在机器学习中,该术语与哈希表中的线性探测无关;后者会在发生冲突后检查相邻的存储位置。在 AI 和深度学习中,它特指使用线性模型对表示进行探测。
线性探测的工作原理#
典型的神经网络包含一个编码器或主干网络,用于将原始输入转换为特征向量,后面接一个特定于任务的预测头。线性探测包括四个步骤:
- 预训练或加载编码器。
- 冻结其参数,使训练无法更新这些参数。
- 对带标签的样本执行特征提取。
- 使用这些固定特征训练线性分类器。
对于多分类任务,探测器通常是一个带 softmax 输出的单层全连接层,或者是一个scikit-learn 逻辑回归分类器。虽然逻辑回归包含非线性的概率变换,但其类别得分和决策边界都是输入特征的线性函数。
线性探测在自监督学习中尤其常见,此时编码器从无标签数据中学习。Keras NNCLR 示例通过在冻结编码器的特征上训练全连接分类器展示了这一点。由于探测器的容量有限,因此很难通过学习复杂的非线性变换来弥补较弱的表示。
线性探测性能揭示了什么#
线性探测会测试某种信息是否存在于表示中,以及是否能够轻易访问。如果猫和狗的图像在嵌入空间中形成可分离的群组,线性分类器就可以用很少的可训练参数将它们区分开来。如果信息通过更复杂的方式编码,即使线性探测表现不佳,非线性分类器仍可能取得成功。
因此,应将探测准确率视为诊断指标,而不是衡量模型质量的完整指标。它可能受到以下因素影响:
- 所选编码器层和嵌入维度。
- 输入分辨率和预处理方式。
- 带标签训练数据的数量和类别平衡。
- 应用于线性模型的正则化。
- 训练集与评估集之间的数据泄漏。
使用留出的验证数据集,最好通过可复现的分层流程创建,例如使用 scikit-learn 的训练集-测试集划分工具。除准确率之外,分类指标报告还可以揭示表示无法稳定分离的类别。
线性探测与相关方法的比较#
线性探测属于迁移和表示评估方法这一更广泛的范畴,但以下几个区别很重要:
- **线性探测与微调:**探测器只更新线性头。微调会更新部分或全部编码器权重,使模型更加灵活,但需要额外的计算资源,也会增加过拟合的风险。TensorFlow 迁移学习指南介绍了如何先冻结基础模型,再根据需要解冻模型进行微调。
- **线性探测与特征提取:**特征提取会生成嵌入向量;线性探测则在这些嵌入向量上训练并评估预测器。
- **线性探测与线性回归:**线性回归预测连续值。分类探测器通常使用逻辑回归或 softmax 层预测离散类别。
- **线性探测与最近邻评估:**线性探测会学习类别边界。最近邻方法则根据附近存储的嵌入向量对样本进行分类,而不会学习这些边界。PyTorch 迁移学习教程将密切相关的冻结编码器工作流称为固定特征提取器。
使用 Ultralytics YOLO 进行线性探测#
预训练的Ultralytics YOLO26 分类模型可以通过文档所述的 model.embed() API 生成图像嵌入向量。下面的示例通过预先计算特征隐式冻结编码器,然后拟合线性探测器来区分 CIFAR-10 中的猫和狗:
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from torchvision.datasets import CIFAR10
from ultralytics import YOLO
dataset = CIFAR10(root="data", train=False, download=True)
samples = [(image, label) for image, label in dataset if label in (3, 5)][:400]
images, labels = zip(*samples, strict=True)
encoder = YOLO("yolo26n-cls.pt")
embeddings = encoder.embed(list(images), verbose=False)
features = np.stack([embedding.cpu().numpy() for embedding in embeddings])
x_train, x_test, y_train, y_test = train_test_split(features, labels, test_size=0.25, random_state=42, stratify=labels)
probe = LogisticRegression(max_iter=1000)
probe.fit(x_train, y_train)
predictions = probe.predict(x_test)
print(accuracy_score(y_test, predictions))只有逻辑回归模型会从猫和狗的标签中学习;YOLO26 编码器权重保持不变。这样可以单独衡量其视觉表示的有效性,而不是测量其通过端到端训练进行适配的能力。
实际应用与实用建议#
-
**评估无标签预训练:**机器人团队可以在大量无标签仓库视频上预训练编码器,然后使用一个包含叉车、工人和托盘的小型带标签数据集来探测其特征。较高的探测准确率表明,该表示可能支持下游的图像分类或检测任务,并且只需要有限的标注。
-
**比较领域适用性:**医学影像团队可以冻结多个候选编码器,并针对组织类别训练完全相同的线性探测器。如果某个编码器在相同的数据划分和预处理条件下表现显著更好,那么它的表示就是后续微调更有力的起点。
为确保比较公平,应保持数据集划分、特征层、预处理、分类器和优化设置不变。在条件允许时,同时评估线性探测和完整微调:探测衡量固定特征中可访问的信息,而微调衡量完整模型的适配能力。









