Vision Transformer (ViT) Prisma 库
完整介绍(包括视觉机制可解释性的开放问题)请查看原始Less Wrong帖子这里。
ViT Prisma是一个开源的视觉和多模态模型机制可解释性库。目前,该库支持ViTs和CLIP。这个库由Sonia Joseph创建。ViT Prisma主要基于Neel Nanda的TransformerLens。
贡献者: Praneet Suresh、Yash Vadi、Rob Graham [更多贡献者即将加入]
我们欢迎新的贡献者。请查看我们的贡献指南这里和我们的开放问题。
安装仓库
使用pip安装:
pip install vit_prisma
从源代码安装为可编辑仓库:
git clone https://github.com/soniajoseph/ViT-Prisma
cd ViT-Prisma
pip install -e .
如何使用这个仓库?
查看我们的指南。
查看我们的教程笔记本以使用该仓库。
- 主要ViT演示 - ViT上主要机制可解释性技术的概述,包括直接logit归因、注意力头可视化和激活修补。激活修补通过最小消融将网络的预测从虎斑猫切换到边境牧羊犬。
- 表情符号Logit镜头 - 深入探讨层级和块级预测,包含交互式图表。
- 交互式注意力头导览 - 深入探讨ViT包含的各种类型的注意力头,带有交互式JavaScript。
特性
要全面演示Prisma的功能(包括上述带有交互性的可视化),请查看上面的演示笔记本。
注意力头可视化
激活修补
直接logit归因
表情符号logit镜头
支持的模型
训练代码
Prisma包含训练代码,用于训练你自己的自定义ViTs。训练小型ViTs在隔离模型中的特定行为时非常有用。
关于训练你自己的模型,请查看我们的指南。
自定义模型和检查点
ImageNet-1k分类检查点(块大小32)
此模型由Praneet Suresh训练。所有模型都包括训练检查点,以防你想分析训练动态。
这种较大块大小的ViT具有可检查的注意力头;否则块大小16的注意力头太大,难以在JavaScript中轻松渲染。
大小 | 层数 | 注意力+MLP | 仅注意力 | 模型链接 |
---|---|---|---|---|
微型 | 3 | 0.22 | 0.42 | 不适用 | 注意力+MLP |
ImageNet-1k分类检查点(块大小16)
详细的训练日志和指标可以在这里找到。这些模型由Yash Vadi训练。
结果表格
准确率 [ <准确率> | <前5准确率> ]
大小 | 层数 | 注意力+MLP | 仅注意力 | 模型链接 |
---|---|---|---|---|
微型 | 1 | 0.16 | 0.33 | 0.11 | 0.25 | 仅注意力, 注意力+MLP |
基础 | 2 | 0.23 | 0.44 | 0.16 | 0.34 | 仅注意力, 注意力+MLP |
小型 | 3 | 0.28 | 0.51 | 0.17 | 0.35 | 仅注意力, 注意力+MLP |
中型 | 4 | 0.33 | 0.56 | 0.17 | 0.36 | 仅注意力, 注意力+MLP |
dSprites形状分类训练检查点
原始数据集在这里。
完整结果和训练设置在这里。这些模型由Yash Vadi训练。
结果表格
大小 | 层数 | 注意力+MLP | 仅注意力 | 模型链接 |
---|---|---|---|---|
微型 | 1 | 0.535 | 0.459 | 仅注意力, 注意力+MLP |
基础 | 2 | 0.996 | 0.685 | 仅注意力, 注意力+MLP |
小型 | 3 | 1.000 | 0.774 | 仅注意力, 注意力+MLP |
中型 | 4 | 1.000 | 0.991 | 仅注意力, 注意力+MLP |
训练和上传模型的指南
将您训练好的模型上传到Huggingface。遵循Huggingface指南并创建一个模型卡片。尽可能详细地记录训练过程,包括权重和偏差的损失和准确率曲线链接、数据集(以及训练数据的顺序)、超参数、优化器、学习率计划、硬件以及其他可能相关的细节。
在整个训练过程中包含频繁的检查点,这将有助于其他研究人员理解训练动态。
引用
在论文或研究项目中使用时,请引用此仓库。
@misc{joseph2023vit,
author = {Sonia Joseph},
title = {ViT Prisma: A Mechanistic Interpretability Library for Vision Transformers},
year = {2023},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/soniajoseph/vit-prisma}}
}