{"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/action-matching-a-variational-method-for","title":"Action Matching: Learning Stochastic Dynamics from Samples","arxiv_id":"2210.06662","date":"2022-10-13","proceeding":null,"authors":["Kirill Neklyudov","Rob Brekelmans","Daniel Severo","Alireza Makhzani"],"abstract":"Learning the continuous dynamics of a system from snapshots of its temporal marginals is a problem which appears throughout natural sciences and machine learning, including in quantum systems, single-cell biological data, and generative modeling. In these settings, we assume access to cross-sectional samples that are uncorrelated over time, rather than full trajectories of samples. In order to better understand the systems under observation, we would like to learn a model of the underlying process that allows us to propagate samples in time and thereby simulate entire individual trajectories. In this work, we propose Action Matching, a method for learning a rich family of dynamics using only independent samples from its time evolution. We derive a tractable training objective, which does not rely on explicit assumptions about the underlying dynamics and does not require back-propagation through differential equations or optimal transport solvers. Inspired by connections with optimal transport, we derive extensions of Action Matching to learn stochastic differential equations and dynamics involving creation and destruction of probability mass. Finally, we showcase applications of Action Matching by achieving competitive performance in a diverse set of experiments from biology, physics, and generative modeling.","url_abs":"https://arxiv.org/abs/2210.06662v3","url_pdf":"https://arxiv.org/pdf/2210.06662v3.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":"action-matching-a-variational-method-for","repo_url":"https://github.com/necludov/jam","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"jax","reach":null}],"tasks":[{"task_slug":"colorization","task_name":"Colorization"},{"task_slug":"super-resolution","task_name":"Super-Resolution"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2210.06662","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2210.06662"}},"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/necludov/jam","reach":null},{"provenance":"deterministic:regex_extraction","url":"https://github.com/necludov/action-matching","reach":null}],"summary":{"ran":1,"ran_fixture":2,"ran_draft_wrong":1,"unverified":1},"by_repo_kind":{"official":{"samples":2,"ran":1,"repositories":1},"found_in_text":{"samples":3,"ran":3,"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":3,"samples":[{"code_sha256_prefix":"d7175c89d11fb001","entry":"AMLoss","repo":"necludov/action-matching","repo_kind":"found_in_text","path":"core/losses.py","file_url":"https://github.com/necludov/action-matching/blob/HEAD/core/losses.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"d7175c89d11fb001"}},{"code_sha256_prefix":"fce0f6e5743660d1","entry":"asslaguerre_torch","repo":"necludov/action-matching","repo_kind":"found_in_text","path":"core/hmodel.py","file_url":"https://github.com/necludov/action-matching/blob/HEAD/core/hmodel.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"fce0f6e5743660d1"}},{"code_sha256_prefix":"2abd5732cb5f0ec3","entry":"asslegendre_torch","repo":"necludov/action-matching","repo_kind":"found_in_text","path":"core/hmodel.py","file_url":"https://github.com/necludov/action-matching/blob/HEAD/core/hmodel.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"2abd5732cb5f0ec3"}},{"code_sha256_prefix":"5fe431cc3c099186","entry":"get_am_loss","repo":"necludov/jam","repo_kind":"official","path":"losses.py","file_url":"https://github.com/necludov/jam/blob/HEAD/losses.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"5fe431cc3c099186"}},{"code_sha256_prefix":"4c75a777beb20eea","entry":"get_model_fn","repo":"necludov/jam","repo_kind":"official","path":"losses.py","file_url":"https://github.com/necludov/jam/blob/HEAD/losses.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":"4c75a777beb20eea"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}