{"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/how-to-learn-a-useful-critic-model-based","title":"How to Learn a Useful Critic? Model-based Action-Gradient-Estimator Policy Optimization","arxiv_id":"2004.14309","date":"2020-04-29","proceeding":"NeurIPS 2020 12","authors":["Pierluca D'Oro","Wojciech Jaśkowski"],"abstract":"Deterministic-policy actor-critic algorithms for continuous control improve the actor by plugging its actions into the critic and ascending the action-value gradient, which is obtained by chaining the actor's Jacobian matrix with the gradient of the critic with respect to input actions. However, instead of gradients, the critic is, typically, only trained to accurately predict expected returns, which, on their own, are useless for policy optimization. In this paper, we propose MAGE, a model-based actor-critic algorithm, grounded in the theory of policy gradients, which explicitly learns the action-value gradient. MAGE backpropagates through the learned dynamics to compute gradient targets in temporal difference learning, leading to a critic tailored for policy improvement. On a set of MuJoCo continuous-control tasks, we demonstrate the efficiency of the algorithm in comparison to model-free and model-based state-of-the-art baselines.","url_abs":"https://arxiv.org/abs/2004.14309v2","url_pdf":"https://arxiv.org/pdf/2004.14309v2.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":"how-to-learn-a-useful-critic-model-based","repo_url":"https://github.com/nnaisense/MAGE","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":null},{"paper_slug":"how-to-learn-a-useful-critic-model-based","repo_url":"https://github.com/angelolovatto/raylab","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"how-to-learn-a-useful-critic-model-based","repo_url":"https://github.com/maximerobeyns/taylortd","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":null}],"tasks":[{"task_slug":"continuous-control","task_name":"Continuous Control"},{"task_slug":"mujoco","task_name":"MuJoCo"},{"task_slug":"continuous-control","task_name":"continuous-control"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2004.14309","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2004.14309"}},"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/maximerobeyns/taylortd","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/nnaisense/MAGE","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/angelolovatto/raylab","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran_draft_wrong":1,"unverified":5},"by_repo_kind":{"listed":{"samples":6,"ran":1,"repositories":2}},"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":1,"samples":[{"code_sha256_prefix":"1003d2f5e7abc4bc","entry":"inner_product_last_dim","repo":"maximerobeyns/taylortd","repo_kind":"listed","path":"MC_expctd_TD3/expected_td3.py","file_url":"https://github.com/maximerobeyns/taylortd/blob/HEAD/MC_expctd_TD3/expected_td3.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"1003d2f5e7abc4bc"}},{"code_sha256_prefix":"5bd21b59b9184273","entry":"configure","repo":"angelolovatto/raylab","repo_kind":"listed","path":"raylab/options.py","file_url":"https://github.com/angelolovatto/raylab/blob/HEAD/raylab/options.py","link_basis":"harvester_set","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":"5bd21b59b9184273"}},{"code_sha256_prefix":"8ed9cb782d14f9e5","entry":"get_agent_cls","repo":"angelolovatto/raylab","repo_kind":"listed","path":"raylab/agents/registry.py","file_url":"https://github.com/angelolovatto/raylab/blob/HEAD/raylab/agents/registry.py","link_basis":"harvester_set","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":"8ed9cb782d14f9e5"}},{"code_sha256_prefix":"aafa30b64abfcbaf","entry":"get_last_checkpoint_path","repo":"angelolovatto/raylab","repo_kind":"listed","path":"raylab/cli/best_checkpoint.py","file_url":"https://github.com/angelolovatto/raylab/blob/HEAD/raylab/cli/best_checkpoint.py","link_basis":"harvester_set","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":"aafa30b64abfcbaf"}},{"code_sha256_prefix":"994a6a2e9045d553","entry":"is_experiment_root","repo":"angelolovatto/raylab","repo_kind":"listed","path":"raylab/cli/experiment_dashboard.py","file_url":"https://github.com/angelolovatto/raylab/blob/HEAD/raylab/cli/experiment_dashboard.py","link_basis":"harvester_set","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":"994a6a2e9045d553"}},{"code_sha256_prefix":"4b99f0e38ded336a","entry":"produce_rollout","repo":"angelolovatto/raylab","repo_kind":"listed","path":"raylab/cli/module_dashboard.py","file_url":"https://github.com/angelolovatto/raylab/blob/HEAD/raylab/cli/module_dashboard.py","link_basis":"harvester_set","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":"4b99f0e38ded336a"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}