{"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/recurrent-rational-networks","title":"Adaptive Rational Activations to Boost Deep Reinforcement Learning","arxiv_id":"2102.09407","date":"2021-02-18","proceeding":null,"authors":["Quentin Delfosse","Patrick Schramowski","Martin Mundt","Alejandro Molina","Kristian Kersting"],"abstract":"Latest insights from biology show that intelligence not only emerges from the connections between neurons but that individual neurons shoulder more computational responsibility than previously anticipated. This perspective should be critical in the context of constantly changing distinct reinforcement learning environments, yet current approaches still primarily employ static activation functions. In this work, we motivate why rationals are suitable for adaptable activation functions and why their inclusion into neural networks is crucial. Inspired by recurrence in residual networks, we derive a condition under which rational units are closed under residual connections and formulate a naturally regularised version: the recurrent-rational. We demonstrate that equipping popular algorithms with (recurrent-)rational activations leads to consistent improvements on Atari games, especially turning simple DQN into a solid approach, competitive to DDQN and Rainbow.","url_abs":"https://arxiv.org/abs/2102.09407v5","url_pdf":"https://arxiv.org/pdf/2102.09407v5.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":"recurrent-rational-networks","repo_url":"https://github.com/ml-research/rational_activations","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":null},{"paper_slug":"recurrent-rational-networks","repo_url":"https://github.com/ml-research/rational_rl","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"unanswered"}},{"paper_slug":"recurrent-rational-networks","repo_url":"https://github.com/ml-research/rational_sl","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"unanswered"}},{"paper_slug":"recurrent-rational-networks","repo_url":"https://github.com/k4ntz/activation-functions","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":null}],"tasks":[{"task_slug":"atari-games","task_name":"Atari Games"},{"task_slug":"deep-reinforcement-learning","task_name":"Deep Reinforcement Learning"},{"task_slug":"general-reinforcement-learning","task_name":"General Reinforcement Learning"},{"task_slug":"image-classification","task_name":"Image Classification"},{"task_slug":"reinforcement-learning","task_name":"Reinforcement Learning"},{"task_slug":"reinforcement-learning-1","task_name":"Reinforcement Learning (RL)"},{"task_slug":"reinforcement-learning-2","task_name":"reinforcement-learning"}],"methods":[{"method_slug":"1x1-convolution","method_name":"1x1 Convolution"},{"method_slug":"average-pooling","method_name":"Average Pooling"},{"method_slug":"batch-normalization","method_name":"Batch Normalization"},{"method_slug":"bottleneck-residual-block","method_name":"Bottleneck Residual Block"},{"method_slug":"convolution","method_name":"Convolution"},{"method_slug":"dqn","method_name":"DQN"},{"method_slug":"dense-connections","method_name":"Dense Connections"},{"method_slug":"double-dqn","method_name":"Double DQN"},{"method_slug":"double-q-learning","method_name":"Double Q-learning"},{"method_slug":"experience-replay","method_name":"Experience Replay"},{"method_slug":"global-average-pooling","method_name":"Global Average Pooling"},{"method_slug":"kaiming-initialization","method_name":"Kaiming Initialization"},{"method_slug":"max-pooling","method_name":"Max Pooling"},{"method_slug":"pelu","method_name":"PELU"},{"method_slug":"q-learning","method_name":"Q-Learning"},{"method_slug":"rational-activation-functions","method_name":"Rational Activation function"},{"method_slug":"relu","method_name":"ReLU"},{"method_slug":"residual-block","method_name":"Residual Block"},{"method_slug":"residual-connection","method_name":"Residual Connection"},{"method_slug":"tanh-activation","method_name":"Tanh Activation"}],"datasets_introduced":[],"methods_introduced":[],"results":[{"leaderboard":"/sota/atari-games-on-atari-2600-asterix","task":"Atari Games","dataset":"Atari 2600 Asterix","model":"Rational DQN Average","rank_in_archive_order":30,"of":49,"metrics":{"Score":"18109"},"uses_additional_data":false},{"leaderboard":"/sota/atari-games-on-atari-2600-asterix","task":"Atari Games","dataset":"Atari 2600 Asterix","model":"Recurrent Rational DQN Average","rank_in_archive_order":37,"of":49,"metrics":{"Score":"12621"},"uses_additional_data":false},{"leaderboard":"/sota/atari-games-on-atari-2600-battle-zone","task":"Atari Games","dataset":"Atari 2600 Battle Zone","model":"Recurrent Rational DQN Average","rank_in_archive_order":30,"of":47,"metrics":{"Score":"25749"},"uses_additional_data":false},{"leaderboard":"/sota/atari-games-on-atari-2600-battle-zone","task":"Atari Games","dataset":"Atari 2600 Battle Zone","model":"Rational DQN Average","rank_in_archive_order":35,"of":47,"metrics":{"Score":"23403"},"uses_additional_data":false},{"leaderboard":"/sota/atari-games-on-atari-2600-breakout","task":"Atari Games","dataset":"Atari 2600 Breakout","model":"Recurrent Rational DQN Average","rank_in_archive_order":40,"of":58,"metrics":{"Score":"336"},"uses_additional_data":false},{"leaderboard":"/sota/atari-games-on-atari-2600-breakout","task":"Atari Games","dataset":"Atari 2600 Breakout","model":"Rational DQN Average","rank_in_archive_order":41,"of":58,"metrics":{"Score":"316"},"uses_additional_data":false},{"leaderboard":"/sota/atari-games-on-atari-2600-enduro","task":"Atari Games","dataset":"Atari 2600 Enduro","model":"Rational DQN Average","rank_in_archive_order":30,"of":48,"metrics":{"Score":"1043"},"uses_additional_data":false},{"leaderboard":"/sota/atari-games-on-atari-2600-enduro","task":"Atari Games","dataset":"Atari 2600 Enduro","model":"Recurrent Rational DQN Average","rank_in_archive_order":31,"of":48,"metrics":{"Score":"957"},"uses_additional_data":false},{"leaderboard":"/sota/atari-games-on-atari-2600-james-bond","task":"Atari Games","dataset":"Atari 2600 James Bond","model":"Recurrent Rational DQN Average","rank_in_archive_order":22,"of":45,"metrics":{"Score":"1137"},"uses_additional_data":false},{"leaderboard":"/sota/atari-games-on-atari-2600-james-bond","task":"Atari Games","dataset":"Atari 2600 James Bond","model":"Rational DQN Average","rank_in_archive_order":23,"of":45,"metrics":{"Score":"1122"},"uses_additional_data":false},{"leaderboard":"/sota/atari-games-on-atari-2600-kangaroo","task":"Atari Games","dataset":"Atari 2600 Kangaroo","model":"Recurrent Rational DQN Average","rank_in_archive_order":28,"of":47,"metrics":{"Score":"5266"},"uses_additional_data":false},{"leaderboard":"/sota/atari-games-on-atari-2600-kangaroo","task":"Atari Games","dataset":"Atari 2600 Kangaroo","model":"Rational DQN Average","rank_in_archive_order":31,"of":47,"metrics":{"Score":"2941"},"uses_additional_data":false},{"leaderboard":"/sota/atari-games-on-atari-2600-pong","task":"Atari Games","dataset":"Atari 2600 Pong","model":"Recurrent Rational DQN Average","rank_in_archive_order":40,"of":52,"metrics":{"Score":"18.13"},"uses_additional_data":false},{"leaderboard":"/sota/atari-games-on-atari-2600-pong","task":"Atari Games","dataset":"Atari 2600 Pong","model":"Rational DQN Average","rank_in_archive_order":41,"of":52,"metrics":{"Score":"18.04"},"uses_additional_data":false},{"leaderboard":"/sota/atari-games-on-atari-2600-qbert","task":"Atari Games","dataset":"Atari 2600 Q*Bert","model":"Rational DQN Average","rank_in_archive_order":30,"of":57,"metrics":{"Score":"14436"},"uses_additional_data":false},{"leaderboard":"/sota/atari-games-on-atari-2600-qbert","task":"Atari Games","dataset":"Atari 2600 Q*Bert","model":"Recurrent Rational DQN Average","rank_in_archive_order":34,"of":57,"metrics":{"Score":"14080"},"uses_additional_data":false},{"leaderboard":"/sota/atari-games-on-atari-2600-seaquest","task":"Atari Games","dataset":"Atari 2600 Seaquest","model":"Recurrent Rational DQN Average","rank_in_archive_order":27,"of":57,"metrics":{"Score":"7460"},"uses_additional_data":false},{"leaderboard":"/sota/atari-games-on-atari-2600-seaquest","task":"Atari Games","dataset":"Atari 2600 Seaquest","model":"Rational DQN Average","rank_in_archive_order":29,"of":57,"metrics":{"Score":"6603"},"uses_additional_data":false},{"leaderboard":"/sota/atari-games-on-atari-2600-skiing","task":"Atari Games","dataset":"Atari 2600 Skiing","model":"Recurrent Rational DQN Average","rank_in_archive_order":16,"of":23,"metrics":{"Score":"-23582"},"uses_additional_data":true},{"leaderboard":"/sota/atari-games-on-atari-2600-skiing","task":"Atari Games","dataset":"Atari 2600 Skiing","model":"Rational DQN Average","rank_in_archive_order":17,"of":23,"metrics":{"Score":"-23487"},"uses_additional_data":true},{"leaderboard":"/sota/atari-games-on-atari-2600-space-invaders","task":"Atari Games","dataset":"Atari 2600 Space Invaders","model":"Recurrent Rational DQN Average","rank_in_archive_order":40,"of":55,"metrics":{"Score":"1395"},"uses_additional_data":false},{"leaderboard":"/sota/atari-games-on-atari-2600-space-invaders","task":"Atari Games","dataset":"Atari 2600 Space Invaders","model":"Rational DQN Average","rank_in_archive_order":51,"of":55,"metrics":{"Score":"650"},"uses_additional_data":false},{"leaderboard":"/sota/atari-games-on-atari-2600-tennis","task":"Atari Games","dataset":"Atari 2600 Tennis","model":"Recurrent Rational DQN Average","rank_in_archive_order":10,"of":43,"metrics":{"Score":"20.6"},"uses_additional_data":false},{"leaderboard":"/sota/atari-games-on-atari-2600-tennis","task":"Atari Games","dataset":"Atari 2600 Tennis","model":"Rational DQN Average","rank_in_archive_order":11,"of":43,"metrics":{"Score":"20.5"},"uses_additional_data":false},{"leaderboard":"/sota/atari-games-on-atari-2600-time-pilot","task":"Atari Games","dataset":"Atari 2600 Time Pilot","model":"Rational DQN Average","rank_in_archive_order":13,"of":44,"metrics":{"Score":"17632"},"uses_additional_data":false},{"leaderboard":"/sota/atari-games-on-atari-2600-time-pilot","task":"Atari Games","dataset":"Atari 2600 Time Pilot","model":"Recurrent Rational DQN Average","rank_in_archive_order":15,"of":44,"metrics":{"Score":"13261"},"uses_additional_data":false},{"leaderboard":"/sota/atari-games-on-atari-2600-tutankham","task":"Atari Games","dataset":"Atari 2600 Tutankham","model":"Recurrent Rational DQN Average","rank_in_archive_order":27,"of":44,"metrics":{"Score":"184"},"uses_additional_data":false},{"leaderboard":"/sota/atari-games-on-atari-2600-tutankham","task":"Atari Games","dataset":"Atari 2600 Tutankham","model":"Rational DQN Average","rank_in_archive_order":29,"of":44,"metrics":{"Score":"179"},"uses_additional_data":false},{"leaderboard":"/sota/atari-games-on-atari-2600-video-pinball","task":"Atari Games","dataset":"Atari 2600 Video Pinball","model":"Rational DQN Average","rank_in_archive_order":30,"of":42,"metrics":{"Score":"149712"},"uses_additional_data":false},{"leaderboard":"/sota/atari-games-on-atari-2600-video-pinball","task":"Atari Games","dataset":"Atari 2600 Video Pinball","model":"Recurrent Rational DQN Average","rank_in_archive_order":34,"of":42,"metrics":{"Score":"86942"},"uses_additional_data":false}],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2102.09407","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2102.09407"}},"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/ml-research/rational_activations","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/ml-research/rational_rl","reach":{"status":"unanswered"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/k4ntz/activation-functions","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/ml-research/rational_sl","reach":{"status":"unanswered"}}],"summary":{"ran_fixture":6},"by_repo_kind":{"official":{"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":"39ec3d1f9d97cc5c","entry":"Rational_PYTORCH_A_F","repo":null,"repo_kind":null,"path":null,"file_url":null,"link_basis":"identical_code_first_harvested_elsewhere","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":null,"inline_ok":false,"mcp_get_code":{"code_sha256":"39ec3d1f9d97cc5c"}},{"code_sha256_prefix":"6e9f17d4218ef85b","entry":"Rational_PYTORCH_A_F","repo":"k4ntz/activation-functions","repo_kind":"official","path":"activations/torch/rationals/rational_pytorch_functions.py","file_url":"https://github.com/k4ntz/activation-functions/blob/HEAD/activations/torch/rationals/rational_pytorch_functions.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"6e9f17d4218ef85b"}},{"code_sha256_prefix":"15a510212432a6c3","entry":"Rational_PYTORCH_B_F","repo":null,"repo_kind":null,"path":null,"file_url":null,"link_basis":"identical_code_first_harvested_elsewhere","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":null,"inline_ok":false,"mcp_get_code":{"code_sha256":"15a510212432a6c3"}},{"code_sha256_prefix":"b2ce1b13b9074606","entry":"Rational_PYTORCH_B_F","repo":"k4ntz/activation-functions","repo_kind":"official","path":"activations/torch/rationals/rational_pytorch_functions.py","file_url":"https://github.com/k4ntz/activation-functions/blob/HEAD/activations/torch/rationals/rational_pytorch_functions.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b2ce1b13b9074606"}},{"code_sha256_prefix":"6e3e9a40d8b5f9f7","entry":"Rational_PYTORCH_C_F","repo":null,"repo_kind":null,"path":null,"file_url":null,"link_basis":"identical_code_first_harvested_elsewhere","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":null,"inline_ok":false,"mcp_get_code":{"code_sha256":"6e3e9a40d8b5f9f7"}},{"code_sha256_prefix":"960dbf127ba74109","entry":"Rational_PYTORCH_C_F","repo":"k4ntz/activation-functions","repo_kind":"official","path":"activations/torch/rationals/rational_pytorch_functions.py","file_url":"https://github.com/k4ntz/activation-functions/blob/HEAD/activations/torch/rationals/rational_pytorch_functions.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"960dbf127ba74109"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}