自动电路发现
这是论文"面向机制可解释性的自动电路发现"(NeurIPS 2023 聚焦)的配套代码。
- :zap: 要运行ACDC,请查看
acdc/main.py
,或这个Colab笔记本 - :wrench: 要了解如何在模型的计算图中编辑边,请查看
notebooks/editing_edges.py
或这个Colab笔记本 - :sparkle: 要理解完全可编辑计算图的底层实现,请查看这个Colab笔记本或
notebooks/implementation_demo.py
该库基于TransformerLens的抽象(HookPoint
和标准化的HookedTransformer
):mag_right:
安装:
然后,你需要Python 3.8+和Poetry来安装ACDC,如下所示
git clone git+https://github.com/ArthurConmy/Automatic-Circuit-Discovery.git
cd Automatic-Circuit-Discovery
poetry env use 3.10 # 或在conda或venv环境中
# 推荐Python 3.10,但可使用任何 >= 3.8的Python版本
poetry install
系统依赖
:penguin: Ubuntu Linux
sudo apt-get update && sudo apt-get install libgl1-mesa-glx graphviz build-essential graphviz-dev
你可能还需要apt-get install python3.x-dev
,其中x
是你的Python版本(另见问题和pygraphviz安装故障排除)
:apple: Mac OS X
在Mac上,你需要让pip(在poetry内)知道Graphviz库的路径。
brew install graphviz
export CFLAGS="-I$(brew --prefix graphviz)/include"
export LDFLAGS="-L$(brew --prefix graphviz)/lib"
复现结果
要复现ACDC运行的KL散度与边数的帕累托前沿,运行python experiments/launch_induction.py
。同样,python experiments/launch_sixteen_heads.py
和python subnetwork_probing/train.py
用于生成其他方法的单个数据点,使用CLI帮助。所有这三个命令都可以生成wandb运行。我们使用notebooks/roc_plot_generator.py
将wandb运行的数据处理成JSON文件(参见experiments/results/plots_data/Makefile
中的命令),并使用notebooks/make_plotly_plots.py
从这些JSON文件生成图表。
测试
从根目录运行
pytest -vvv -m "not slow"
这将只选择未标记为slow
的测试。这些测试需要很长时间,适合偶尔运行,但不是每次都运行。
你可以通过以下命令运行慢速测试
pytest -s -m slow
贡献
我们欢迎关于代码不清晰的问题!
如果你的PR影响主演示,请重新运行
chmod +x experiments/make_notebooks.sh
./experiments/make_notebooks.sh
以自动将main.py
转换为可工作的演示,并检查是否出现错误。这里转换的笔记本必须只包含#%% [markdown]
纯markdown单元格和#%%
带代码的单元格。
引用ACDC
如果你使用ACDC,请联系我们!你可以如下引用这项工作:
@inproceedings{conmy2023automated,
title={Towards Automated Circuit Discovery for Mechanistic Interpretability},
author={Arthur Conmy and Augustine N. Mavor-Parker and Aengus Lynch and Stefan Heimersheim and Adri{\`a} Garriga-Alonso},
booktitle={Thirty-seventh Conference on Neural Information Processing Systems},
year={2023},
eprint={2304.14997},
archivePrefix={arXiv},
primaryClass={cs.LG}
}
待办事项
大部分已完成的待办事项列表
[ x ] 使TransformerLens
安装为Neel的代码而不是我的PR
[ x ] 将hook_mlp_in
添加到TransformerLens
并删除hook_resid_mid
(并测试以确保没有不良影响?)
[ x ] 从仓库中删除arthur-try-merge-tl
引用
[ x ] 制作关于抽象的笔记本
[ ? ] 修复Induction Main示例中的巨大边缘大小和发生的变化
[ x ] 找到更好的方法来处理Colabs安装的版本控制...
[ ] 神经元级实验
[ ] 位置级实验
[ ] 边梯度下降实验
[ ] 实现电路中断论文
[ x ] 更好地管理tracr
和其他依赖
[ ? ] 使SP测试工作(很多过时所以跳过)- 并检查SubnetworkProbing是否正确安装(没有__init__.pys!!!)
[ ? ] 使TransformerLens-main上失败的9个测试也通过
[ x ] 删除正在构建的代码库