DQN在Atari Pong tas停留在次优政策

2024-04-18 15:56:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用目标环境Atari-Pong在PyTorch中从头开始实现DQN模型。在调整了一段时间的超参数之后,我似乎无法让模型达到大多数出版物所报道的性能(~+21奖励;意味着代理几乎赢得了所有截击)。你知道吗

我最近的结果显示在下图中。请注意,x轴是第集(完整游戏到21集),但总的训练迭代次数约为670万次。你知道吗

enter image description here

我的设置具体如下:

型号

class DQN(nn.Module):
    def __init__(self, in_channels, outputs):
        super(DQN, self).__init__()
        self.conv1 = nn.Conv2d(in_channels=in_channels, out_channels=32, kernel_size=8, stride=4)
        self.conv2 = nn.Conv2d(in_channels=32, out_channels=64, kernel_size=4, stride=2)
        self.conv3 = nn.Conv2d(in_channels=64, out_channels=64, kernel_size=3, stride=1)
        self.fc1 = nn.Linear(in_features=64*7*7 , out_features=512)
        self.fc2 = nn.Linear(in_features=512, out_features=outputs)

    def forward(self, x):
        x = F.relu(self.conv1(x))
        x = F.relu(self.conv2(x))
        x = F.relu(self.conv3(x))
        x = x.view(-1, 64 * 7 * 7)
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return x    # return Q values of each action

超参数

  • 批量:32
  • 重放内存大小:100000
  • 初始ε:1.0
  • epsilon在100000步上线性退火到0.02
  • 随机热启动事件:~50000
  • 每1000步更新一次目标模型
  • 优化器=优化RMSprop(政策_网络参数(),lr=0.0025,α=0.9,eps=1e-02,动量=0.0)

附加信息

  • OpenAI gym Pong-v0环境
  • 最后观察到的4个帧的馈送模型堆栈,缩放并裁剪为84x84,以便只有“播放区域”可见。你知道吗
  • 在重放缓冲区中,将失去截击(生命结束)视为终端状态。你知道吗
  • 使用smooth_l1_loss,它充当Huber损失
  • 优化前在-1和1之间剪裁渐变
  • 我用报纸上说的4-30个无操作步骤来抵消每一集的开头

有没有人有过类似的经历,像这样每集平均有6-9分的报酬?你知道吗

如果您对超参数或算法细节有任何修改建议,我们将不胜感激!你知道吗


Tags: in模型self目标参数sizedqnnn
1条回答
网友
1楼 · 发布于 2024-04-18 15:56:10

尝试使用按优先级排列的体验重播。你知道吗

这肯定会帮助你得到更好的分数。你知道吗

也可以试试大一点的f.e.64。(可提高坡度)

尝试提高学习速度(随着培训时间的推移而降低)。(它可以工作)。你知道吗

相关问题 更多 >