深度强化学习实战:A2C算法实现

本文详细介绍了A2C算法的实现要点,包括网络结构、损失函数、算法流程以及训练过程中的信息监控。文章通过PyTorch实现了一个包含actor和critic网络的模型,并在多个环境中并行运行以加速训练。此外,还提供了在Google Colab中运行的指导以及使用tensorboard进行可视化的方法。
摘要由CSDN通过智能技术生成


A2C实现要点

A2C也是属于Policy算法族的,是在Policy Gradient的基础上拆分出两个网络Critic和Actor。代码实现有如下要点:

网络

  • actor网络:输入state,输出动作的概率分布,从中选择动作后作为critic网络的输入
  • critic网络:输入state和action预估下一个state的q-value

损失函数

  • actor网络:在Policy Gradient损失函数的Q-value值上减一个Baseline使得反馈有正有负,减少网络的波动。
  • critic网络:用于预估state的Q-value, loss为"真实值"和预估值的误差,而"真实值"是用Bellman方程求得,即Q(s) = r + gamma*Q(s’),和DQN的实现相似

算法实现

构建网络

actor和critic网络的输入都有state,只是输出不同所以可以放入同一个主体网络中训练共享信息和参数,但各自的输出层不同。网络代码如下:

# 构建model,model的主体一致,但输出层不同,会同时输出policy和Q-value
class A2CModel(nn.Module):
    def __init__(self, input_shape, n_actions):
        super().__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_out_size = self._get_conv_out(input_shape)
        # 用于输出策略(动作的概率分布)
        self.policy = nn.Sequential(
            nn.Linear(conv_out_size, 512),
            nn.ReLU(),
            nn.Linear(512, n_actions)
        )
        # 输出预估的value
        self.value = nn.Sequential(
            nn.Linear(conv_out_size, 512),
            nn.ReLU(),
            nn.Linear(512, 1)
        )

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

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

构建environment和agent

(在构建agent以及后续的experience source时用到了高级包PTAN, 详情请参见深度强化学习高级包PTAN-1. Agent, Experience

  • 为了加速训练进程可以多个环境并行运行
  • 使用PolicyAgent
NUM_ENVS = 70

make_env = lambda: ptan.common
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值