{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/towards-automated-circuit-discovery-for-1","title":"Towards Automated Circuit Discovery for Mechanistic Interpretability","arxiv_id":"2304.14997","date":"2023-04-28","proceeding":"NeurIPS 2023 11","authors":["Arthur Conmy","Augustine N. Mavor-Parker","Aengus Lynch","Stefan Heimersheim","Adrià Garriga-Alonso"],"abstract":"Through considerable effort and intuition, several recent works have reverse-engineered nontrivial behaviors of transformer models. This paper systematizes the mechanistic interpretability process they followed. First, researchers choose a metric and dataset that elicit the desired model behavior. Then, they apply activation patching to find which abstract neural network units are involved in the behavior. By varying the dataset, metric, and units under investigation, researchers can understand the functionality of each component. We automate one of the process' steps: to identify the circuit that implements the specified behavior in the model's computational graph. We propose several algorithms and reproduce previous interpretability results to validate them. For example, the ACDC algorithm rediscovered 5/5 of the component types in a circuit in GPT-2 Small that computes the Greater-Than operation. ACDC selected 68 of the 32,000 edges in GPT-2 Small, all of which were manually found by previous work. Our code is available at https://github.com/ArthurConmy/Automatic-Circuit-Discovery.","url_abs":"https://arxiv.org/abs/2304.14997v4","url_pdf":"https://arxiv.org/pdf/2304.14997v4.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"towards-automated-circuit-discovery-for-1","repo_url":"https://github.com/arthurconmy/automatic-circuit-discovery","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"towards-automated-circuit-discovery-for-1","repo_url":"https://github.com/neelnanda-io/transformerlens","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"jax","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"towards-automated-circuit-discovery-for-1","repo_url":"https://github.com/FlyingPumba/circuits-benchmark","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"jax","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"towards-automated-circuit-discovery-for-1","repo_url":"https://github.com/flyingpumba/interpbench","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"jax","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[],"methods":[{"method_slug":"adam","method_name":"Adam"},{"method_slug":"attention","method_name":"Attention"},{"method_slug":"attention-dropout","method_name":"Attention Dropout"},{"method_slug":"bpe","method_name":"BPE"},{"method_slug":"cosine-annealing","method_name":"Cosine Annealing"},{"method_slug":"dense-connections","method_name":"Dense Connections"},{"method_slug":"discriminative-fine-tuning","method_name":"Discriminative Fine-Tuning"},{"method_slug":"dropout","method_name":"Dropout"},{"method_slug":"gpt-2","method_name":"GPT-2"},{"method_slug":"layer-normalization","method_name":"Layer Normalization"},{"method_slug":"linear-layer","method_name":"Linear Layer"},{"method_slug":"linear-warmup-with-cosine-annealing","method_name":"Linear Warmup With Cosine Annealing"},{"method_slug":"multi-head-attention","method_name":"Multi-Head Attention"},{"method_slug":"residual-connection","method_name":"Residual Connection"},{"method_slug":"softmax","method_name":"Softmax"},{"method_slug":"weight-decay","method_name":"Weight Decay"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2304.14997","atlas_url":"https://app.syntology.ai/?focus=2304.14997","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2304.14997"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-25T09:33:49+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"deterministic:regex_extraction","url":"https://github.com/ArthurConmy/Automatic-Circuit-Discovery","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/FlyingPumba/circuits-benchmark","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/arthurconmy/automatic-circuit-discovery","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/neelnanda-io/transformerlens","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/flyingpumba/interpbench","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"unverified":5},"by_repo_kind":{"official":{"samples":5,"ran":0,"repositories":2}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"6f89c1453cf54061","entry":"generate_random_color","repo":"ArthurConmy/Automatic-Circuit-Discovery","repo_kind":"official","path":"acdc/acdc_graphics.py","file_url":"https://github.com/ArthurConmy/Automatic-Circuit-Discovery/blob/HEAD/acdc/acdc_graphics.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"6f89c1453cf54061"}},{"code_sha256_prefix":"7d4321fb3e8a54b9","entry":"get_official_model_name","repo":"neelnanda-io/transformerlens","repo_kind":"official","path":"transformer_lens/supported_models.py","file_url":"https://github.com/neelnanda-io/transformerlens/blob/HEAD/transformer_lens/supported_models.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"7d4321fb3e8a54b9"}},{"code_sha256_prefix":"de093820db99eddf","entry":"kl_divergence","repo":"ArthurConmy/Automatic-Circuit-Discovery","repo_kind":"official","path":"acdc/acdc_utils.py","file_url":"https://github.com/ArthurConmy/Automatic-Circuit-Discovery/blob/HEAD/acdc/acdc_utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"de093820db99eddf"}},{"code_sha256_prefix":"988d0ee24c8fd958","entry":"logit_diff_metric","repo":"ArthurConmy/Automatic-Circuit-Discovery","repo_kind":"official","path":"acdc/acdc_utils.py","file_url":"https://github.com/ArthurConmy/Automatic-Circuit-Discovery/blob/HEAD/acdc/acdc_utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"988d0ee24c8fd958"}},{"code_sha256_prefix":"c82a83bc88812035","entry":"negative_log_probs","repo":"ArthurConmy/Automatic-Circuit-Discovery","repo_kind":"official","path":"acdc/acdc_utils.py","file_url":"https://github.com/ArthurConmy/Automatic-Circuit-Discovery/blob/HEAD/acdc/acdc_utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"c82a83bc88812035"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}