在计算机视觉领域,基于Transformer的模型(Vision Transformers, ViT)已经展现出强大的图像表征能力。本文通过实验揭示了微调过程如何改变ViT模型的嵌入向量特性,以及这种变化对下游任务(特别是异常检测)的影响。
关键发现:微调前的嵌入向量具有通用表征特性,而微调后的嵌入向量则专注于任务特定特征。两者结合使用可以获得更全面的数据分析视角。
我们选取了四个具有代表性的图像分类数据集进行对比分析:
实验采用两种主流ViT架构:
完整的分析流程包含四个关键环节:
我们设计了并行的嵌入提取流程:
python复制def huggingface_embedding(df, modelname, image_name="image"):
# 初始化特征提取器和模型
feature_extractor = AutoFeatureExtractor.from_pretrained(modelname)
model = AutoModel.from_pretrained(modelname, output_hidden_states=True)
# 转换为HuggingFace数据集格式
dataset = datasets.Dataset.from_pandas(df).cast_column(image_name, datasets.Image())
# GPU加速计算
device = "cuda" if torch.cuda.is_available() else "cpu"
extract_fn = extract_embeddings(model.to(device), feature_extractor, image_name)
# 批量处理提升效率
updated_dataset = dataset.map(extract_fn, batched=True, batch_size=24)
return updated_dataset.to_pandas()
关键参数说明:
batch_size=24:平衡内存使用与计算效率output_hidden_states=True:获取完整的隐藏层输出通过实验观察发现:
微调前嵌入:
微调后嵌入:
采用基于密度的OOD(Out-Of-Distribution)检测方法:
python复制from cleanlab.outlier import OutOfDistribution
def outlier_score_by_embeddings_cleanlab(df, embedding_name):
embs = np.stack(df[embedding_name].to_numpy())
ood = OutOfDistribution()
return ood.fit_score(features=embs)
算法特点:
使用Annoy库构建近似最近邻索引:
python复制def nearest_neighbor_annoy(df, embedding_name="embedding_ft"):
t = AnnoyIndex(len(embs[0]), "angular") # 使用余弦相似度
for idx, x in enumerate(embs):
t.add_item(idx, x)
t.build(100) # 100棵树平衡精度与速度
return [t.get_nns_by_item(i, 2)[1] for i in range(len(embs))] # 获取每个样本的最近邻
实践建议:当嵌入维度>256时,建议使用"angular"距离度量;低维空间可考虑"euclidean"。
采用Renumics Spotlight构建可视化分析界面:
python复制from renumics import spotlight
dtypes = {
"nn_image": spotlight.Image,
"image": spotlight.Image,
"embedding_ft": spotlight.Embedding,
"embedding_foundation": spotlight.Embedding
}
spotlight.show(df, dtype=dtypes, layout=predefined_layout)
界面功能模块:
基于嵌入分析的经验总结:
不同场景下的选择建议:
| 场景特点 | 推荐方案 | 理论依据 |
|---|---|---|
| 标注数据充足 | 微调后嵌入+分类概率 | 最大化任务相关信号 |
| 数据分布复杂 | 微调前后嵌入融合 | 兼顾通用与特定特征 |
| 计算资源有限 | 仅使用微调前嵌入 | 避免重复计算 |
问题现象:提取的嵌入向量包含NaN值
问题现象:微调前后嵌入相似度过高
当异常分数分布不理想时:
提升Spotlight使用体验的方法:
在实际项目中,我们发现微调过程中的嵌入演变往往能揭示模型的学习动态。例如,在CIFAR-10实验中,随着微调进行,嵌入空间会经历三个典型阶段:初始混乱期、类别分离期和结构稳定期。理解这些模式有助于我们更好地设计训练策略和诊断模型行为。