{"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/corrective-machine-unlearning","title":"Corrective Machine Unlearning","arxiv_id":"2402.14015","date":"2024-02-21","proceeding":null,"authors":["Shashwat Goel","Ameya Prabhu","Philip Torr","Ponnurangam Kumaraguru","Amartya Sanyal"],"abstract":"Machine Learning models increasingly face data integrity challenges due to the use of large-scale training datasets drawn from the Internet. We study what model developers can do if they detect that some data was manipulated or incorrect. Such manipulated data can cause adverse effects including vulnerability to backdoored samples, systemic biases, and reduced accuracy on certain input domains. Realistically, all manipulated training samples cannot be identified, and only a small, representative subset of the affected data can be flagged. We formalize Corrective Machine Unlearning as the problem of mitigating the impact of data affected by unknown manipulations on a trained model, only having identified a subset of the corrupted data. We demonstrate that the problem of corrective unlearning has significantly different requirements from traditional privacy-oriented unlearning. We find most existing unlearning methods, including retraining-from-scratch without the deletion set, require most of the manipulated data to be identified for effective corrective unlearning. However, one approach, Selective Synaptic Dampening, achieves limited success, unlearning adverse effects with just a small portion of the manipulated samples in our setting, which shows encouraging signs for future progress. We hope our work spurs research towards developing better methods for corrective unlearning and offers practitioners a new strategy to handle data integrity challenges arising from web-scale training. Code is available at https://github.com/drimpossible/corrective-unlearning-bench.","url_abs":"https://arxiv.org/abs/2402.14015v2","url_pdf":"https://arxiv.org/pdf/2402.14015v2.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":"corrective-machine-unlearning","repo_url":"https://github.com/drimpossible/corrective-unlearning-bench","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"GPL-3.0"}}],"tasks":[{"task_slug":"machine-unlearning","task_name":"Machine Unlearning"}],"methods":[{"method_slug":"1x1-convolution","method_name":"1x1 Convolution"},{"method_slug":"convolution","method_name":"Convolution"},{"method_slug":"non-maximum-suppression","method_name":"Non Maximum Suppression"},{"method_slug":"ssd","method_name":"SSD"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2402.14015","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2402.14015"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+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/drimpossible/corrective-unlearning-bench","reach":{"status":"ok","spdx":"GPL-3.0"}}],"summary":{"ran":8,"unverified":2},"by_repo_kind":{"official":{"samples":10,"ran":8,"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":10,"samples":[{"code_sha256_prefix":"1808b5d76587f897","entry":"compute_accuracy","repo":"drimpossible/corrective-unlearning-bench","repo_kind":"official","path":"logs/visualize.py","file_url":"https://github.com/drimpossible/corrective-unlearning-bench/blob/HEAD/logs/visualize.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"1808b5d76587f897"}},{"code_sha256_prefix":"4844d5c6ef2edff8","entry":"conv_bn","repo":"drimpossible/corrective-unlearning-bench","repo_kind":"official","path":"src/resnet.py","file_url":"https://github.com/drimpossible/corrective-unlearning-bench/blob/HEAD/src/resnet.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"4844d5c6ef2edff8"}},{"code_sha256_prefix":"4a5a2ffb330ca182","entry":"cutmix","repo":"drimpossible/corrective-unlearning-bench","repo_kind":"official","path":"src/utils.py","file_url":"https://github.com/drimpossible/corrective-unlearning-bench/blob/HEAD/src/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"4a5a2ffb330ca182"}},{"code_sha256_prefix":"bf20b453f51520be","entry":"get_labels","repo":"drimpossible/corrective-unlearning-bench","repo_kind":"official","path":"src/datasets.py","file_url":"https://github.com/drimpossible/corrective-unlearning-bench/blob/HEAD/src/datasets.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"bf20b453f51520be"}},{"code_sha256_prefix":"f69494457c839f5f","entry":"parse_pretrain_dirname","repo":"drimpossible/corrective-unlearning-bench","repo_kind":"official","path":"logs/visualize.py","file_url":"https://github.com/drimpossible/corrective-unlearning-bench/blob/HEAD/logs/visualize.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"f69494457c839f5f"}},{"code_sha256_prefix":"3de005ccf4faee85","entry":"parse_unlearn_dirname","repo":"drimpossible/corrective-unlearning-bench","repo_kind":"official","path":"logs/visualize.py","file_url":"https://github.com/drimpossible/corrective-unlearning-bench/blob/HEAD/logs/visualize.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"3de005ccf4faee85"}},{"code_sha256_prefix":"2e865549db6f7e9c","entry":"rand_bbox","repo":"drimpossible/corrective-unlearning-bench","repo_kind":"official","path":"src/utils.py","file_url":"https://github.com/drimpossible/corrective-unlearning-bench/blob/HEAD/src/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"2e865549db6f7e9c"}},{"code_sha256_prefix":"2958326e5b59443a","entry":"ssd_tuning","repo":"drimpossible/corrective-unlearning-bench","repo_kind":"official","path":"src/utils.py","file_url":"https://github.com/drimpossible/corrective-unlearning-bench/blob/HEAD/src/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"2958326e5b59443a"}},{"code_sha256_prefix":"d17fd04d5d7ea7a0","entry":"get_features","repo":"drimpossible/corrective-unlearning-bench","repo_kind":"official","path":"src/analyze_feats.py","file_url":"https://github.com/drimpossible/corrective-unlearning-bench/blob/HEAD/src/analyze_feats.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"d17fd04d5d7ea7a0"}},{"code_sha256_prefix":"74929642bc9b52f8","entry":"load_dataset","repo":"drimpossible/corrective-unlearning-bench","repo_kind":"official","path":"src/datasets.py","file_url":"https://github.com/drimpossible/corrective-unlearning-bench/blob/HEAD/src/datasets.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"74929642bc9b52f8"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}