为什么我们要计算均方误差损失来改进 Advantage Actor-Critic 算法中的值逼近?

人工智能 Python q学习 演员批评方法 均方误差
2021-11-11 10:54:28
class AtariA2C(nn.Module):
    def __init__(self, input_shape, n_actions):
        super(AtariA2C, self).__init__()

        self.conv = nn.Sequential(
            nn.Conv2d(input_shape[0], 32, kernel_size=8, stride=4),
            nn.ReLU(),
            nn.Conv2d(32, 64, kernel_size=4, stride=2),
            nn.ReLU(),
            nn.Conv2d(64, 64, kernel_size=3, stride=1),
            nn.ReLU(),
        )

        conv_output_size = self. _get_conv_out(input_shape)

        self.policy = nn.Sequential(
            nn.Linear(conv_output_size, 512),
            nn.ReLU(),
            nn.Linear(512, n_actions),
        )

        self.value = nn.Sequential(
            nn.Linear(conv_output_size, 512),
            nn.ReLU(),
            nn.Linear(512, 1),
        )

    def _get_conv_out(self, shape):
        o = self.conv(T.zeros(1, *shape))
        return int(np.prod(o.shape))

    def forward(self, x):
        x = x.float() / 256
        conv_out = self.conv(x).view(x.size()[0], -1)
        return self.policy(conv_out), self.value(conv_out)

在 Maxim Lapan 的书中Deep Reinforcement Learning Hands-on,在实现上述网络模型后,它说

通过网络的前向传递返回两个张量的元组:策略和值。现在我们有一个大而重要的函数,它接受一批环境转换并返回三个张量:一批状态、一批采取的行动和一批使用公式计算的 Q 值

Q(s,a)=i=0N1γiri+γNV(sN)
这个 Q_value 将用于两个地方:计算均方误差 (MSE) 损失以改进值近似,与 DQN 相同,以及计算动作的优势。

我对一件事情感到非常困惑。我们如何以及为什么计算均方误差损失以改进Advantage Actor-Critic 算法中的值逼近?

1个回答

我相信作者指的是如何在 Deep RL 中训练网络。考虑深度 Q 学习,其中Q(s,a)使用神经网络进行近似。那么用于训练网络的损失函数为

E[(r+γmaxaQ(s,a)Q(s,a))2].
这里,r+γmaxaQ(s,a)是您的目标,您希望网络的目标是什么,以及Q(s,a)是您的网络所预测的。(请注意,为简单起见,我省略了可以在Nature 论文中找到的一些细节)。

至于 actor-critic 方法,最流行的 actor-critic 方法将使用价值函数通过以下关系“替换”动作价值函数:

E[r+γvπ(s)]=Qπ(s,a).
这种关系可以通过查看 Sutton 和 Barto 教科书中的练习 3.13(或其他地方)来证明。这看起来就像作者在您正在阅读的教科书中所做的那样。

根据我在开始时所说的关于如何训练状态-动作价值函数的内容,类似于训练一个以相同方式逼近价值函数的评论家网络。

e1:拼写。

e2:添加了自然论文的链接。