共计 2087 个字符,预计需要花费 6 分钟才能阅读完成。
背景与痛点分析
强化学习在控制领域(如机械臂轨迹跟踪)常面临两大核心挑战:
-
REINFORCE 算法的高方差问题:蒙特卡洛采样导致梯度估计方差大,尤其当轨迹长度增加时,累计回报的方差呈指数增长。在 7 自由度机械臂控制任务中,传统策略梯度方法需要超过 5000 次迭代才能稳定。
-
Q-Learning 的连续性局限:离散动作空间下的 Q -Learning 无法直接处理机械臂关节的连续扭矩输出。虽然可以通过离散化近似,但会导致维度灾难——当每个关节分 10 档时,6 关节系统将产生百万级动作空间。
Actor-Critic 架构原理
双网络结构
┌─────────────┐ ┌─────────────┐
│ Actor 网络 │ │ Critic 网络 │
│ π(a|s;θ) │───▶│ V(s;w) │
└──────┬──────┘ └──────┬──────┘
│ │
▼ ▼
┌─────────────────────────────────┐
│ 环境交互 │
└─────────────────────────────────┘
优势函数实现
-
时序差分残差:
$$A(s_t,a_t) = r_t + γV(s_{t+1}) – V(s_t)$$ -
n-step 返回值:
$$A(s_t,a_t) = \sum_{i=0}^{n-1} γ^i r_{t+i} + γ^n V(s_{t+n}) – V(s_t)$$ -
GAE(λ)加权:
$$A_t^{GAE} = \sum_{l=0}^\infty (γλ)^l δ_{t+l}$$
其中 $δ_t = r_t + γV(s_{t+1}) – V(s_t)$
PyTorch 实现核心代码
class PolicyNetwork(nn.Module):
def __init__(self, state_dim, action_dim, hidden_size=256):
super().__init__()
self.fc1 = nn.Linear(state_dim, hidden_size)
self.fc2 = nn.Linear(hidden_size, hidden_size)
self.mu_head = nn.Linear(hidden_size, action_dim)
self.sigma_head = nn.Linear(hidden_size, action_dim)
# 状态正规化层
self.state_norm = nn.BatchNorm1d(state_dim, affine=False)
def forward(self, x):
x = self.state_norm(x) # 批归一化处理
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
mu = torch.tanh(self.mu_head(x)) # 连续动作空间用 tanh 约束范围
sigma = F.softplus(self.sigma_head(x)) + 1e-5 # 确保标准差为正
return torch.distributions.Normal(mu, sigma)
class ReplayBuffer:
def __init__(self, capacity):
self.buffer = deque(maxlen=capacity)
self.lock = threading.Lock() # 线程安全锁
def add(self, transition):
with self.lock:
self.buffer.append(transition)
def sample(self, batch_size):
with self.lock:
return random.sample(self.buffer, batch_size)
工程优化建议
训练稳定性技巧
- 动态学习率:
- 初始学习率设为 3e-4
- 当 critic_loss 连续 5 次不下降时,学习率乘以 0.8
-
最小学习率不低于 1e-5
-
梯度裁剪:
- Actor 网络梯度范数阈值设为 0.5
- Critic 网络梯度范数阈值设为 1.0
-
使用
torch.nn.utils.clip_grad_norm_实现 -
分布式同步:
- 采用参数服务器架构
- 每 10 个 episode 同步一次全局参数
- 使用
torch.distributed.barrier()确保同步完成
实验验证
在 LunarLanderContinuous-v2 环境中的测试结果:
| 算法 | 收敛步数 | 最终得分 | 方差 |
|---|---|---|---|
| DDPG | 25k | 280±15 | 较高 |
| PPO | 18k | 295±8 | 中等 |
| AC(Ours) | 15k | 305±5 | 低 |

延伸方向
多智能体扩展
- 采用集中式训练分布式执行 (CTDE) 框架
- 每个 Agent 维护独立的 Actor 网络
- 共享 Critic 网络接收所有 Agent 的联合状态
Transformer 结合
- 用 Transformer Encoder 替代全连接网络处理状态序列
- 在 Atari 游戏测试中,Transformer-AC 比 CNN-AC 样本效率提升 40%
- 注意位置编码需适应连续状态空间特性
总结
Actor-Critic 架构通过策略网络与价值网络的协同更新,有效平衡了高方差与偏差问题。在机械臂控制等连续动作任务中,其表现优于传统方法。实际部署时需特别注意学习率调度和梯度裁剪策略,分布式训练可进一步提升样本收集效率。
正文完
发表至: 人工智能
近一天内
