首页/新闻资讯/正文详情

Dopamine 中的 ImplicitQuantileNetwork:隐式分位数网络架构与 IQN Agent 实现解析

发布时间:2026/9/23 21:36:09 来源:云帆数科 栏目:资讯中心
Dopamine 中的 ImplicitQuantileNetwork:隐式分位数网络架构与 IQN Agent 实现解析
机器学习深度学习【免费下载链接】dopamineDopamine is a research framework for fast prototyping of reinforcement learning algorithms.项目地址https://gitcode.com/gh_mirrors/do/dopamine点击查看免费下载导读本文以 Dopamine 项目 API 文档中的 ImplicitQuantileNetwork 为核心深入讲解该网络在 Dopamine 中作为隐式分位数IQN智能体核心组件的架构设计与前向计算流程。你将掌握ImplicitQuantileNetwork的构造参数与各网络层配置、基于随机分位数采样的嵌入表示原理对应论文 Dabney et al., 2018 的式 (4)、分位数估值网络的输出约定quantile_values与quantiles以及它如何被 ImplicitQuantileAgent 用于动作选择与损失计算。读完本文你可以直接在 Dopamine 中定位、修改或复用该网络并理解其与 Nature DQN、Rainbow 网络在结构上的区别。ImplicitQuantileNetwork 在 Dopamine 中的定位ImplicitQuantileNetwork是 Dopamine 中 TFTensorFlow实现的分位数回归网络对应论文Implicit Quantile Networks for Distributional RLDabney et al., 2018。与输出标量 Q 值的 NatureDQNNetwork 以及输出离散分布logits、probabilities的 RainbowNetwork 不同它直接对「状态-动作」的分位数函数建模给定一个状态和一组随机采样的分位数 τ网络输出对应各动作的分位数价值。从源码结构看该网络定义于 legacy_networks.py即遗留 TF 网络模块文件头注释为 Legacy (TF) network architectures并以tf.keras.Model形式实现网络输出类型为ImplicitQuantileNetworkType——一个包含quantile_values与quantiles两个字段的 namedtuple定义在 atari_lib.py。ImplicitQuantileNetworkType collections.namedtuple( iqn_network, [quantile_values, quantiles] )该网络的消费方是 TF 版本的 ImplicitQuantileAgent后者是RainbowAgent的扩展注释中明确其follows the description given in Implicit Quantile Networks for Distributional RL (Dabney et. al, 2018)。构造函数与网络层结构ImplicitQuantileNetwork的__init__接收三个参数legacy_networks.py#L233-L292参数类型说明num_actionsint动作空间大小决定输出层的单元数quantile_embedding_dimint分位数输入的嵌入维度论文式 (4) 中的 nnamestr网络变量作用域名称Keras 内部用于变量命名共享的特征提取主干与 Nature DQN / Rainbow 一致网络先对输入帧执行归一化与三层卷积特征提取输入转换为tf.float32后除以 255Atari 帧像素值 [0, 255] 归一化到 [0, 1]conv1Conv2D(32, [8, 8], strides4, paddingsame, relu)conv2Conv2D(64, [4, 4], strides2, paddingsame, relu)conv3Conv2D(64, [3, 3], strides1, paddingsame, relu)flatten展平为状态特征向量dense1Dense(512, relu)作为后续分位数交互的全连接层。所有卷积/全连接层统一使用VarianceScaling(scale1.0/sqrt(3.0), modefan_in, distributionuniform)初始化器这与 RainbowNetwork 的初始化方式一致保证训练初期数值稳定。分位数嵌入层延迟创建的关键设计IQN 最核心的设计在于call(state, num_quantiles)中动态构造的分位数嵌入层dense_quantilelegacy_networks.py#L294-L342。源码注释明确说明其延迟创建原因Create the quantile layer in the first call. This is because number of output units depends on the input shape. Therefore, we can only create the layer during the first forward call, not during.__init__().也就是说dense_quantile的输出维度取决于输入状态经过卷积展平后的特征长度state_vector_length该值在__init__阶段不可知因此通过if not hasattr(self, dense_quantile)在首次前向时惰性实例化if not hasattr(self, dense_quantile): self.dense_quantile tf.keras.layers.Dense( state_vector_length, activationself.activation_fn, kernel_initializerself.kernel_initializer(), ) quantile_net self.dense_quantile(quantile_net)前向计算流程状态特征与分位数嵌入的逐元素融合call(state, num_quantiles)的完整数据流如下对应 legacy_networks.py#L308-L342归一化与特征提取state转 float32、除以 255经三层卷积 flatten 得到状态特征向量x其长度为state_vector_length。状态特征平铺state_net_tiled tf.tile(x, [num_quantiles, 1])将 batch 维复制num_quantiles份形状为(num_quantiles * batch_size, state_vector_length)使得每个状态可以与多个分位数样本配对。随机分位数采样quantiles tf.random.uniform([num_quantiles * batch_size, 1], minval0, maxval1)即对每个 (状态, 分位数样本) 对从 U(0,1) 均匀采样一个 τ。注意这里每个样本的分位数都是独立随机采样的这也是 IQN 被称为隐式的原因——分位数分布不是显式参数化的而是通过对 τ 的连续采样隐式逼近整个分布。分位数特征构造论文式 (4)对每个分位数 τ 构造嵌入向量源码实现为quantile_net tf.tile(quantiles, [1, self.quantile_embedding_dim]) pi tf.constant(math.pi) quantile_net ( tf.cast(tf.range(1, self.quantile_embedding_dim 1, 1), tf.float32) * pi * quantile_net ) quantile_net tf.cos(quantile_net)即φ_i(τ) cos(π · i · τ)其中i 1, ..., quantile_embedding_dim。这是论文中定义的余弦基函数嵌入将一维分位数 τ 映射到高维特征空间。嵌入投影与逐元素相乘quantile_net经dense_quantile输出维度等于state_vector_lengthrelu 激活投影后与平铺的状态特征做逐元素乘法x tf.multiply(state_net_tiled, quantile_net)。这一步是 IQN 的关键分位数信息通过逐元素门控乘法注入状态表示使网络能够输出该状态下指定分位数的价值。输出层融合后的特征经dense1512 单元与dense2num_actions单元后得到形状为(num_quantiles * batch_size, num_actions)的quantile_values并返回ImplicitQuantileNetworkType(quantile_values, quantiles)。一个值得注意的实现细节由于输入输出均基于 Keras 模型call中创建的dense_quantile层变量同样归属于模型因此Online/Target两个网络实例见下文各自拥有独立的分位数嵌入层参数不会共享。输出约定与 Q 值还原网络的返回类型ImplicitQuantileNetworkType包含quantile_values形状(num_quantiles × batch_size, num_actions)即每个 (τ 样本, 状态, 动作) 的分位数价值quantiles形状(num_quantiles × batch_size, 1)即本次前向实际采样到的 τ 值训练损失需要用到它们来构造分位数回归的权重。在 ImplicitQuantileAgent._build_networks 中动作选择所用的 Q 值通过对分位数样本求均值还原# Shape of self._net_outputs.quantile_values: # num_quantile_samples x num_actions. self._q_values tf.reduce_mean(self._net_outputs.quantile_values, axis0) self._q_argmax tf.argmax(self._q_values, axis0)即Q(s, a) ≈ mean_τ Z_τ(s, a)对num_quantile_samples个随机分位数的估值取平均作为动作选择的依据。源码注释还给出了一个直观例子若某动作在分位数 0.2、0.4、0.6 处的估值为 0.1、0.15、0.15则该动作的 Q 值为三者均值。与 ImplicitQuantileAgent 的配合网络如何参与训练ImplicitQuantileAgent将网络实例化为Online与Target两个副本implicit_quantile_agent.py#L120-L121并分别以不同采样数调用调用点使用的网络采样数用途self.state_phOnlinenum_quantile_samples当前状态 Q 值估计与动作选择self._replay.statesOnlinenum_tau_samples训练在线分位数估值self._replay.next_statesTargetnum_tau_prime_samples训练目标分位数估值self._replay.next_statesdouble_dqn 时为 Online取决配置num_quantile_samples计算目标动作 argmaxAgent 默认超参数implicit_quantile_agent.py#L33-L42kappa1.0、num_tau_samples32、num_tau_prime_samples32、num_quantile_samples32、quantile_embedding_dim64注释标明这些取值取自 Dabney et al. (2018)。其中quantile_embedding_dim论文式 (4) 的 n直接决定dense_quantile输入的余弦基函数数量num_tau_samples论文式 (3) 的 N与num_tau_prime_samplesN控制训练时分位数回归的采样规模num_quantile_samples式 (3) 的 k控制 Q 值还原时的采样数。训练时_build_train_opimplicit_quantile_agent.py#L222-L333会构造形状为batch_size × num_tau_prime_samples × num_tau_samples × 1的 Bellman 误差张量并用分位数 Huber 损失kappa截止加权——这与论文第 2.3 节的描述一致。值得说明的是IQN 网络本身只负责前向估值分位数回归损失的具体计算位于 Agent 的损失逻辑中。通过 gin 配置驱动网络运行Dopamine 使用 gin 配置框架驱动实验。TF 版 IQN 的默认配置 implicit_quantile.gin 展示了如何实例化并调优该网络相关的全部超参数ImplicitQuantileAgent.kappa 1.0 ImplicitQuantileAgent.num_tau_samples 64 ImplicitQuantileAgent.num_tau_prime_samples 64 ImplicitQuantileAgent.num_quantile_samples 32 RainbowAgent.gamma 0.99 RainbowAgent.update_horizon 3 RainbowAgent.min_replay_history 20000 # agent steps RainbowAgent.update_period 4 RainbowAgent.target_update_period 8000 # agent steps RainbowAgent.epsilon_train 0.01 RainbowAgent.epsilon_eval 0.001 RainbowAgent.epsilon_decay_period 250000 # agent steps # IQN currently does not support prioritized replay. RainbowAgent.replay_scheme uniform RainbowAgent.tf_device /gpu:0 # /cpu:* use for non-GPU version RainbowAgent.optimizer tf.train.AdamOptimizer() tf.train.AdamOptimizer.learning_rate 0.00005 tf.train.AdamOptimizer.epsilon 0.0003125 atari_lib.create_atari_environment.game_name Pong atari_lib.create_atari_environment.sticky_actions True create_agent.agent_name implicit_quantile配置要点解读与 Rainbow 的超参对齐配置注释说明超参数取自 Dabney et al. (2018)但为了与 RainbowHessel et al., 2018做公平对比进行了必要的修改例如update_horizon3、min_replay_history20000。训练/评估采样数不同gin 中训练用采样数被调整为 64而 Q 值还原仍用 32与 Agent 构造函数默认值均为 32不同——gin 配置会覆盖构造函数默认值这也是阅读代码时需要注意的地方。使用均匀回放replay_scheme uniform注释明确 IQN currently does not support prioritized replay即 IQN 当前版本不支持优先回放这是它与完整 Rainbow 的重要区别之一。环境配置game_name Pong启用粘性动作sticky actions概率 0.25遵循 Machado et al., 2017 的建议。该网络同样被 JAX 分支所对应实现引用见 jax/agents/implicit_quantile 目录但本文聚焦 TF 分支的ImplicitQuantileNetwork。与 NatureDQNNetwork / RainbowNetwork 的对比小结维度NatureDQNNetworkRainbowNetworkImplicitQuantileNetwork输出标量 Q 值q_values分布q_values, logits, probabilities分位数quantile_values, quantiles分位数/原子处理无固定支持集supportnum_atoms桶随机采样 τ 余弦嵌入维度quantile_embedding_dim关键结构差异直接 dense 输出 Qdense 输出num_actions × num_atoms后 softmax状态特征与分位数嵌入逐元素相乘后再输出输出层单元数num_actionsnum_actions × num_atomsnum_actions但按分位数样本平铺三者共享相同的三层卷积主干与 512 单元全连接层区别集中在价值如何参数化Nature DQN 参数化期望值Rainbow 参数化固定支撑上的离散分布而 IQN 参数化一个可由任意 τ 查询的分位数函数。延伸阅读网络输出类型定义atari_lib.py网络实现legacy_networks.py旧式函数式封装implicit_quantile_networklegacy_networks.pyTF Agent 完整训练/损失逻辑implicit_quantile_agent.pygin 配置implicit_quantile.gin同模块其他网络 NatureDQNNetwork、RainbowNetwork赞分享机器学习深度学习【免费下载链接】dopamineDopamine is a research framework for fast prototyping of reinforcement learning algorithms.项目地址https://gitcode.com/gh_mirrors/do/dopamine点击查看免费下载相关推荐Dopamine 中的 IQN 智能体JaxImplicitQuantileAgent 隐式分位数网络实现全解析Dopamine 中的 IQN 智能体JaxImplicitQuantileAgent 隐式分位数网络实现全解析 导读 本文围绕 Dopamine 仓库中的隐强化学习机器学习深度学习Renovate 的 Batect Manager 使用指南自动追踪 Docker 镜像与 Batect Bundle 依赖Renovate 的 Batect Manager 使用指南自动追踪 Docker 镜像与 Batect Bundle 依赖 Renovate 内置的 bat机器学习深度学习Docuseal JavaScript SDK 完整指南基于 Node.js 调用签名 API 管理提交、签署人与模板Docuseal JavaScript SDK 完整指南基于 Node.js 调用签名 API 管理提交、签署人与模板 本篇技术指南围绕 Docuseal 官机器学习深度学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

欧美剧集观看索引:从2006年经典到补剧指南
欧美剧集观看索引:从2006年经典到补剧指南

如果你经历过 2006 年前后开始追欧美剧集的阶段,大概会对“索引”这两个字特别有感情。那会儿想找一部新剧看的成本,远比现在高得多:没有算法推荐,没有自动连播,剧迷们靠的是论坛里的热心整理帖、字幕组的发布列表&… · 2026/9/23 21:36:09

CDN内容分发网络
CDN内容分发网络

CDN(内容分发网络)通过在全球范围内部署分布式节点(包括骨干节点和边缘POP节点),将网站内容缓存到靠近用户的边缘服务器。当用户请求内容时,CDN利用智能DNS解析和负载均衡技术,将请求定向至最优… · 2026/9/23 21:36:09

Go 新手学习路线:从语法基础到开源项目实战——Go 夜读群 2018-05-16 讨论纪要
Go 新手学习路线:从语法基础到开源项目实战——Go 夜读群 2018-05-16 讨论纪要

Go 新手学习路线:从语法基础到开源项目实战——Go 夜读群 2018-05-16 讨论纪要 【免费下载链接】night Weekly Go Online Meetup via Bilibili|Go 夜读|通过 bilibili 在线直播的方式分享 Go 相关的技术话题,每天大家在微信/teleg… · 2026/9/23 21:36:09

119、Agent的配置管理与动态化
119、Agent的配置管理与动态化

119、Agent的配置管理与动态化 那晚线上告警响得人头皮发麻。一个负责代码审查的Agent,突然开始对每一行 print 都提出“请使用日志框架”的整改意见,连测试文件都不放过。我拉出日志,发现它加载的规则版本号还停留在三天前——可我明明昨天才在配置中心把这条规则下架了。… · 2026/9/23 22:19:52

118、构建可扩展的Agent基础架构
118、构建可扩展的Agent基础架构

118、构建可扩展的Agent基础架构 那天晚上十一点,线上的Agent实例突然开始集体超时,日志里刷满了TooManyRequests,但我们的API配额明明还有余量。查了一整夜,最后发现根因不在模型服务,也不在业务代码,而在我们引以为傲的“灵活”的Agent调度层——每个请求进来都会动态… · 2026/9/23 22:19:52

120、Agent的可观测性:Metrics与Tracing
120、Agent的可观测性:Metrics与Tracing

120、Agent的可观测性:Metrics与Tracing 昨天下午我盯着监控面板,发现那个Agent在凌晨开始不断重试同一个工具调用,日志里全是“timeout”,可面板上延迟曲线却是一条直线。不是不报,时候未到——因为当时只打了log,没打metrics,也没trace。后来把请求路径串起来才发现,… · 2026/9/23 22:19:46

传统师承证哪家培训机构靠谱?从报名学习到考试拿证,报考全攻略
传统师承证哪家培训机构靠谱?从报名学习到考试拿证,报考全攻略

近两年,传统师承证的报考热度持续上升,想考的人不少,但绝大多数人卡在了同一个问题上:培训机构那么多,到底哪家靠谱?网上搜一圈,广告铺天盖地、说法互相矛盾,越看越不知道信谁。本文… · 2026/9/23 22:19:15

国内主流主数据管理平台推荐,2026年选型避坑指南
国内主流主数据管理平台推荐,2026年选型避坑指南

摘要 随着企业数智化转型步入深水区,主数据管理已从"锦上添花"变为"刚需基建"。数据编码不统一、一物多码、信息孤岛等问题持续困扰着集团型企业。本文聚焦2026年国内主数据管理平台市场,从技术架构、落地能力、行业适配等维度&… · 2026/9/23 22:19:09

人工智能训练工程师证哪家培训机构靠谱?从报名学习到考试拿证,报考全攻略
人工智能训练工程师证哪家培训机构靠谱?从报名学习到考试拿证,报考全攻略

近两年,人工智能训练工程师证的报考热度持续上升,想考的人不少,但绝大多数人卡在了同一个问题上:培训机构那么多,到底哪家靠谱?网上搜一圈,广告铺天盖地、说法互相矛盾,越看越不知道… · 2026/9/23 22:19:09

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码