{"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/on-the-role-of-sparsity-and-dag-constraints","title":"On the Role of Sparsity and DAG Constraints for Learning Linear DAGs","arxiv_id":"2006.10201","date":"2020-06-17","proceeding":"NeurIPS 2020 12","authors":["Ignavier Ng","AmirEmad Ghassami","Kun Zhang"],"abstract":"Learning graphical structures based on Directed Acyclic Graphs (DAGs) is a challenging problem, partly owing to the large search space of possible graphs. A recent line of work formulates the structure learning problem as a continuous constrained optimization task using the least squares objective and an algebraic characterization of DAGs. However, the formulation requires a hard DAG constraint and may lead to optimization difficulties. In this paper, we study the asymptotic role of the sparsity and DAG constraints for learning DAG models in the linear Gaussian and non-Gaussian cases, and investigate their usefulness in the finite sample regime. Based on the theoretical results, we formulate a likelihood-based score function, and show that one only has to apply soft sparsity and DAG constraints to learn a DAG equivalent to the ground truth DAG. This leads to an unconstrained optimization problem that is much easier to solve. Using gradient-based optimization and GPU acceleration, our procedure can easily handle thousands of nodes while retaining a high accuracy. Extensive experiments validate the effectiveness of our proposed method and show that the DAG-penalized likelihood objective is indeed favorable over the least squares one with the hard DAG constraint.","url_abs":"https://arxiv.org/abs/2006.10201v3","url_pdf":"https://arxiv.org/pdf/2006.10201v3.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":"on-the-role-of-sparsity-and-dag-constraints","repo_url":"https://github.com/ignavierng/golem","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"tf","reach":null}],"tasks":[{"task_slug":null,"task_name":"GPU"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2006.10201","atlas_url":"https://app.syntology.ai/?focus=2006.10201","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2006.10201"}},"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":"deterministic:regex_extraction","url":"https://github.com/ignavier/golem","reach":{"status":"ok","spdx":"Apache-2.0"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/ignavierng/golem","reach":null}],"summary":{"unverified":7},"by_repo_kind":{"official":{"samples":1,"ran":0,"repositories":1},"found_in_text":{"samples":5,"ran":0,"repositories":1},"community":{"samples":1,"ran":0,"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":"c81d49045d06ca2f","entry":"GolemModel","repo":"ignavierng/golem","repo_kind":"official","path":"src/models/golem_model.py","file_url":"https://github.com/ignavierng/golem/blob/HEAD/src/models/golem_model.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"c81d49045d06ca2f"}},{"code_sha256_prefix":"a6e9c529933a6c29","entry":"count_accuracy","repo":"ignavier/golem","repo_kind":"found_in_text","path":"src/utils/utils.py","file_url":"https://github.com/ignavier/golem/blob/HEAD/src/utils/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"a6e9c529933a6c29"}},{"code_sha256_prefix":"dcfefca3872144bb","entry":"create_dir","repo":"ignavier/golem","repo_kind":"found_in_text","path":"src/utils/dir.py","file_url":"https://github.com/ignavier/golem/blob/HEAD/src/utils/dir.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"dcfefca3872144bb"}},{"code_sha256_prefix":"cbfc596e17f36b60","entry":"get_init_path","repo":"ignavier/golem","repo_kind":"found_in_text","path":"src/utils/utils.py","file_url":"https://github.com/ignavier/golem/blob/HEAD/src/utils/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"cbfc596e17f36b60"}},{"code_sha256_prefix":"e4f1aef57de46e20","entry":"is_dag","repo":"ignavier/golem","repo_kind":"found_in_text","path":"src/utils/utils.py","file_url":"https://github.com/ignavier/golem/blob/HEAD/src/utils/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"e4f1aef57de46e20"}},{"code_sha256_prefix":"1a2bc2ff671b050e","entry":"load_yaml_config","repo":"ignavier/golem","repo_kind":"found_in_text","path":"src/utils/config.py","file_url":"https://github.com/ignavier/golem/blob/HEAD/src/utils/config.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"1a2bc2ff671b050e"}},{"code_sha256_prefix":"8121d0e3bc3faff7","entry":"notears_linear","repo":"xunzheng/notears","repo_kind":"community","path":"notears/linear.py","file_url":"https://github.com/xunzheng/notears/blob/HEAD/notears/linear.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"8121d0e3bc3faff7"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}