如何创建微调期间嵌入的动画

17 Mar 2025 | 4 分钟阅读
How to Create an Animation of the Embeddings During Fine-Tuning
How to Create an Animation of the Embeddings During Fine-Tuning

该活动有超过 200,000 次展示。许多读者对它的制作方式表示感兴趣,并受到了热烈欢迎。本文旨在帮助那些读者以及任何有兴趣创建类似可视化图的人。

本文的目标是提供一个详细的教程,介绍如何创建此类动画,包括所有必要的流程,例如微调、嵌入生成、异常检测、PCA、Procrustes、审查和动画创建。

准备:微调

预训练的 Vision Transformer (ViT) 模型。为此,我们使用 CIFAR-10 数据集,该数据集包含 60,000 张照片,分为十个类别:卡车、青蛙、马、鹿、猫、鸟和汽车。

要完成 CIFAR-10 的微调过程,请遵循 Embracing Face 关于使用 transformer 进行图像分类的说明。我们还使用 TrainerCallback 将训练过程中的损失值记录到 CSV 文件中,供动画使用。

为确保动画有足够的检查点,至关重要的是通过将 save_strategy="step" 和一个较低的 save_step 值设置在 TrainingArguments 中来增加检查点的保存间隔。动画的每一帧都代表一个不同的检查点。在训练期间,为每个检查点创建一个文件夹,并且 CSV 文件也已准备就绪,可供使用。

嵌入创建

为了使用不同的模型检查点从 CIFAR-10 数据集的测试集中创建嵌入,我们使用了 Transformers 库的 AutoFeatureExtractor 和 AutoModel 函数。

对于单个模型检查点,每个嵌入代表 10,000 张测试图像中的一张,是一个 768 维的向量。这些嵌入可以保存在与检查点相同的文件夹中,以保持一切井然有序。

提取异常值

可以使用 Cleanlab 库的 OutOfDistribution 类根据每个检查点的嵌入来查找异常值。然后可以使用所得分数确定动画的前 10 个异常值。

使用 Procrustes 分析和 PCA

我们使用 scikit-learn 包的 Principal Component Analysis (PCA) 在 2D 空间中可视化嵌入,该包将 768 维向量降至 2 维。由于轴翻转或旋转,每次时间步重新计算 PCA 时,动画中可能会出现大的跳跃。我们使用 SciPy 包中的额外 Procrustes 分析 [3] 将每一帧在几何上对齐到前一帧,以解决此问题。此分析仅涉及平移、旋转和统一缩放。这使得动画的过渡更加流畅。

在 Spotlight 中审查

在进行最后的润饰之前,我们在 Spotlight 中评估整个动画。此过程的第一个和最后一个检查点用于创建嵌入、执行 PCA 和识别异常值。启动 Spotlight,并加载生成的 DataFrame。

Spotlight 在屏幕的左上角提供了一个包含数据集中所有字段列表的完整表格。右上角是两个 PCA 表示,一个用于使用第一个检查点创建的嵌入,另一个用于最后一个检查点。底部是一个精选图片的展示。

How to Create an Animation of the Embeddings During Fine-Tuning

创建动画

每个检查点都会收到其图像,然后将其与相应的检查点一起保存。

这是通过 make_pca(...) 和 get_ood(...) 函数完成的,这些函数分别生成构成嵌入的 2D 点并提取前 8 个异常值。不同的类别由用于布局 2D 点的颜色表示。根据分数,异常值被组织起来,高分排行榜显示相关异常值的图像。训练损失从 CSV 文件导入并显示为折线图。

之后,可以使用 Imageio 等库将所有图像合并成 GIF。

How to Create an Animation of the Embeddings During Fine-Tuning
How to Create an Animation of the Embeddings During Fine-Tuning
How to Create an Animation of the Embeddings During Fine-Tuning

结论

本文提供了有关如何创建演示 Vision Transformer (ViT) 模型微调过程的动画的全面课程。我们已经涵盖了创建和分析嵌入、可视化结果以及创建集成这些组件的动画的步骤。

创建此类动画是向他人传授这些概念以及帮助他人理解修改 ViT 模型复杂过程的强大方法。