ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Dopamine 中的 DQN 与 Rainbow 智能体:从三大核心组件到可复现的 Atari 基准实验

Dopamine 中的 DQN 与 Rainbow 智能体:从三大核心组件到可复现的 Atari 基准实验 强化学习机器学习深度学习【免费下载链接】dopamineDopamine is a research framework for fast prototyping of reinforcement learning algorithms.项目地址https://gitcode.com/gh_mirrors/dopami/dopamine点击查看免费下载本文以仓库文档 docs/agents.md 为主体围绕 Dopamine 首个版本聚焦的 DQN 与 Rainbow 智能体展开先拆解 Rainbow 中 n-step Bellman 更新、优先经验回放、分布式强化学习三大核心组件及其源码实现再给出 Atari / Cartpole / Acrobot / Mujoco 四种场景的完整训练命令、gin 配置参数逐项对照与 apples-to-apples 基准设计最后补充 checkpoint 与日志机制、DQN → Rainbow → IQN 的类继承脉络以及基线数据下载与可视化方案。一、文档定位Dopamine 的智能体阵营与设计原则仓库文档 docs/agents.md 明确了 Dopamine 首个版本的设计取向聚焦支持单 GPU 的、处于当前研究前沿的 Rainbow 智能体Hessel et al., 2018并用于 Atari 2600 游戏玩法Bellemare et al., 2013的基准测试。为完整起见仓库同时提供了 DQNMnih et al., 2015的实现。在 Dopamine 中智能体agent是实验的核心它定义了网络结构、更新规则以及一个 RL 智能体的基本操作ε-greedy 动作选择、transition 存储、episode 记账等。整份文档的核心论点可以概括为受相关工作的启发Dopamine 的 Rainbow 实现只集成了经 [Hessel et al.][rainbow] 验证最重要的三个组件n-step Bellman 更新、优先经验回放与分布式强化学习C51。这一少即是多的选择在源码中得到了印证。dopamine/agents/rainbow/rainbow_agent.py 的模块 docstring 明确指出实现了 n-step updates、prioritized replay、distributional RL 三个组件并说明这三者在 Atari 游戏智能体上显著影响性能砍掉了部分次要超参选择将 beta 指数固定为 beta0.5而非线性递增去掉 alpha 参数原论文全程使用 alpha0.5。以下围绕这三个组件逐一展开结合源码给出实现层面的证据。二、Rainbow 三大核心组件文档要点 源码级拆解2.1 n-step Bellman 更新n-step Bellman 更新把单步时序差分扩展为多步回报是 [Mnih et al., 2016][a3c]A3C中使用的经典技巧可加速 credit assignment。在 Dopamine 中update_horizon就是公式里的n它由DQNAgent.__init__传入并换算成累计折扣因子self.cumulative_gamma math.pow(gamma, update_horizon) # dopamine/agents/dqn/dqn_agent.py而 DQN 的 Bellman 目标在 dqn_agent.py 的_build_target_q_op中体现为Q_t R_t gamma^N * max_a Q(S_{t1}, a) 若 S_t 为终止态则目标为 0其中N即update_horizon默认 N1。Rainbow 的基准配置 rainbow.gin 将update_horizon 3而 C51 配置则保持update_horizon 1详见下文对比表。2.2 优先经验回放Prioritized experience replay优先经验回放来自 [Schaul et al., 2015][prioritized_replay]其思想是让 TD 误差更大的 transition 以更高概率被采样从而更高效地利用经验。Dopamine 的实现要点数据结构Rainbow 使用 dopamine/replay_memory/prioritized_replay_buffer.py继承自 DQN 的 circular replay buffer内部依赖 sum_tree.py 实现 O(log n) 的按优先级采样方案开关RainbowAgent.replay_scheme支持prioritized与uniform两种取值。在 rainbow_agent.py 的_build_replay_buffer中两种方案共用同一数据结构——uniform方案只是把所有 priority 置为相同值从而退化为均匀采样非法取值会抛出ValueError存储时的优先级在_store_transition中若未显式指定 priorityuniform方案默认 priority1prioritized方案默认使用 sum-tree 中记录的最大优先级max_recorded_priority新经验以最大优先级入池保证至少被采到一次训练时的加权_build_train_op中对优先采样引入重要性采样校正——loss_weights 1/sqrt(probs 1e-10)并归一化这与固定 beta0.5 的简化一致同时用tf_set_priority(indices, sqrt(loss 1e-10))在每次更新后刷新这批样本的优先级1e-10是为了避免优先级归零导致1.0/0.0 NaN的校正项。2.3 分布式强化学习C51分布式强化学习[Bellemare et al., 2017][c51]即 C51不再学习期望的 Q 值标量而是学习价值分布的支撑点support与概率质量。Dopamine 的实现细节支撑点num_atoms默认 51个原子等间隔分布在[vmin, vmax]上vmin未指定时取-vmax默认 vmax10.0在 rainbow_agent.py 中由tf.linspace(vmin, vmax, num_atoms)生成网络使用 atari_lib.py 中的RainbowNetwork输出每个动作在 num_atoms 个支撑点上的 logits经 softmax 得到概率分布C51 目标分布_build_target_distribution按论文构造r gamma * Z的支撑终止态为 0取下一状态中期望价值最高的动作对应的概率再调用project_distributionrainbow_agent.py把 Bellman 目标投影回原始支撑——这正是 C51 论文中 Eq.(7) 的实现函数内附带了详细的运行示例注释与validate_args校验损失对所选动作的 logits 与目标分布计算softmax_cross_entropy_with_logits即 KL 散度再乘以重要性采样权重。2.4 C51 与 Rainbow 的关系从文档与源码均可确认C51 只是 Rainbow 的一个特定参数化。在 rainbow_agent.py 中RainbowAgent继承自DQNAgent而 c51.gin 与 rainbow.gin 使用完全相同的RainbowAgent类仅通过两组超参区分超参数C51c51.ginRainbowrainbow.ginnum_atoms5151vmax10.10.gamma0.990.99update_horizonn-step 的 n13replay_schemeuniformprioritizedmin_replay_history2000020000update_period44target_update_period80008000epsilon_train/epsilon_eval0.01 / 0.0010.01 / 0.001epsilon_decay_period250000250000优化器Adamlr0.00025, ε0.0003125Adamlr0.0000625, ε0.00015sticky_actionsTrueTrue游戏PongPong可见 C51 即update_horizon1单步更新且采用均匀回放方案的 Rainbow两者共用同一套网络与损失实现这正是文档所述apples-to-apples对比能够成立的结构基础。三、基准配置体系apples-to-apples 与文献复现两套参数文档将配置分为两类仓库中均有对应文件3.1 标准化对比配置各智能体的主配置主配置文件的超参经过统一挑选保证智能体间公平对比即 apples to applesdopamine/agents/dqn/configs/dqn.gindopamine/agents/rainbow/configs/c51.gindopamine/agents/rainbow/configs/rainbow.gindopamine/agents/implicit_quantile/configs/implicit_quantile.gin以 dqn.gin 为例可完整看到以 Nature DQN 为底、向 Rainbow 对齐的折衷DQNAgent.gamma 0.99 DQNAgent.update_horizon 1 DQNAgent.min_replay_history 20000 # agent steps DQNAgent.update_period 4 DQNAgent.target_update_period 8000 # agent steps DQNAgent.epsilon_train 0.01 DQNAgent.epsilon_eval 0.001 DQNAgent.epsilon_decay_period 250000 # agent steps DQNAgent.tf_device /gpu:0 # 无 GPU 时用 /cpu:* DQNAgent.optimizer tf.train.RMSPropOptimizer() tf.train.RMSPropOptimizer.learning_rate 0.00025 tf.train.RMSPropOptimizer.decay 0.95 tf.train.RMSPropOptimizer.momentum 0.0 tf.train.RMSPropOptimizer.epsilon 0.00001 tf.train.RMSPropOptimizer.centered True atari_lib.create_atari_environment.game_name Pong atari_lib.create_atari_environment.sticky_actions True # 25% 粘性动作 create_agent.agent_name dqn Runner.num_iterations 200 Runner.training_steps 250000 # agent steps Runner.evaluation_steps 125000 # agent steps Runner.max_steps_per_episode 27000 WrappedReplayBuffer.replay_capacity 1000000 WrappedReplayBuffer.batch_size 32这些配置还体现了 ALE 环境的关键细节主配置统一开启sticky_actions True0.25 概率的粘性动作源自 Machado et al., 2017 的建议使环境更具随机性与可复现挑战性。参数的具体选择依据详见仓库 baselines 页面。3.2 文献复现配置仓库还提供了一套与论文设置一致的配置全部使用确定性 ALEsticky_actions False并开启AtariPreprocessing.terminal_on_life_loss True丢命即终止配置文件对应论文关键差异dqn_nature.ginMnih et al., 2015Nature DQNmin_replay_history50000、target_update_period10000、epsilon_train0.1、epsilon_eval0.05、epsilon_decay_period1000000dqn_icml.ginBellemare et al., 2017 中的 DQN 基线同 Nature 的调度但epsilon_train0.01、epsilon_eval0.001c51_icml.ginBellemare et al., 2017C51update_horizon1、replay_schemeuniform、min_replay_history50000、target_update_period10000、epsilon_decay_period1000000implicit_quantile_icml.ginDabney et al., 2018IQNIQN 专属超参 update_horizon3、replay_schemeuniformrainbow_aaai.ginHessel et al., 2018Rainbow AAAIupdate_horizon3、replay_schemeprioritized、Adam lr0.0000625、sticky_actionsFalse注意同一文件名如 dqn.gin在不同目录下含义不同——dopamine/agents/dqn/configs/与dopamine/jax/agents/dqn/configs/分别对应 TensorFlow 版与 JAX 版智能体两者不可混用。四、实战四类场景的完整训练命令4.1 Atari 2600 标准实验入口为 dopamine/discrete_domains/train.py。运行基础 DQNpython -um dopamine.discrete_domains.train \ --base_dir /tmp/dopamine_runs \ --gin_files dopamine/agents/dqn/configs/dqn.gin默认会启动一个2 亿帧的实验由Runner.num_iterations × training_steps evaluation_steps决定。命令行会持续输出最近一个训练 episode 的统计[...] I0824 17:13:33.078342 140196395337472 tf_logging.py:115] gamma: 0.990000 I0824 17:13:33.795608 140196395337472 tf_logging.py:115] Beginning training... Steps executed: 5903 Episode length: 1203 Return: -19.快速验证技巧若只想快速跑通流程、检查日志与 checkpoint 产出文档建议直接修改 dqn.gin 中Runner.training_steps与Runner.evaluation_steps——两者共同决定一个 iteration一轮训练 一轮评估的总步数调小即可缩短单次迭代耗时。更常规的做法是使用--gin_bindings命令行覆盖例如python -um dopamine.discrete_domains.train \ --base_dir /tmp/dopamine_runs \ --gin_files dopamine/agents/dqn/configs/dqn.gin \ --gin_bindingsRunner.training_steps1000 \ --gin_bindingsRunner.evaluation_steps5004.2 Cartpole / Acrobot 非 Atari 离散环境仓库为 Cartpole 与 Acrobot 提供了现成配置见dopamine/agents/dqn/configs/与dopamine/agents/rainbow/configs/下的*_cartpole.gin、*_acrobot.gin。在 Cartpole 上以默认设置训练 C51python -um dopamine.discrete_domains.train \ --base_dir /tmp/dopamine_runs \ --gin_files dopamine/agents/rainbow/configs/c51_cartpole.gin在 Acrobot 上训练 Rainbowpython -um dopamine.discrete_domains.train \ --base_dir /tmp/dopamine_runs \ --gin_files dopamine/agents/rainbow/configs/rainbow_acrobot.gin这类小环境非常适合在 CPU 上快速验证智能体行为与代码改动。4.3 Mujoco 连续控制场景连续控制智能体的入口为 dopamine/continuous_domains/train.py注意与离散域入口不同。运行需要 Mujoco 密钥。在 HalfCheetah 上运行 SACpython -um dopamine.continuous_domains.train \ --base_dir /tmp/dopamine_runs \ --gin_files dopamine/jax/agents/sac/configs/sac.gin默认实验规模为3200 个 episode、每 episode 1000 步环境步数。命令行输出样式如下[...] I0908 17:19:39.618797 1803949 run_experiment.py:446] Starting iteration 0 I0908 17:19:40.592262 1803949 run_experiment.py:405] Average undiscounted return per training episode: -168.19 I0908 17:19:40.592391 1803949 run_experiment.py:407] Average training steps per second: 1027.80 I0908 17:19:45.699378 1803949 run_experiment.py:427] Average undiscounted return per evaluation episode: -279.07换环境或改超参时调整 sac.gin也可以新建 gin 文件或通过命令行gin_bindings覆盖现有配置。4.4 通用配置机制Dopamine 整体使用gin-config 配置框架详见 gin-config 官方仓库智能体类上标注gin.configurable装饰器如DQNAgent、RainbowAgent、ImplicitQuantileAgent从而允许 gin 文件直接以类名.参数名 值的形式注入构造参数。所有可配置项的默认值均可在各 agent 类的__init__签名中查到如 dqn_agent.py 中gamma0.99、update_horizon1、min_replay_history20000、epsilon_train0.01等。五、Checkpointing 与 Logging实验数据的落盘机制文档将实验支撑功能分为 checkpointing 与 logging 两部分二者都依赖命令行参数--base_dir指定实验数据存放位置。5.1 Checkpointing默认情况下Dopamine 在每个 iteration一轮训练 一轮评估结束时保存一次 checkpoint存放在base_dir/checkpoints子目录下checkpoint 包含三块内容实验统计已完成的 iteration 数、学习曲线等——由 dopamine/discrete_domains/run_experiment.py 的run_experiment方法写入注意文档中提到的dopamine/atari/run_experiment.py在当前仓库中已重组为discrete_domains目录相关 API 说明见 docs/api_docsAgent 变量含 TensorFlow 图——由 dqn_agent.py 的bundle_and_checkpoint与unbundle方法负责前者调用tf.train.Saver保存图并落盘 out-of-graph 回放缓冲区返回{state: ..., training_steps: ...}字典后者反向恢复支持allow_partial_reload部分恢复回放缓冲区数据——Atari 2600 的回放缓冲区内存占用巨大Dopamine 通过 dopamine/replay_memory/circular_replay_buffer.py 中的OutOfGraphReplayBuffer.save与load方法以低内存方式持久化。checkpoint 的底层实现位于 dopamine/discrete_domains/checkpointer.py文档所述dopamine/common/checkpointer.py的当前等价物。5.2 Logging每个 iteration 结束时Dopamine 会记录训练阶段以及启用时的评估阶段的智能体表现。日志由 run_experiment.py 生成底层落在 dopamine/discrete_domains/logger.py产出为pickle 文件内容是一个字典iteration 键如iteration_47映射到包含各项数据的字典。读取多组实验日志的简便方法是 dopamine/colab/utils.py 中的read_experiment方法API 说明见 colab/utils.md。仓库还提供了 load_statistics.ipynb 示例 notebook演示如何加载实验统计并与官方基线对比绘图。六、修改与扩展智能体扁平类层级的设计哲学文档强调 Dopamine 刻意保持相对扁平的类层级没有抽象基类——作者认为这对研究目的足够且带来简单易用的好处。推荐的扩展方式是直接修改 agent 代码。仓库中 agents.ipynb 演示了两种路径扩展 DQN agent或从零创建新 agent并将实验结果与官方基线同图绘制。6.1 DQN两个文件组成Agent 类dopamine/agents/dqn/dqn_agent.py定义 DQN 网络、更新规则与智能体基本操作。Q-Learning 更新规则由_build_target_q_op构造 Bellman 目标见 dqn_agent.py与_build_train_ophuber loss 优化见 dqn_agent.py两个方法实现回放缓冲区dopamine/replay_memory/circular_replay_buffer.py。DQN 的探索策略由 dqn_agent.py 的linearly_decaying_epsilon实现前warmup_steps即min_replay_history步 epsilon 保持为 1随后在decay_period内线性衰减到epsilon_train此后恒定。在_select_action中训练模式按该调度取 epsilon评估模式固定用epsilon_eval默认 0.001_train_step中则体现三个关键节律回放池样本数超过min_replay_history才开训、每update_period步执行一次训练、每target_update_period步同步 online 权重到 target 网络。6.2 Rainbow 与 C51同样两个文件Agent 类dopamine/agents/rainbow/rainbow_agent.py继承自 DQN agent回放缓冲区dopamine/replay_memory/prioritized_replay_buffer.py继承自 DQN 的回放缓冲区。C51 是 Rainbow 的一个具体参数化update_horizon1 均匀回放代码层面共用同一个RainbowAgent类。6.3 IQNImplicit Quantile NetworksIQN 智能体由 dopamine/agents/implicit_quantile/implicit_quantile_agent.py 单独定义继承自 Rainbow agent。其核心思想是对价值分布的分位数quantile做隐式回归无需预定义 C51 式的固定支撑。IQN 专属超参在 implicit_quantile.gin 中配置参数默认值含义kappa1.0Huber loss 截断值num_tau_samples32gin 中为 64在线网络的分位数采样数 N公式 (3) 中的 Nnum_tau_prime_samples32gin 中为 64目标网络的分位数采样数 Nnum_quantile_samples32计算 Q 值时采样的分位数个数 kquantile_embedding_dim64分位数输入的嵌入维度 n公式 (4)double_dqnFalse是否启用 Double DQN 式学习注意 implicit_quantile.gin 中的注释还指出IQN 当前不支持优先回放因此replay_scheme uniform其优化器为 Adamlr0.00005。6.4 继承关系总览从源码可确认的完整链条DQNAgent←RainbowAgent继承←ImplicitQuantileAgent继承。JAX 版本dopamine/jax/agents提供了等价的dqn_agent、rainbow_agent、implicit_quantile_agent、quantile_agent、full_rainbow_agent、sac_agent等实现网络定义集中在 dopamine/jax/networks.py。七、基线数据下载与可视化仓库为 4 个智能体dqn、c51、rainbow、iqn× 60 个游戏提供了多类基线数据文件均为*.tar.gz需先解压原始日志含 4 个智能体在全部 60 个游戏上的原始训练日志可用 load_statistics.ipynb 加载与可视化编译后的 pickle 文件供 agents.ipynb 与 load_statistics.ipynb 直接读取TensorBoard event 文件本地查看示例tensorboard --logdir c51/Asterix/即可展示 C51 在 Asterix 上的训练曲线也可参考 tensorboard.ipynb 在 colab 中直接启动 TensorBoard 4.TensorFlow checkpoint 文件4 个智能体 × 60 个游戏 × 5 次独立运行文件命名格式为tf_ckpt-199.{SUFFIX}其中SUFFIX为data-00000-of-00001、index或meta三者之一。这类 checkpoint 也可用 TensorBoard 的 Embedding 投影等工具进一步分析。八、小结围绕 docs/agents.md本文系统梳理了 Dopamine 的智能体设计Rainbow 以 n-step 更新、优先回放、分布式学习三大组件为核心源码证据在 rainbow_agent.pyC51 是update_horizon1 均匀回放的 Rainbow 特例DQN → Rainbow → IQN 构成清晰的继承链。搭配 docs/README.md 中的训练命令、各目录下的 gin 配置与 baselines 基线数据你可以快速复现论文结果或在扁平类层级上直接修改 agent 代码开展新的算法研究。赞分享强化学习机器学习深度学习【免费下载链接】dopamineDopamine is a research framework for fast prototyping of reinforcement learning algorithms.项目地址https://gitcode.com/gh_mirrors/dopami/dopamine点击查看免费下载相关推荐Dopamine论文复现指南从Nature DQN到RainbowDopamine论文复现指南从Nature DQN到Rainbow 你是否还在为复现强化学习经典论文而烦恼本文将带你使用Dopamine框架从零开始实现从强化学习机器学习深度学习深入解读 Dopamine MoE Agents 模块DQN / Rainbow / Atari 100k 的专家混合智能体与损失体系深入解读 Dopamine MoE Agents 模块DQN / Rainbow / Atari 100k 的专家混合智能体与损失体系 dopamine.la机器学习深度学习使用Matcha-gtk-theme打造专业开发环境程序员桌面美化的10个技巧使用Matcha gtk theme打造专业开发环境程序员桌面美化的10个技巧 想要为你的Linux桌面打造一个既美观又高效的开发环境吗Matcha gtk上一篇5分钟快速上手iView Admin从安装到配置的完整指南下一篇7大理由为什么plus-pro-components成为企业级前端开发首选创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表