You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

REINFORCE实现中Policy Network批量与单状态输入输出不一致问题

问题根因

你的问题核心是Policy Network中Softmax层的dim参数配置错误。

具体原因解释

  • 逐次输入单个状态时:单状态输入张量形状为(4,)(CartPole状态维度为4),经过输出层Linear后得到形状为(2,)的张量,此时Softmax(dim=0)会对这2个值做归一化,刚好对应两个动作的概率,结果符合预期。
  • 批量输入状态时:批量张量形状为(N, 4)(N为单episode的步数),经过输出层Linear后得到形状为(N, 2)的张量,此时Softmax(dim=0)会对**批次维度(即所有样本的第一个动作值、所有样本的第二个动作值分别)**做归一化,而非对每个样本的两个动作值做归一化,因此结果和逐次输入差异极大。
修复方案

只需要把Policy Network中Softmax层的dim参数改为-1(表示对张量的最后一个维度做归一化)即可:

self.model = nn.Sequential(
    nn.Linear(state_dim, 64),
    nn.ReLU(),
    nn.Linear(64, n_actions),
    nn.Softmax(dim=-1) # 把原dim=0修改为dim=-1
).float()

修改后两种输入方式得到的动作概率会完全一致。

内容的提问来源于stack exchange,提问作者204

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 17:45:06