{"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/provable-adversarial-robustness-for-group-1","title":"Provable Adversarial Robustness for Group Equivariant Tasks: Graphs, Point Clouds, Molecules, and More","arxiv_id":"2312.02708","date":"2023-12-05","proceeding":"NeurIPS 2023 11","authors":["Jan Schuchardt","Yan Scholten","Stephan Günnemann"],"abstract":"A machine learning model is traditionally considered robust if its prediction remains (almost) constant under input perturbations with small norm. However, real-world tasks like molecular property prediction or point cloud segmentation have inherent equivariances, such as rotation or permutation equivariance. In such tasks, even perturbations with large norm do not necessarily change an input's semantic content. Furthermore, there are perturbations for which a model's prediction explicitly needs to change. For the first time, we propose a sound notion of adversarial robustness that accounts for task equivariance. We then demonstrate that provable robustness can be achieved by (1) choosing a model that matches the task's equivariances (2) certifying traditional adversarial robustness. Certification methods are, however, unavailable for many models, such as those with continuous equivariances. We close this gap by developing the framework of equivariance-preserving randomized smoothing, which enables architecture-agnostic certification. We additionally derive the first architecture-specific graph edit distance certificates, i.e. sound robustness guarantees for isomorphism equivariant tasks like node classification. Overall, a sound notion of robustness is an important prerequisite for future work at the intersection of robust and geometric machine learning.","url_abs":"https://arxiv.org/abs/2312.02708v2","url_pdf":"https://arxiv.org/pdf/2312.02708v2.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":[],"tasks":[{"task_slug":"adversarial-robustness","task_name":"Adversarial Robustness"},{"task_slug":"molecular-property-prediction","task_name":"Molecular Property Prediction"},{"task_slug":"node-classification","task_name":"Node Classification"},{"task_slug":"point-cloud-segmentation","task_name":"Point Cloud Segmentation"},{"task_slug":"prediction","task_name":"Prediction"},{"task_slug":"property-prediction","task_name":"Property Prediction"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2312.02708","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2312.02708"}},"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":"deterministic:regex_extraction","url":"https://github.com/danielzuegner/robust-gcn","reach":null},{"provenance":"deterministic:regex_extraction","url":"https://github.com/RobustGraph/RoboGraph","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"deterministic:regex_extraction","url":"https://github.com/abojchevski/graph_cert","reach":null},{"provenance":"deterministic:regex_extraction","url":"https://github.com/abojchevski/sparse_smoothing","reach":null},{"provenance":"deterministic:regex_extraction","url":"https://github.com/jan-schuchardt/invariance-smoothing","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"deterministic:regex_extraction","url":"https://github.com/wollschl/uncertainty_for_molecules","reach":null}],"summary":{"ran":19,"ran_fixture":1,"ran_draft_wrong":2,"unverified":9},"by_repo_kind":{"found_in_text":{"samples":29,"ran":20,"repositories":5}},"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":4,"samples":[{"code_sha256_prefix":"a268573b18831a29","entry":"RobustGCNLayer","repo":"danielzuegner/robust-gcn","repo_kind":"found_in_text","path":"robust_gcn/robust_gcn.py","file_url":"https://github.com/danielzuegner/robust-gcn/blob/HEAD/robust_gcn/robust_gcn.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"a268573b18831a29"}},{"code_sha256_prefix":"9073926e56ac1c34","entry":"SPG","repo":"RobustGraph/RoboGraph","repo_kind":"found_in_text","path":"robograph/attack/SPG.py","file_url":"https://github.com/RobustGraph/RoboGraph/blob/HEAD/robograph/attack/SPG.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"9073926e56ac1c34"}},{"code_sha256_prefix":"fee01cc7d1d5c624","entry":"add_gaussian_noise","repo":"jan-schuchardt/invariance-smoothing","repo_kind":"found_in_text","path":"pointcloud_invariance_smoothing/training.py","file_url":"https://github.com/jan-schuchardt/invariance-smoothing/blob/HEAD/pointcloud_invariance_smoothing/training.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"fee01cc7d1d5c624"}},{"code_sha256_prefix":"637b58808cd09ffa","entry":"calculate_budget","repo":"RobustGraph/RoboGraph","repo_kind":"found_in_text","path":"robograph/attack/genetic_attack.py","file_url":"https://github.com/RobustGraph/RoboGraph/blob/HEAD/robograph/attack/genetic_attack.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"637b58808cd09ffa"}},{"code_sha256_prefix":"313a20ad80cd5b01","entry":"check_local","repo":"RobustGraph/RoboGraph","repo_kind":"found_in_text","path":"robograph/attack/genetic_attack.py","file_url":"https://github.com/RobustGraph/RoboGraph/blob/HEAD/robograph/attack/genetic_attack.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"313a20ad80cd5b01"}},{"code_sha256_prefix":"a01aa6ebe170c0dc","entry":"closed_form_B","repo":"RobustGraph/RoboGraph","repo_kind":"found_in_text","path":"robograph/attack/admm.py","file_url":"https://github.com/RobustGraph/RoboGraph/blob/HEAD/robograph/attack/admm.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"a01aa6ebe170c0dc"}},{"code_sha256_prefix":"13a44cb31287e83c","entry":"compute_rho","repo":"abojchevski/sparse_smoothing","repo_kind":"found_in_text","path":"sparse_smoothing/cert.py","file_url":"https://github.com/abojchevski/sparse_smoothing/blob/HEAD/sparse_smoothing/cert.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"13a44cb31287e83c"}},{"code_sha256_prefix":"2d5870b6c4fe5b59","entry":"dict_to_dot","repo":"jan-schuchardt/invariance-smoothing","repo_kind":"found_in_text","path":"pointcloud_invariance_smoothing/utils.py","file_url":"https://github.com/jan-schuchardt/invariance-smoothing/blob/HEAD/pointcloud_invariance_smoothing/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"2d5870b6c4fe5b59"}},{"code_sha256_prefix":"4bae3496a287a478","entry":"eval","repo":"RobustGraph/RoboGraph","repo_kind":"found_in_text","path":"robograph/model/gnn.py","file_url":"https://github.com/RobustGraph/RoboGraph/blob/HEAD/robograph/model/gnn.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"4bae3496a287a478"}},{"code_sha256_prefix":"de80f2bd3a451839","entry":"forward_cert_cohen","repo":"jan-schuchardt/invariance-smoothing","repo_kind":"found_in_text","path":"pointcloud_invariance_smoothing/certificates/blackbox.py","file_url":"https://github.com/jan-schuchardt/invariance-smoothing/blob/HEAD/pointcloud_invariance_smoothing/certificates/blackbox.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"de80f2bd3a451839"}},{"code_sha256_prefix":"e2bcee4d8b42f4b1","entry":"inverse_cert_cohen","repo":"jan-schuchardt/invariance-smoothing","repo_kind":"found_in_text","path":"pointcloud_invariance_smoothing/certificates/blackbox.py","file_url":"https://github.com/jan-schuchardt/invariance-smoothing/blob/HEAD/pointcloud_invariance_smoothing/certificates/blackbox.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"e2bcee4d8b42f4b1"}},{"code_sha256_prefix":"02d6a2dca6a6dc32","entry":"isLegal","repo":"RobustGraph/RoboGraph","repo_kind":"found_in_text","path":"robograph/attack/SPG.py","file_url":"https://github.com/RobustGraph/RoboGraph/blob/HEAD/robograph/attack/SPG.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"02d6a2dca6a6dc32"}},{"code_sha256_prefix":"b6d7cd2f3295bedf","entry":"load_graph","repo":"RobustGraph/RoboGraph","repo_kind":"found_in_text","path":"robograph/utils.py","file_url":"https://github.com/RobustGraph/RoboGraph/blob/HEAD/robograph/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b6d7cd2f3295bedf"}},{"code_sha256_prefix":"dc92a95e2bacf927","entry":"local_solver","repo":"RobustGraph/RoboGraph","repo_kind":"found_in_text","path":"robograph/attack/dp_old_version.py","file_url":"https://github.com/RobustGraph/RoboGraph/blob/HEAD/robograph/attack/dp_old_version.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"dc92a95e2bacf927"}},{"code_sha256_prefix":"c55badf69fe079ef","entry":"normalize_adj","repo":"RobustGraph/RoboGraph","repo_kind":"found_in_text","path":"robograph/model/gcn_conv.py","file_url":"https://github.com/RobustGraph/RoboGraph/blob/HEAD/robograph/model/gcn_conv.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"c55badf69fe079ef"}},{"code_sha256_prefix":"4d997c194830837b","entry":"polyinterp2","repo":"RobustGraph/RoboGraph","repo_kind":"found_in_text","path":"robograph/attack/SPG.py","file_url":"https://github.com/RobustGraph/RoboGraph/blob/HEAD/robograph/attack/SPG.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"4d997c194830837b"}},{"code_sha256_prefix":"a3cccfaa8bd4c86c","entry":"preprocess_adj","repo":null,"repo_kind":null,"path":null,"file_url":null,"link_basis":"identical_code_first_harvested_elsewhere","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":null,"inline_ok":false,"mcp_get_code":{"code_sha256":"a3cccfaa8bd4c86c"}},{"code_sha256_prefix":"802848e9f51394d1","entry":"process_data","repo":"RobustGraph/RoboGraph","repo_kind":"found_in_text","path":"robograph/utils.py","file_url":"https://github.com/RobustGraph/RoboGraph/blob/HEAD/robograph/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"802848e9f51394d1"}},{"code_sha256_prefix":"be9f96362f6c27b7","entry":"randomly_scale","repo":"jan-schuchardt/invariance-smoothing","repo_kind":"found_in_text","path":"pointcloud_invariance_smoothing/training.py","file_url":"https://github.com/jan-schuchardt/invariance-smoothing/blob/HEAD/pointcloud_invariance_smoothing/training.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"be9f96362f6c27b7"}},{"code_sha256_prefix":"1daf26cd6d81ba89","entry":"sample_single_axis_likelihood_ratio_logs","repo":"jan-schuchardt/invariance-smoothing","repo_kind":"found_in_text","path":"pointcloud_invariance_smoothing/certificates/rotation_elemental.py","file_url":"https://github.com/jan-schuchardt/invariance-smoothing/blob/HEAD/pointcloud_invariance_smoothing/certificates/rotation_elemental.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"1daf26cd6d81ba89"}},{"code_sha256_prefix":"c25e88689b0251b5","entry":"sparse_tensor","repo":null,"repo_kind":null,"path":null,"file_url":null,"link_basis":"identical_code_first_harvested_elsewhere","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":null,"inline_ok":false,"mcp_get_code":{"code_sha256":"c25e88689b0251b5"}},{"code_sha256_prefix":"3df5b2fc12d5a4ec","entry":"train","repo":"RobustGraph/RoboGraph","repo_kind":"found_in_text","path":"robograph/model/gnn.py","file_url":"https://github.com/RobustGraph/RoboGraph/blob/HEAD/robograph/model/gnn.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"3df5b2fc12d5a4ec"}},{"code_sha256_prefix":"a3af207d6d21af5d","entry":"RobustGCNModel","repo":"danielzuegner/robust-gcn","repo_kind":"found_in_text","path":"robust_gcn/robust_gcn.py","file_url":"https://github.com/danielzuegner/robust-gcn/blob/HEAD/robust_gcn/robust_gcn.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":"a3af207d6d21af5d"}},{"code_sha256_prefix":"98474b68028dbdbe","entry":"attack_global","repo":"RobustGraph/RoboGraph","repo_kind":"found_in_text","path":"robograph/utils.py","file_url":"https://github.com/RobustGraph/RoboGraph/blob/HEAD/robograph/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":"98474b68028dbdbe"}},{"code_sha256_prefix":"714d5d63e4a9394b","entry":"dp_solver","repo":"RobustGraph/RoboGraph","repo_kind":"found_in_text","path":"robograph/attack/dp_old_version.py","file_url":"https://github.com/RobustGraph/RoboGraph/blob/HEAD/robograph/attack/dp_old_version.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":"714d5d63e4a9394b"}},{"code_sha256_prefix":"f60179fa8fb21d2b","entry":"forward_elemental_rotation_cert","repo":"jan-schuchardt/invariance-smoothing","repo_kind":"found_in_text","path":"pointcloud_invariance_smoothing/certificates/rotation_elemental.py","file_url":"https://github.com/jan-schuchardt/invariance-smoothing/blob/HEAD/pointcloud_invariance_smoothing/certificates/rotation_elemental.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":"f60179fa8fb21d2b"}},{"code_sha256_prefix":"015c7f55ac954727","entry":"inverse_elemental_rotation_cert","repo":"jan-schuchardt/invariance-smoothing","repo_kind":"found_in_text","path":"pointcloud_invariance_smoothing/certificates/rotation_elemental.py","file_url":"https://github.com/jan-schuchardt/invariance-smoothing/blob/HEAD/pointcloud_invariance_smoothing/certificates/rotation_elemental.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":"015c7f55ac954727"}},{"code_sha256_prefix":"5ad2414d2eb09c07","entry":"local_solver_linear_term","repo":"RobustGraph/RoboGraph","repo_kind":"found_in_text","path":"robograph/attack/dp_old_version.py","file_url":"https://github.com/RobustGraph/RoboGraph/blob/HEAD/robograph/attack/dp_old_version.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":"5ad2414d2eb09c07"}},{"code_sha256_prefix":"97b718aa6a264cde","entry":"sample_votes_datapoint","repo":"jan-schuchardt/invariance-smoothing","repo_kind":"found_in_text","path":"pointcloud_invariance_smoothing/smoothing.py","file_url":"https://github.com/jan-schuchardt/invariance-smoothing/blob/HEAD/pointcloud_invariance_smoothing/smoothing.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":"97b718aa6a264cde"}},{"code_sha256_prefix":"c42e1cd047ffdb2c","entry":"sample_votes_dataset","repo":"jan-schuchardt/invariance-smoothing","repo_kind":"found_in_text","path":"pointcloud_invariance_smoothing/smoothing.py","file_url":"https://github.com/jan-schuchardt/invariance-smoothing/blob/HEAD/pointcloud_invariance_smoothing/smoothing.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":"c42e1cd047ffdb2c"}},{"code_sha256_prefix":"7510b92771842954","entry":"wrap_prediction_model","repo":"wollschl/uncertainty_for_molecules","repo_kind":"found_in_text","path":"ue4mol/models/utils.py","file_url":"https://github.com/wollschl/uncertainty_for_molecules/blob/HEAD/ue4mol/models/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"7510b92771842954"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}