共计 2198 个字符,预计需要花费 6 分钟才能阅读完成。
背景与痛点
强化学习作为机器学习的一个重要分支,其核心思想是通过智能体与环境的交互来学习最优策略。传统的强化学习方法如 REINFORCE 算法虽然简单直接,但在实际应用中面临着两个主要问题:
- 高方差:由于 REINFORCE 依赖于蒙特卡洛采样,导致梯度估计的方差很大
- 收敛速度慢:仅依靠策略梯度更新,缺乏对状态价值的准确估计
Actor-Critic 框架通过将策略(Actor)和价值函数(Critic)分离,有效解决了这些问题。Actor 负责选择动作,Critic 则评估这些动作的价值,二者协同工作显著提升了训练效率和稳定性。
结构图解析
一个标准的 Actor-Critic 框架包含以下核心组件:

- Actor 网络:
- 输入:环境状态
- 输出:动作概率分布
-
通常使用策略梯度方法更新
-
Critic 网络:
- 输入:环境状态
- 输出:状态价值估计
-
通过 TD 误差或蒙特卡洛方法更新
-
环境交互流程:
- Actor 根据当前策略选择动作
- 环境执行动作并返回新状态和奖励
- Critic 评估状态价值并计算优势函数
- 使用优势函数更新 Actor
- 使用 TD 误差更新 Critic
代码实现
以下是基于 PyTorch 的简化实现:
import torch
import torch.nn as nn
import torch.optim as optim
class Actor(nn.Module):
def __init__(self, state_dim, action_dim):
super().__init__()
self.fc = nn.Sequential(nn.Linear(state_dim, 64),
nn.ReLU(),
nn.Linear(64, action_dim),
nn.Softmax(dim=-1)
)
def forward(self, state):
return self.fc(state)
class Critic(nn.Module):
def __init__(self, state_dim):
super().__init__()
self.fc = nn.Sequential(nn.Linear(state_dim, 64),
nn.ReLU(),
nn.Linear(64, 1)
)
def forward(self, state):
return self.fc(state)
# 训练伪代码
def train(env, actor, critic, episodes=1000):
actor_optim = optim.Adam(actor.parameters(), lr=0.001)
critic_optim = optim.Adam(critic.parameters(), lr=0.01)
for ep in range(episodes):
state = env.reset()
done = False
while not done:
# 选择动作
action_probs = actor(state)
action = torch.multinomial(action_probs, 1)
# 环境交互
next_state, reward, done, _ = env.step(action)
# 计算 TD 误差
value = critic(state)
next_value = critic(next_state)
td_error = reward + gamma * next_value - value
# 更新 Critic
critic_loss = td_error.pow(2)
critic_optim.zero_grad()
critic_loss.backward()
critic_optim.step()
# 更新 Actor
advantage = td_error.detach()
actor_loss = -torch.log(action_probs[action]) * advantage
actor_optim.zero_grad()
actor_loss.backward()
actor_optim.step()
state = next_state
性能优化
为提高训练效果,可以考虑以下优化技巧:
- 基线函数:
- 使用状态价值函数作为基线减少方差
-
实现公式:∇J(θ) ≈ E[∇logπ(a|s)(Q(s,a)-V(s))]
-
折扣因子 γ :
- 通常设置在 0.9-0.99 之间
-
平衡即时奖励和远期奖励
-
经验回放:
- 存储转移样本 (s,a,r,s’) 在缓冲区
-
随机采样打破样本相关性
-
多步 TD:
- 结合蒙特卡洛和时序差分优点
- 公式:G_t = r_t + γr_{t+1} + … + γ^{n-1}r_{t+n-1} + γ^nV(s_{t+n})
避坑指南
在实际应用中需要注意以下问题:
- 探索不足:
- 解决方案:在策略中增加熵正则项
-
实现:loss -= 0.01 * entropy
-
学习率选择:
- Actor 和 Critic 通常需要不同的学习率
-
经验比例:Critic 学习率 ≈ 10×Actor 学习率
-
网络架构:
- Critic 网络可以比 Actor 网络更深
-
但要注意避免 Critic 过拟合
-
奖励设计:
- 确保奖励尺度合理
- 必要时进行奖励标准化
总结与思考
Actor-Critic 框架因其优异的性能已成为强化学习的主流方法之一。在实际应用中,我们可以考虑以下扩展方向:
- 结合注意力机制处理高维状态
- 使用分布式训练加速收敛
- 应用于多智能体协同任务
- 结合模仿学习提高初始策略质量
通过不断调整网络结构、优化算法参数,Actor-Critic 框架能够解决越来越复杂的决策问题。希望本文能为你理解和应用这一强大工具提供帮助。
正文完
发表至: 机器学习
近一天内
