{"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/non-adversarial-inverse-reinforcement","title":"Non-Adversarial Inverse Reinforcement Learning via Successor Feature Matching","arxiv_id":"2411.07007","date":"2024-11-11","proceeding":null,"authors":["Arnav Kumar Jain","Harley Wiltzer","Jesse Farebrother","Irina Rish","Glen Berseth","Sanjiban Choudhury"],"abstract":"In inverse reinforcement learning (IRL), an agent seeks to replicate expert demonstrations through interactions with the environment. Traditionally, IRL is treated as an adversarial game, where an adversary searches over reward models, and a learner optimizes the reward through repeated RL procedures. This game-solving approach is both computationally expensive and difficult to stabilize. In this work, we propose a novel approach to IRL by direct policy optimization: exploiting a linear factorization of the return as the inner product of successor features and a reward vector, we design an IRL algorithm by policy gradient descent on the gap between the learner and expert features. Our non-adversarial method does not require learning a reward function and can be solved seamlessly with existing actor-critic RL algorithms. Remarkably, our approach works in state-only settings without expert action labels, a setting which behavior cloning (BC) cannot solve. Empirical results demonstrate that our method learns from as few as a single expert demonstration and achieves improved performance on various control tasks.","url_abs":"https://arxiv.org/abs/2411.07007v1","url_pdf":"https://arxiv.org/pdf/2411.07007v1.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":"non-adversarial-inverse-reinforcement","repo_url":"https://github.com/arnavkj1995/sfm","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"jax","reach":null}],"tasks":[{"task_slug":"reinforcement-learning","task_name":"Reinforcement Learning"},{"task_slug":"reinforcement-learning-2","task_name":"reinforcement-learning"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2411.07007","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2411.07007"}},"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":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/arnavkj1995/sfm","reach":null}],"summary":{"ran":14,"ran_draft_wrong":3,"ran_fixture":1,"ran_violates":1,"unverified":5},"by_repo_kind":{"official":{"samples":24,"ran":19,"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":"9e907e282a2641f1","entry":"FDM","repo":"arnavkj1995/sfm","repo_kind":"official","path":"agents/sfm_sac.py","file_url":"https://github.com/arnavkj1995/sfm/blob/HEAD/agents/sfm_sac.py","link_basis":"first_harvest_node","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":"9e907e282a2641f1"}},{"code_sha256_prefix":"0cb9401c40c21b9d","entry":"FDMNetwork","repo":"arnavkj1995/sfm","repo_kind":"official","path":"agents/sfm_sac.py","file_url":"https://github.com/arnavkj1995/sfm/blob/HEAD/agents/sfm_sac.py","link_basis":"first_harvest_node","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":"0cb9401c40c21b9d"}},{"code_sha256_prefix":"f02b8230f446eb06","entry":"HILPNetwork","repo":"arnavkj1995/sfm","repo_kind":"official","path":"agents/sfm_sac.py","file_url":"https://github.com/arnavkj1995/sfm/blob/HEAD/agents/sfm_sac.py","link_basis":"first_harvest_node","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":"f02b8230f446eb06"}},{"code_sha256_prefix":"847217e6e12730b0","entry":"IDF","repo":"arnavkj1995/sfm","repo_kind":"official","path":"agents/sfm_sac.py","file_url":"https://github.com/arnavkj1995/sfm/blob/HEAD/agents/sfm_sac.py","link_basis":"first_harvest_node","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":"847217e6e12730b0"}},{"code_sha256_prefix":"8bafbcb60e55b84b","entry":"IDFNetwork","repo":"arnavkj1995/sfm","repo_kind":"official","path":"agents/sfm_sac.py","file_url":"https://github.com/arnavkj1995/sfm/blob/HEAD/agents/sfm_sac.py","link_basis":"first_harvest_node","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":"8bafbcb60e55b84b"}},{"code_sha256_prefix":"c40a2f4a2d892827","entry":"MLP","repo":"arnavkj1995/sfm","repo_kind":"official","path":"agents/sfm_sac.py","file_url":"https://github.com/arnavkj1995/sfm/blob/HEAD/agents/sfm_sac.py","link_basis":"first_harvest_node","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":"c40a2f4a2d892827"}},{"code_sha256_prefix":"25f3d4763b663d09","entry":"PsiNetwork","repo":"arnavkj1995/sfm","repo_kind":"official","path":"agents/sfm_sac.py","file_url":"https://github.com/arnavkj1995/sfm/blob/HEAD/agents/sfm_sac.py","link_basis":"first_harvest_node","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":"25f3d4763b663d09"}},{"code_sha256_prefix":"5ca5cb5012818a3f","entry":"Random","repo":"arnavkj1995/sfm","repo_kind":"official","path":"agents/sfm_sac.py","file_url":"https://github.com/arnavkj1995/sfm/blob/HEAD/agents/sfm_sac.py","link_basis":"first_harvest_node","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":"5ca5cb5012818a3f"}},{"code_sha256_prefix":"687919961b5cdf4d","entry":"RandomNetwork","repo":"arnavkj1995/sfm","repo_kind":"official","path":"agents/sfm_sac.py","file_url":"https://github.com/arnavkj1995/sfm/blob/HEAD/agents/sfm_sac.py","link_basis":"first_harvest_node","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":"687919961b5cdf4d"}},{"code_sha256_prefix":"7d8bb229c8a55d3f","entry":"Simnorm","repo":"arnavkj1995/sfm","repo_kind":"official","path":"agents/sfm_sac.py","file_url":"https://github.com/arnavkj1995/sfm/blob/HEAD/agents/sfm_sac.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"7d8bb229c8a55d3f"}},{"code_sha256_prefix":"9e34fecadba7e9ac","entry":"Temperature","repo":"arnavkj1995/sfm","repo_kind":"official","path":"agents/sfm_sac.py","file_url":"https://github.com/arnavkj1995/sfm/blob/HEAD/agents/sfm_sac.py","link_basis":"first_harvest_node","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":"9e34fecadba7e9ac"}},{"code_sha256_prefix":"f1b12a121cc9ff6e","entry":"TrainState","repo":"arnavkj1995/sfm","repo_kind":"official","path":"agents/sfm_sac.py","file_url":"https://github.com/arnavkj1995/sfm/blob/HEAD/agents/sfm_sac.py","link_basis":"first_harvest_node","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":"f1b12a121cc9ff6e"}},{"code_sha256_prefix":"9ee3649e80d44e6b","entry":"TwinMLPNetworks","repo":"arnavkj1995/sfm","repo_kind":"official","path":"agents/sfm_sac.py","file_url":"https://github.com/arnavkj1995/sfm/blob/HEAD/agents/sfm_sac.py","link_basis":"first_harvest_node","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":"9ee3649e80d44e6b"}},{"code_sha256_prefix":"aee169a5c1aefb38","entry":"_L2","repo":"arnavkj1995/sfm","repo_kind":"official","path":"agents/sfm_sac.py","file_url":"https://github.com/arnavkj1995/sfm/blob/HEAD/agents/sfm_sac.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"aee169a5c1aefb38"}},{"code_sha256_prefix":"bfcf6c97c05f2e2c","entry":"_nl","repo":"arnavkj1995/sfm","repo_kind":"official","path":"agents/sfm_sac.py","file_url":"https://github.com/arnavkj1995/sfm/blob/HEAD/agents/sfm_sac.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":"bfcf6c97c05f2e2c"}},{"code_sha256_prefix":"c5e2d65ae4ba9bc6","entry":"default_init","repo":"arnavkj1995/sfm","repo_kind":"official","path":"agents/sfm_sac.py","file_url":"https://github.com/arnavkj1995/sfm/blob/HEAD/agents/sfm_sac.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":"c5e2d65ae4ba9bc6"}},{"code_sha256_prefix":"f0372bdb4c43d222","entry":"evaluate_agent","repo":"arnavkj1995/sfm","repo_kind":"official","path":"agents/sfm_td3.py","file_url":"https://github.com/arnavkj1995/sfm/blob/HEAD/agents/sfm_td3.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"f0372bdb4c43d222"}},{"code_sha256_prefix":"b7f63876d7bd89cd","entry":"get_discounted_sum","repo":"arnavkj1995/sfm","repo_kind":"official","path":"agents/sfm_sac.py","file_url":"https://github.com/arnavkj1995/sfm/blob/HEAD/agents/sfm_sac.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b7f63876d7bd89cd"}},{"code_sha256_prefix":"523179247a3ff659","entry":"update_ema","repo":"arnavkj1995/sfm","repo_kind":"official","path":"agents/sfm_sac.py","file_url":"https://github.com/arnavkj1995/sfm/blob/HEAD/agents/sfm_sac.py","link_basis":"first_harvest_node","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"523179247a3ff659"}},{"code_sha256_prefix":"a82ce9839262727a","entry":"ActorNetwork","repo":"arnavkj1995/sfm","repo_kind":"official","path":"agents/sfm_sac.py","file_url":"https://github.com/arnavkj1995/sfm/blob/HEAD/agents/sfm_sac.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":"a82ce9839262727a"}},{"code_sha256_prefix":"b821d8f39dbe176b","entry":"AvgL1Norm","repo":"arnavkj1995/sfm","repo_kind":"official","path":"agents/sfm_sac.py","file_url":"https://github.com/arnavkj1995/sfm/blob/HEAD/agents/sfm_sac.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":"b821d8f39dbe176b"}},{"code_sha256_prefix":"de8f06f126e8dfd7","entry":"HILP","repo":"arnavkj1995/sfm","repo_kind":"official","path":"agents/sfm_sac.py","file_url":"https://github.com/arnavkj1995/sfm/blob/HEAD/agents/sfm_sac.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":"de8f06f126e8dfd7"}},{"code_sha256_prefix":"1c07263892a8db35","entry":"Mish","repo":"arnavkj1995/sfm","repo_kind":"official","path":"agents/sfm_sac.py","file_url":"https://github.com/arnavkj1995/sfm/blob/HEAD/agents/sfm_sac.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":"1c07263892a8db35"}},{"code_sha256_prefix":"3d92e87926c814d7","entry":"SFM_SAC","repo":"arnavkj1995/sfm","repo_kind":"official","path":"agents/sfm_sac.py","file_url":"https://github.com/arnavkj1995/sfm/blob/HEAD/agents/sfm_sac.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":"3d92e87926c814d7"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}