28、强化学习中的演员 - 评论家方法详解

强化学习中的演员 - 评论家方法详解

1. 计算自我对弈中的优势

在强化学习里,优势能帮助我们判断哪些决策是重要的。为了计算优势,我们需要对之前定义的 ExperienceCollector 类进行更新。原本,经验缓冲区会跟踪三个并行数组,分别是状态(states)、动作(actions)和奖励(rewards)。现在,我们要添加第四个并行数组来跟踪优势(advantages)。

要填充这个数组,我们既需要每个状态的估计值,也需要游戏的最终结果。在游戏进行过程中,我们可以积累估计值,等游戏结束后,再将这些估计值转换为优势。以下是更新后的 ExperienceCollector 类代码:

class ExperienceCollector:
    def __init__(self):
        self.states = []
        self.actions = []
        self.rewards = []
        self.advantages = []
        self._current_episode_states = []
        self._current_episode_actions = []
        self._current_episode_estimated_values = []

    def record_decision(self, state, action, estimated_value=0):
        self._current_episode_stat
演员 - 评论家(Soft Actor - Critic,SAC)强化学习算法是一个遵循最大熵强化学习框架的离线演员 - 评论家模型,其会将策略的熵度量纳入回报函数中,以此鼓励探索,目标是学习到一种尽可能随机行动的策略,同时还能完成任务目标,一个先例工作是软Q学习[^1]。 SAC算法源于两篇重要论文,有相关的开源项目,该项目是精心设计的开源工具箱,用于实现两种变体的SAC算法,即经典的SAC及其确定性策略版本(SAC - V)。此算法结合最大熵方法与离线强化学习,致力于解决高难度的连续动作控制任务,适合对机器人控制感兴趣的研究人员以及希望提升游戏AI性能的开发者,是探索高级强化学习技术的理想起点[^2]。 在最大熵强化学习框架下,SAC算法在传统的强化学习目标基础上增加了策略熵这一额外项。策略熵衡量的是策略的随机性程度,熵值越大表示策略越随机。将熵纳入回报函数后,智能体在学习过程中不仅要最大化累积奖励,还要最大化策略的熵。这使得智能体在探索环境时更具随机性,能够更全面地探索状态 - 动作空间,从而发现更多潜在的最优策略。 从算法结构上看,SAC是一种演员 - 评论家架构。演员网络负责生成动作策略,即根据当前状态输出一个动作的概率分布;评论家网络则负责评估动作的价值,通过学习状态 - 动作对的Q值,为演员网络提供反馈,指导其更新策略。 ```python # 以下是一个简单的SAC算法伪代码示例 import torch import torch.nn as nn import torch.optim as optim # 定义演员网络 class Actor(nn.Module): def __init__(self, state_dim, action_dim): super(Actor, self).__init__() # 网络层定义 self.fc1 = nn.Linear(state_dim, 256) self.fc2 = nn.Linear(256, action_dim) def forward(self, state): x = torch.relu(self.fc1(state)) action = torch.tanh(self.fc2(x)) return action # 定义评论家网络 class Critic(nn.Module): def __init__(self, state_dim, action_dim): super(Critic, self).__init__() # 网络层定义 self.fc1 = nn.Linear(state_dim + action_dim, 256) self.fc2 = nn.Linear(256, 1) def forward(self, state, action): x = torch.cat([state, action], dim=1) x = torch.relu(self.fc1(x)) q_value = self.fc2(x) return q_value # 初始化网络 state_dim = 10 action_dim = 2 actor = Actor(state_dim, action_dim) critic = Critic(state_dim, action_dim) # 定义优化器 actor_optimizer = optim.Adam(actor.parameters(), lr=0.001) critic_optimizer = optim.Adam(critic.parameters(), lr=0.001) # 训练循环 for episode in range(1000): # 与环境交互获取状态、动作、奖励等 state = torch.randn(1, state_dim) action = actor(state) reward = torch.randn(1, 1) next_state = torch.randn(1, state_dim) # 计算评论家损失 q_value = critic(state, action) target_q_value = reward # 简化示例,实际中需要更复杂的计算 critic_loss = nn.MSELoss()(q_value, target_q_value) # 更新评论家网络 critic_optimizer.zero_grad() critic_loss.backward() critic_optimizer.step() # 计算演员损失 actor_loss = -critic(state, actor(state)).mean() # 更新演员网络 actor_optimizer.zero_grad() actor_loss.backward() actor_optimizer.step() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值