最简单的策略梯度代码实现假定训练集的长度均匀分布?

作者: HimanshuKhanchandani创建于 2025年12月31日更新于 2025年12月31日

最简单的策略梯度公式为: \hat{g} = \frac{1}{|\mathcal{D}|} \sum_{\tau \in \mathcal{D}} \sum_{t=0}^{T} \nabla_{\theta} \log \pi_{\theta}(a_t |s_t) R(\tau), 在相关代码中, 它被实现为: def compute_loss(obs, act, weights): logp = get_policy(obs).log_prob(act) return -(logp * weights).mean() 在此代码中, weights 和 logp 的维度为 `batch_size*(所有episode长度之和)`。如果所有episode长度相同,该损失与策略梯度成正比,但这种情况几乎不可能发生。通常,在任何给定的批次中,不同的episode长度不相同,我们应该先单独为每个episode求 logp*weights 的和,然后再取批次均值。 我是否遗漏了什么?

内容来源: openai/spinningup