{"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/pure-turning-polysemantic-neurons-into-pure","title":"PURE: Turning Polysemantic Neurons Into Pure Features by Identifying Relevant Circuits","arxiv_id":"2404.06453","date":"2024-04-09","proceeding":null,"authors":["Maximilian Dreyer","Erblina Purelku","Johanna Vielhaben","Wojciech Samek","Sebastian Lapuschkin"],"abstract":"The field of mechanistic interpretability aims to study the role of individual neurons in Deep Neural Networks. Single neurons, however, have the capability to act polysemantically and encode for multiple (unrelated) features, which renders their interpretation difficult. We present a method for disentangling polysemanticity of any Deep Neural Network by decomposing a polysemantic neuron into multiple monosemantic \"virtual\" neurons. This is achieved by identifying the relevant sub-graph (\"circuit\") for each \"pure\" feature. We demonstrate how our approach allows us to find and disentangle various polysemantic units of ResNet models trained on ImageNet. While evaluating feature visualizations using CLIP, our method effectively disentangles representations, improving upon methods based on neuron activations. Our code is available at https://github.com/maxdreyer/PURE.","url_abs":"https://arxiv.org/abs/2404.06453v1","url_pdf":"https://arxiv.org/pdf/2404.06453v1.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":"pure-turning-polysemantic-neurons-into-pure","repo_url":"https://github.com/maxdreyer/pure","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok","spdx":"BSD-3-Clause"}}],"tasks":[],"methods":[{"method_slug":"average-pooling","method_name":"Average Pooling"},{"method_slug":"clip","method_name":"CLIP"},{"method_slug":"convolution","method_name":"Convolution"},{"method_slug":"global-average-pooling","method_name":"Global Average Pooling"},{"method_slug":"kaiming-initialization","method_name":"Kaiming Initialization"},{"method_slug":"max-pooling","method_name":"Max Pooling"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2404.06453","atlas_url":"https://app.syntology.ai/?focus=2404.06453","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2404.06453"}},"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":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/maxdreyer/pure","reach":{"status":"ok","spdx":"BSD-3-Clause"}}],"summary":{"ran":3,"unverified":1},"by_repo_kind":{"official":{"samples":4,"ran":3,"repositories":1}},"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":"3879cca40ffb1d1e","entry":"compute_distances","repo":"maxdreyer/pure","repo_kind":"official","path":"experiments/disentangling/eval_CLIP_alignment.py","file_url":"https://github.com/maxdreyer/pure/blob/HEAD/experiments/disentangling/eval_CLIP_alignment.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"3879cca40ffb1d1e"}},{"code_sha256_prefix":"46ba6f801029f1b7","entry":"load_config","repo":"maxdreyer/pure","repo_kind":"official","path":"utils/helper.py","file_url":"https://github.com/maxdreyer/pure/blob/HEAD/utils/helper.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"46ba6f801029f1b7"}},{"code_sha256_prefix":"a308f46e6162ffd2","entry":"mystroke","repo":"maxdreyer/pure","repo_kind":"official","path":"utils/render.py","file_url":"https://github.com/maxdreyer/pure/blob/HEAD/utils/render.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"a308f46e6162ffd2"}},{"code_sha256_prefix":"dfa5a65342a498e4","entry":"get_imagenet","repo":"maxdreyer/pure","repo_kind":"official","path":"datasets/imagenet.py","file_url":"https://github.com/maxdreyer/pure/blob/HEAD/datasets/imagenet.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"dfa5a65342a498e4"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}