{"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/lpgd-a-general-framework-for-backpropagation","title":"LPGD: A General Framework for Backpropagation through Embedded Optimization Layers","arxiv_id":"2407.05920","date":"2024-07-08","proceeding":null,"authors":["Anselm Paulus","Georg Martius","Vít Musil"],"abstract":"Embedding parameterized optimization problems as layers into machine learning architectures serves as a powerful inductive bias. Training such architectures with stochastic gradient descent requires care, as degenerate derivatives of the embedded optimization problem often render the gradients uninformative. We propose Lagrangian Proximal Gradient Descent (LPGD) a flexible framework for training architectures with embedded optimization layers that seamlessly integrates into automatic differentiation libraries. LPGD efficiently computes meaningful replacements of the degenerate optimization layer derivatives by re-running the forward solver oracle on a perturbed input. LPGD captures various previously proposed methods as special cases, while fostering deep links to traditional optimization methods. We theoretically analyze our method and demonstrate on historical and synthetic data that LPGD converges faster than gradient descent even in a differentiable setup.","url_abs":"https://arxiv.org/abs/2407.05920v1","url_pdf":"https://arxiv.org/pdf/2407.05920v1.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":"lpgd-a-general-framework-for-backpropagation","repo_url":"https://github.com/martius-lab/diffcp-lpgd","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok","spdx":"Apache-2.0"}}],"tasks":[{"task_slug":"inductive-bias","task_name":"Inductive Bias"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2407.05920","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2407.05920"}},"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/martius-lab/diffcp-lpgd","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"ran":4},"by_repo_kind":{"official":{"samples":4,"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":"0faa50eec5259286","entry":"get_random_like","repo":"martius-lab/diffcp-lpgd","repo_kind":"official","path":"diffcp/utils.py","file_url":"https://github.com/martius-lab/diffcp-lpgd/blob/HEAD/diffcp/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"0faa50eec5259286"}},{"code_sha256_prefix":"9f03eeabefb1005d","entry":"least_squares_eq_scs_data","repo":"martius-lab/diffcp-lpgd","repo_kind":"official","path":"diffcp/utils.py","file_url":"https://github.com/martius-lab/diffcp-lpgd/blob/HEAD/diffcp/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"9f03eeabefb1005d"}},{"code_sha256_prefix":"c14cf41cbcd741a2","entry":"scs_data_from_cvxpy_problem","repo":"martius-lab/diffcp-lpgd","repo_kind":"official","path":"diffcp/utils.py","file_url":"https://github.com/martius-lab/diffcp-lpgd/blob/HEAD/diffcp/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"c14cf41cbcd741a2"}},{"code_sha256_prefix":"d09b8552898a974f","entry":"vec_psd_dim","repo":"martius-lab/diffcp-lpgd","repo_kind":"official","path":"diffcp/cones.py","file_url":"https://github.com/martius-lab/diffcp-lpgd/blob/HEAD/diffcp/cones.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"d09b8552898a974f"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}