{"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/forward-learning-of-graph-neural-networks","title":"Forward Learning of Graph Neural Networks","arxiv_id":"2403.11004","date":"2024-03-16","proceeding":null,"authors":["Namyong Park","Xing Wang","Antoine Simoulin","Shuai Yang","Grey Yang","Ryan Rossi","Puja Trivedi","Nesreen Ahmed"],"abstract":"Graph neural networks (GNNs) have achieved remarkable success across a wide range of applications, such as recommendation, drug discovery, and question answering. Behind the success of GNNs lies the backpropagation (BP) algorithm, which is the de facto standard for training deep neural networks (NNs). However, despite its effectiveness, BP imposes several constraints, which are not only biologically implausible, but also limit the scalability, parallelism, and flexibility in learning NNs. Examples of such constraints include storage of neural activities computed in the forward pass for use in the subsequent backward pass, and the dependence of parameter updates on non-local signals. To address these limitations, the forward-forward algorithm (FF) was recently proposed as an alternative to BP in the image classification domain, which trains NNs by performing two forward passes over positive and negative data. Inspired by this advance, we propose ForwardGNN in this work, a new forward learning procedure for GNNs, which avoids the constraints imposed by BP via an effective layer-wise local forward training. ForwardGNN extends the original FF to deal with graph data and GNNs, and makes it possible to operate without generating negative inputs (hence no longer forward-forward). Further, ForwardGNN enables each layer to learn from both the bottom-up and top-down signals without relying on the backpropagation of errors. Extensive experiments on real-world datasets show the effectiveness and generality of the proposed forward graph learning framework. We release our code at https://github.com/facebookresearch/forwardgnn.","url_abs":"https://arxiv.org/abs/2403.11004v2","url_pdf":"https://arxiv.org/pdf/2403.11004v2.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":"forward-learning-of-graph-neural-networks","repo_url":"https://github.com/facebookresearch/forwardgnn","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"NOASSERTION"}}],"tasks":[{"task_slug":"drug-discovery","task_name":"Drug Discovery"},{"task_slug":"graph-learning","task_name":"Graph Learning"},{"task_slug":"image-classification","task_name":"Image Classification"},{"task_slug":"question-answering","task_name":"Question Answering"},{"task_slug":"image-classification","task_name":"image-classification"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2403.11004","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2403.11004"}},"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/facebookresearch/forwardgnn","reach":{"status":"ok","spdx":"NOASSERTION"}}],"summary":{"ran":5},"by_repo_kind":{"official":{"samples":5,"ran":5,"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":5,"samples":[{"code_sha256_prefix":"529c5e4ddd12fe73","entry":"build_model","repo":"facebookresearch/forwardgnn","repo_kind":"official","path":"src/train_backprop.py","file_url":"https://github.com/facebookresearch/forwardgnn/blob/HEAD/src/train_backprop.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"529c5e4ddd12fe73"}},{"code_sha256_prefix":"e56eb70d6697ccf6","entry":"eval_link_prediction","repo":"facebookresearch/forwardgnn","repo_kind":"official","path":"src/utils/eval_utils.py","file_url":"https://github.com/facebookresearch/forwardgnn/blob/HEAD/src/utils/eval_utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"e56eb70d6697ccf6"}},{"code_sha256_prefix":"5e41b2b5ea936d49","entry":"eval_node_classification","repo":"facebookresearch/forwardgnn","repo_kind":"official","path":"src/utils/eval_utils.py","file_url":"https://github.com/facebookresearch/forwardgnn/blob/HEAD/src/utils/eval_utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"5e41b2b5ea936d49"}},{"code_sha256_prefix":"8802b3a7504df501","entry":"forwardforward_loss_fn","repo":"facebookresearch/forwardgnn","repo_kind":"official","path":"src/forward_learning/loss.py","file_url":"https://github.com/facebookresearch/forwardgnn/blob/HEAD/src/forward_learning/loss.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"8802b3a7504df501"}},{"code_sha256_prefix":"661f3e53cedd76cc","entry":"load_perf_dict","repo":"facebookresearch/forwardgnn","repo_kind":"official","path":"src/forward_learning/utils.py","file_url":"https://github.com/facebookresearch/forwardgnn/blob/HEAD/src/forward_learning/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"661f3e53cedd76cc"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}