{"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/explain-your-move-understanding-agent-actions-1","title":"Explain Your Move: Understanding Agent Actions Using Specific and Relevant Feature Attribution","arxiv_id":"1912.12191","date":"2019-12-23","proceeding":null,"authors":["Nikaash Puri","Sukriti Verma","Piyush Gupta","Dhruv Kayastha","Shripad Deshmukh","Balaji Krishnamurthy","Sameer Singh"],"abstract":"As deep reinforcement learning (RL) is applied to more tasks, there is a need to visualize and understand the behavior of learned agents. Saliency maps explain agent behavior by highlighting the features of the input state that are most relevant for the agent in taking an action. Existing perturbation-based approaches to compute saliency often highlight regions of the input that are not relevant to the action taken by the agent. Our proposed approach, SARFA (Specific and Relevant Feature Attribution), generates more focused saliency maps by balancing two aspects (specificity and relevance) that capture different desiderata of saliency. The first captures the impact of perturbation on the relative expected reward of the action to be explained. The second downweighs irrelevant features that alter the relative expected rewards of actions other than the action to be explained. We compare SARFA with existing approaches on agents trained to play board games (Chess and Go) and Atari games (Breakout, Pong and Space Invaders). We show through illustrative examples (Chess, Atari, Go), human studies (Chess), and automated evaluation methods (Chess) that SARFA generates saliency maps that are more interpretable for humans than existing approaches. For the code release and demo videos, see https://nikaashpuri.github.io/sarfa-saliency/.","url_abs":"https://arxiv.org/abs/1912.12191v4","url_pdf":"https://arxiv.org/pdf/1912.12191v4.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":"explain-your-move-understanding-agent-actions-1","repo_url":"https://github.com/rl-interpretation/understandingRL","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":null},{"paper_slug":"explain-your-move-understanding-agent-actions-1","repo_url":"https://github.com/nikaashpuri/sarfa-saliency","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"none","reach":null}],"tasks":[{"task_slug":"atari-games","task_name":"Atari Games"},{"task_slug":"board-games","task_name":"Board Games"},{"task_slug":"deep-reinforcement-learning","task_name":"Deep Reinforcement Learning"},{"task_slug":"reinforcement-learning","task_name":"Reinforcement Learning"},{"task_slug":"reinforcement-learning-1","task_name":"Reinforcement Learning (RL)"},{"task_slug":"specificity","task_name":"Specificity"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=1912.12191","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"1912.12191"}},"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/rl-interpretation/understandingRL","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/nikaashpuri/sarfa-saliency","reach":null}],"summary":{"ran_honours":3,"ran_draft_wrong":2,"ran_violates":1},"by_repo_kind":{"official":{"samples":2,"ran":2,"repositories":1},"listed":{"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":4,"samples":[{"code_sha256_prefix":"428b9e2c28356cde","entry":"computeSaliencyUsingSarfa","repo":"nikaashpuri/sarfa-saliency","repo_kind":"listed","path":"sarfa_saliency.py","file_url":"https://github.com/nikaashpuri/sarfa-saliency/blob/HEAD/sarfa_saliency.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"428b9e2c28356cde"}},{"code_sha256_prefix":"636e79ded1f9a112","entry":"cross_entropy","repo":"rl-interpretation/understandingRL","repo_kind":"official","path":"visualize_atari/saliency.py","file_url":"https://github.com/rl-interpretation/understandingRL/blob/HEAD/visualize_atari/saliency.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":"636e79ded1f9a112"}},{"code_sha256_prefix":"e3db66ce577ec4b4","entry":"cross_entropy","repo":"nikaashpuri/sarfa-saliency","repo_kind":"listed","path":"sarfa_saliency.py","file_url":"https://github.com/nikaashpuri/sarfa-saliency/blob/HEAD/sarfa_saliency.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"e3db66ce577ec4b4"}},{"code_sha256_prefix":"509a45cb8014fde0","entry":"cross_entropy_mcts","repo":"rl-interpretation/understandingRL","repo_kind":"official","path":"go/go_saliency.py","file_url":"https://github.com/rl-interpretation/understandingRL/blob/HEAD/go/go_saliency.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"509a45cb8014fde0"}},{"code_sha256_prefix":"ef0d62e8fcceba28","entry":"get_mask","repo":null,"repo_kind":null,"path":null,"file_url":null,"link_basis":"identical_code_first_harvested_elsewhere","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":null,"inline_ok":false,"mcp_get_code":{"code_sha256":"ef0d62e8fcceba28"}},{"code_sha256_prefix":"aa9aa8dd7b99d120","entry":"your_softmax","repo":"nikaashpuri/sarfa-saliency","repo_kind":"listed","path":"sarfa_saliency.py","file_url":"https://github.com/nikaashpuri/sarfa-saliency/blob/HEAD/sarfa_saliency.py","link_basis":"first_harvest_node","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"aa9aa8dd7b99d120"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}