{"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/understanding-over-squashing-and-bottlenecks-1","title":"Understanding over-squashing and bottlenecks on graphs via curvature","arxiv_id":"2111.14522","date":"2021-11-29","proceeding":"ICLR 2022 4","authors":["Jake Topping","Francesco Di Giovanni","Benjamin Paul Chamberlain","Xiaowen Dong","Michael M. Bronstein"],"abstract":"Most graph neural networks (GNNs) use the message passing paradigm, in which node features are propagated on the input graph. Recent works pointed to the distortion of information flowing from distant nodes as a factor limiting the efficiency of message passing for tasks relying on long-distance interactions. This phenomenon, referred to as 'over-squashing', has been heuristically attributed to graph bottlenecks where the number of $k$-hop neighbors grows rapidly with $k$. We provide a precise description of the over-squashing phenomenon in GNNs and analyze how it arises from bottlenecks in the graph. For this purpose, we introduce a new edge-based combinatorial curvature and prove that negatively curved edges are responsible for the over-squashing issue. We also propose and experimentally test a curvature-based graph rewiring method to alleviate the over-squashing.","url_abs":"https://arxiv.org/abs/2111.14522v3","url_pdf":"https://arxiv.org/pdf/2111.14522v3.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":"understanding-over-squashing-and-bottlenecks-1","repo_url":"https://github.com/jctops/understanding-oversquashing","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"understanding-over-squashing-and-bottlenecks-1","repo_url":"https://github.com/harel147/REFine","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"understanding-over-squashing-and-bottlenecks-1","repo_url":"https://github.com/josephjwilson/cayley_graph_propagation","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"understanding-over-squashing-and-bottlenecks-1","repo_url":"https://gitlab.com/cedric_sanders/masterarbeit","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":null}],"tasks":[{"task_slug":"node-classification","task_name":"Node Classification"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[{"leaderboard":"/sota/node-classification-on-actor","task":"Node Classification","dataset":"Actor","model":"SDRF","rank_in_archive_order":62,"of":62,"metrics":{"Accuracy":"28.42 ± 0.75"},"uses_additional_data":false},{"leaderboard":"/sota/node-classification-on-chameleon","task":"Node Classification","dataset":"Chameleon","model":"SDRF","rank_in_archive_order":61,"of":61,"metrics":{"Accuracy":"42.73±0.15"},"uses_additional_data":false},{"leaderboard":"/sota/node-classification-on-citeseer","task":"Node Classification","dataset":"Citeseer","model":"SDRF","rank_in_archive_order":41,"of":71,"metrics":{"Accuracy":"72.58±0.20"},"uses_additional_data":false},{"leaderboard":"/sota/node-classification-on-cora","task":"Node Classification","dataset":"Cora","model":"SDRF","rank_in_archive_order":49,"of":73,"metrics":{"Accuracy":"82.76±0.23%"},"uses_additional_data":false},{"leaderboard":"/sota/node-classification-on-cornell","task":"Node Classification","dataset":"Cornell","model":"SDRF","rank_in_archive_order":59,"of":60,"metrics":{"Accuracy":"\t54.60±0.39"},"uses_additional_data":false},{"leaderboard":"/sota/node-classification-on-pubmed","task":"Node Classification","dataset":"Pubmed","model":"SDRF","rank_in_archive_order":52,"of":70,"metrics":{"Accuracy":"79.10±0.11"},"uses_additional_data":false},{"leaderboard":"/sota/node-classification-on-squirrel","task":"Node Classification","dataset":"Squirrel","model":"SDRF","rank_in_archive_order":53,"of":59,"metrics":{"Accuracy":"37.05±0.17"},"uses_additional_data":false},{"leaderboard":"/sota/node-classification-on-texas","task":"Node Classification","dataset":"Texas","model":"SDRF","rank_in_archive_order":58,"of":62,"metrics":{"Accuracy":"64.46±0.38"},"uses_additional_data":false},{"leaderboard":"/sota/node-classification-on-wisconsin","task":"Node Classification","dataset":"Wisconsin","model":"SDRF","rank_in_archive_order":63,"of":63,"metrics":{"Accuracy":"55.51±0.27"},"uses_additional_data":false}],"syntology":{"syntology_url":"https://syntology.ai/paper/2111.14522","atlas_url":"https://app.syntology.ai/?focus=2111.14522","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2111.14522"}},"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/jctops/understanding-oversquashing","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://gitlab.com/cedric_sanders/masterarbeit","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/harel147/REFine","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/josephjwilson/cayley_graph_propagation","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran":4,"unverified":1},"by_repo_kind":{"official":{"samples":5,"ran":4,"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":"01dafd45036549e9","entry":"balanced_forman_curvature","repo":"jctops/understanding-oversquashing","repo_kind":"official","path":"gdl/src/gdl/curvature/numba.py","file_url":"https://github.com/jctops/understanding-oversquashing/blob/HEAD/gdl/src/gdl/curvature/numba.py","link_basis":"harvester_set","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":"01dafd45036549e9"}},{"code_sha256_prefix":"6fc07452a6ae5e40","entry":"balanced_forman_post_delta","repo":"jctops/understanding-oversquashing","repo_kind":"official","path":"gdl/src/gdl/curvature/numba.py","file_url":"https://github.com/jctops/understanding-oversquashing/blob/HEAD/gdl/src/gdl/curvature/numba.py","link_basis":"harvester_set","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":"6fc07452a6ae5e40"}},{"code_sha256_prefix":"8e261bcbef0de223","entry":"evaluate","repo":"jctops/understanding-oversquashing","repo_kind":"official","path":"gdl/src/gdl/experiment/node_classification.py","file_url":"https://github.com/jctops/understanding-oversquashing/blob/HEAD/gdl/src/gdl/experiment/node_classification.py","link_basis":"harvester_set","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":"8e261bcbef0de223"}},{"code_sha256_prefix":"b335bd8cd24e345b","entry":"get_optimizer","repo":"jctops/understanding-oversquashing","repo_kind":"official","path":"gdl/src/gdl/experiment/optimizer.py","file_url":"https://github.com/jctops/understanding-oversquashing/blob/HEAD/gdl/src/gdl/experiment/optimizer.py","link_basis":"harvester_set","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":"b335bd8cd24e345b"}},{"code_sha256_prefix":"9d0aa5bc590c31b7","entry":"train","repo":"jctops/understanding-oversquashing","repo_kind":"official","path":"gdl/src/gdl/experiment/node_classification.py","file_url":"https://github.com/jctops/understanding-oversquashing/blob/HEAD/gdl/src/gdl/experiment/node_classification.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":"9d0aa5bc590c31b7"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}