亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Actor-Critic 深度強化學習模型解析與實踐

標簽:
雜七雜八
引言

Actor-Critic 算法是强化学习中一种结合了策略迭代与价值迭代优点的集成方法。它通过将策略学习与价值学习融合,同时包含行动者(Actor)负责策略选择与评论家(Critic)关注价值评估,使得智能体在复杂环境中能够更高效地学习和适应。本文将深入探讨 Actor-Critic 算法的原理、实现细节,并通过代码实例展示如何在实践中应用该模型。

1. Actor-Critic 算法原理与公式推导

Actor-Critic 算法的核心在于通过两个独立的神经网络——评论家(Critic)与行动者(Actor)——协同工作。评论家网络评估动作的价值,而行动者则根据当前策略选择动作。算法的目标是优化策略,使得最终的选择既能够获得较高的即时奖励,又能根据评论家的评估提升长期价值。

评论家网络

评论家网络通常采用深度神经网络,输入可以是状态($s$)或状态与动作对($s, a$),分别用于估计状态价值 $V(s)$ 或动作价值 $Q(s, a)$。评论家的损失函数通常采用均方误差(MSE)来度量预测与实际结果之间的差异:

[ \mathcal{L}_{critic} = \mathbb{E}[(y - \hat{y})^2] ]

其中,$y$ 是真正的价值或动作价值,$\hat{y}$ 是网络预测的结果。

行动者网络

行动者网络负责计算策略函数,指导智能体选择动作。其优化目标函数涉及计算自然梯度,以确保策略的更新在概率空间中进行:

[ \mathcal{L}_{actor} = -\mathbb{E}[A(s, a; \pi)] ]

其中,$A(s, a; \pi)$ 是动作价值函数与策略函数的乘积。

2. 实现与代码示例

引入必要的库

首先,我们需要导入 torch 和其他必要的库来实现 Actor-Critic 算法。

import torch
import torch.nn as nn
import torch.nn.functional as F
import numpy as np
import gym

定义 Actor 和 Critic 网络

接下来,我们定义 Actor 和 Critic 的神经网络,它们将分别用于决策和评估。

class PolicyNet(nn.Module):
    def __init__(self, n_states, n_hiddens, n_actions):
        super(PolicyNet, self).__init__()
        self.fc1 = nn.Linear(n_states, n_hiddens)
        self.fc2 = nn.Linear(n_hiddens, n_actions)

    def forward(self, x):
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        x = F.softmax(x, dim=1)  
        return x

class ValueNet(nn.Module):
    def __init__(self, n_states, n_hiddens):
        super(ValueNet, self).__init__()
        self.fc1 = nn.Linear(n_states, n_hiddens)
        self.fc2 = nn.Linear(n_hiddens, 1)

    def forward(self, x):
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return x

定义 Actor-Critic 类

在此类中,我们整合了 Actor 和 Critic 的功能,并实现了训练方法。

class ActorCritic:
    def __init__(self, n_states, n_hiddens, n_actions,
                 actor_lr, critic_lr, gamma):
        self.gamma = gamma
        self.actor = PolicyNet(n_states, n_hiddens, n_actions)
        self.critic = ValueNet(n_states, n_hiddens)
        self.actor_optimizer = torch.optim.Adam(self.actor.parameters(), lr=actor_lr)
        self.critic_optimizer = torch.optim.Adam(self.critic.parameters(), lr=critic_lr)

    def take_action(self, state):
        state = torch.tensor(state, dtype=torch.float).unsqueeze(0)
        probs = self.actor(state)
        m = torch.distributions.Categorical(probs)
        action = m.sample()
        return action.item()

    def update(self, states, actions, rewards, next_states, dones):
        td_target = rewards + self.gamma * self.critic(next_states) * (1 - dones)
        td_value = self.critic(states)
        td_loss = F.mse_loss(td_value, td_target)
        self.critic_optimizer.zero_grad()
        td_loss.backward()
        self.critic_optimizer.step()

        log_probs = torch.log(self.actor(states).gather(1, actions.unsqueeze(-1)).squeeze())
        adv = td_target - td_value.detach()
        actor_loss = -log_probs * adv
        self.actor_optimizer.zero_grad()
        actor_loss.mean().backward()
        self.actor_optimizer.step()

案例演示

在 OpenAI Gym 环境中实现 Actor-Critic 方法,以 CartPole-v1 环境为例。

def main():
    env = gym.make('CartPole-v1')
    n_states = env.observation_space.shape[0]
    n_actions = env.action_space.n
    n_hiddens = 128
    actor_lr = 0.001
    critic_lr = 0.01
    gamma = 0.99

    agent = ActorCritic(n_states, n_hiddens, n_actions,
                        actor_lr, critic_lr, gamma)

    returns = []

    for episode in range(1000):
        state = env.reset()[0]
        done = False
        rewards = []
        while not done:
            action = agent.take_action(state)
            next_state, reward, done, _, _ = env.step(action)
            rewards.append(reward)
            agent.update(state, action, reward, next_state, done)
            state = next_state
        rewards_sum = sum(rewards)
        returns.append(rewards_sum)
        print(f"Episode {episode}, Reward: {rewards_sum}")

    env.close()

if __name__ == '__main__':
    main()
3. 结论

通过本文的探讨与代码示例,我们可以看到 Actor-Critic 方法在强化学习中的应用。这种方法通过结合策略网络(Actor)和价值网络(Critic),使得智能体在复杂环境中能够更有效地学习到最优策略。实践代码展示了如何在 CartPole 环境中应用 Actor-Critic 算法,这为我们在实际项目中使用该方法提供了参考。随着机器学习技术的不断发展,Actor-Critic 方法将继续在各类应用领域展现出其独特的优势。

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消