1. Actor-Critic方法概述
在强化学习领域,Actor-Critic方法就像一位经验丰富的导演(Critic)指导演员(Actor)如何表演。导演不断评估演员的表现并给出改进建议,而演员则根据这些反馈调整自己的表演策略。这种框架结合了策略梯度(Policy Gradient)和价值函数(Value Function)两种方法的优势,成为解决连续动作空间问题的利器。
我第一次接触Actor-Critic是在开发机器人控制项目时,当时需要让机械臂学习抓取不同形状的物体。传统的Q-learning在连续动作空间显得力不从心,而纯策略梯度方法又存在训练不稳定的问题。Actor-Critic架构完美解决了这些痛点——Critic网络评估状态价值,Actor网络则输出连续的动作参数,两者协同工作使得训练效率大幅提升。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心原理深度解析
2.1 算法架构设计
典型的Actor-Critic系统包含两个核心组件:
- Actor(策略网络):输入当前状态,输出动作概率分布(离散动作)或具体动作值(连续动作)
- Critic(价值网络):评估当前状态的价值,或状态-动作对的Q值
这两个网络通常共享底层的特征提取层,但输出层各自独立。在PyTorch中,这种设计可以这样实现:
python复制class ActorCritic(nn.Module):
def __init__(self, state_dim, action_dim):
super().__init__()
self.shared_layers = nn.Sequential(
nn.Linear(state_dim, 64),
nn.ReLU()
)
self.actor = nn.Linear(64, action_dim)
self.critic = nn.Linear(64, 1)
def forward(self, x):
features = self.shared_layers(x)
return torch.softmax(self.actor(features), dim=-1), self.critic(features)
关键提示:共享底层网络可以提升特征利用率,但要注意两个任务的梯度规模可能不同,需要适当调整学习率。
2.2 优势函数与策略更新
Actor-Critic的核心在于优势函数(Advantage Function)的计算:
A(s,a) = Q(s,a) - V(s)
这个差值表示当前动作相对于平均水平的优势程度。在实践中,我们常用TD误差来近似优势:
δ = r + γV(s') - V(s)
基于此,策略梯度的更新可以表示为:
∇J(θ) = E[∇logπ(a|s) * A(s,a)]
这个公式揭示了Actor更新的本质:增加优势动作的概率,减少劣势动作的概率。Critic则通过最小化TD误差的平方来更新:
L = (r + γV(s') - V(s))²
2.3 常见变体比较
| 方法名称 | 核心改进点 | 适用场景 | 实现复杂度 |
|-
