DistributionalDQNLoss¶
- class torchrl.objectives.DistributionalDQNLoss(*args, **kwargs)[source]¶
分布式的 DQN 损失类。
分布式的 DQN 使用一个价值网络,该网络输出在折现回报的离散支持上的价值分布(与常规 DQN 不同,常规 DQN 的价值网络输出折现回报的单点预测)。
有关分布式 DQN 的更多详细信息,请参阅“强化学习的分布视角”,https://arxiv.org/pdf/1707.06887.pdf
- 参数:
value_network (DistributionalQValueActor 或 nn.Module) – 分布式的 Q 值算子。
gamma (标量) –
回报计算的折扣因子。 .. note
Unlike :class:`DQNLoss`, this class does not currently support custom value functions. The next value estimation is always bootstrapped.
delay_value (bool) – 是否将价值网络复制到新的目标价值网络以创建双重 DQN
priority_key (str, 可选) – [已弃用,请改用 .set_keys(priority_key=priority_key) ] 假定优先级存储在添加到此 ReplayBuffer 的 TensorDicts 中的键。 这用于当采样器类型为
PrioritizedSampler
时。 默认为"td_error"
。reduction (str, 可选) – 指定应用于输出的缩减方式:
"none"
|"mean"
|"sum"
。"none"
:不应用缩减,"mean"
:输出的总和将除以输出中元素的数量,"sum"
:输出将被求和。 默认值:"mean"
。
- forward(input_tensordict: TensorDictBase) TensorDict [source]¶
它旨在读取一个输入 TensorDict 并返回另一个以 “loss*” 命名的损失键的 tensordict。
将损失分解为组件然后可以被训练器用来记录整个训练过程中的各种损失值。输出 tensordict 中存在的其他标量也将被记录。
- 参数:
tensordict – 包含计算损失所需值的输入 tensordict。
- 返回:
一个新的 tensordict,没有批次维度,包含各种损失标量,这些标量将被命名为 “loss*”。 必须使用此名称返回损失,因为训练器将在反向传播之前读取它们。
- make_value_estimator(value_type: Optional[ValueEstimators] = None, **hyperparams)[source]¶
价值函数构造器。
如果需要非默认的价值函数,则必须使用此方法构建它。
- 参数:
value_type (ValueEstimators) – 一个
ValueEstimators
枚举类型,指示要使用的价值函数。 如果未提供,则将使用存储在default_value_estimator
属性中的默认值。 生成的价值估计器类将在self.value_type
中注册,从而允许将来的改进。**hyperparams – 用于价值函数的超参数。 如果未提供,将使用
default_value_kwargs()
指示的值。
示例
>>> from torchrl.objectives import DQNLoss >>> # initialize the DQN loss >>> actor = torch.nn.Linear(3, 4) >>> dqn_loss = DQNLoss(actor, action_space="one-hot") >>> # updating the parameters of the default value estimator >>> dqn_loss.make_value_estimator(gamma=0.9) >>> dqn_loss.make_value_estimator( ... ValueEstimators.TD1, ... gamma=0.9) >>> # if we want to change the gamma value >>> dqn_loss.make_value_estimator(dqn_loss.value_type, gamma=0.9)