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


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.comm
  • 10
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
A2C(Advantage Actor-Critic)算法是一种常用的强化学习算法,旨在通过同时训练一个策略网络(Actor)和一个价值网络(Critic)来实现优化。 在A2C算法中,Actor网络用于学习动作策略,而Critic网络用于评估状态的价值。Actor网络根据当前状态选择一个动作,并生成一个策略分布。Critic网络根据当前状态估计该状态的价值。这两个网络共同工作,通过优化目标函数来提高策略和价值的准确性。 A2C算法的训练过程可以分为两个步骤:生成样本和更新参数。生成样本时,Actor网络根据当前状态生成动作,并与环境进行交互,得到下一个状态和奖励。然后,使用这些样本计算出优势函数,即当前状态的动作价值与预期价值之间的差异。 更新参数时,使用生成的样本来计算Actor和Critic网络的损失函数。Actor损失函数一般使用策略梯度方法,通过最大化优势函数来更新策略网络的参数。Critic损失函数一般使用均方误差损失,通过最小化实际价值与预期价值之间的差异来更新价值网络的参数。这两个网络的参数可以使用梯度下降法进行更新。 与A3C(Asynchronous Advantage Actor-Critic)算法不同,A2C算法是一种1-step方法,即每次更新只考虑当前的状态和动作。而A3C算法是一种n-step方法,考虑了未来多个状态和动作的影响。因此,A3C相比于A2C在更新参数的方式上有所不同,但都是基于Actor-Critic的思想。 总结来说,A2C算法是一种结合了Actor和Critic网络的强化学习算法,通过不断生成样本和更新网络参数来提高策略和价值的准确性。它是一种1-step方法,与A3C算法相比,在更新参数的方式上有所不同。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [强化学习算法:AC系列详解](https://blog.csdn.net/qq_29176963/article/details/104975905)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值