软演员-评论家(Soft Actor-Critic, SAC)是一种基于最大熵框架的深度强化学习算法,在连续动作空间任务中表现出色。下面我将全面介绍SAC的原理、实现细节以及在机器人控制中的应用。
1. SAC算法核心思想
1.1 最大熵强化学习
SAC的核心创新点是最大熵目标,它不仅最大化累积奖励,还最大化策略的熵:
π∗=argmaxπEπ[∑tr(st,at)+αH(π(⋅∣st))]π∗=argπmaxEπ[t∑r(st,at)+αH(π(⋅∣st))]
其中$\alpha$是温度系数,控制熵项的重要性。
1.2 关键技术创新
| 技术 | 说明 | 优势 |
|---|---|---|
| 随机策略 | 输出动作分布而非确定性动作 | 更好的探索能力 |
| 自动温度调节 | 动态调整熵正则化系数 | 免去手动调参 |
| 双Q网络 | 使用两个Q函数估计器 | 减少高估偏差 |
| 目标网络 | 使用慢更新的目标网络 | 提高训练稳定性 |
2. SAC算法数学原理
2.1 价值函数和Q函数
状态价值函数:
V(s)=Ea∼π[Q(s,a)−αlogπ(a∣s)]V(s)=Ea∼π[Q(s,a)−αlogπ(a∣s)]
Q函数更新目标:
Q(s,a)←r(s,a)+γEs′∼p[V(s′)]Q(s,a)←r(s,a)+γEs′∼p[V(s′)]
2.2 策略更新
策略通过最小化KL散度进行更新:
πnew=argminπ′DKL(π′(⋅∣s)∥exp(Qπold(s,⋅)/α)Zπold(s))πnew=argπ′minDKL(π′(⋅∣s)Zπold(s)exp(Qπold(s,⋅)/α))
2.3 温度系数自动调节
通过优化以下目标自动调整$\alpha$:
Ea∼π∗[−αlogπ∗(a∣s)−αH0]Ea∼π∗[−αlogπ∗(a∣s)−αH0]
其中$\mathcal{H}_0$是目标熵。
3. SAC的PyTorch实现
python
import torch
import torch.nn as nn
import torch.nn.functional as F
import numpy as np
from torch.optim import Adam
import gym
# 策略网络(演员)
class GaussianPolicy(nn.Module):
def __init__(self, state_dim, action_dim, hidden_dim=256, max_action=1.0):
super().__init__()
self.max_action = max_action
self.l1 = nn.Linear(state_dim, hidden_dim)
self.l2 = nn.Linear(hidden_dim, hidden_dim)
self.mean = nn.Linear(hidden_dim, action_dim)
self.log_std = nn.Linear(hidden_dim, action_dim)
def forward(self, state):
x = F.relu(self.l1(state))
x = F.relu(self.l2(x))
mean = self.mean(x)
log_std = self.log_std(x)
log_std = torch.clamp(log_std, min=-20, max=2)
return mean, log_std
def sample(self, state):
mean, log_std = self.forward(state)
std = log_std.exp()
normal = torch.distributions.Normal(mean, std)
# 重参数化技巧
x_t = normal.rsample()
action = torch.tanh(x_t) * self.max_action
# 计算对数概率
log_prob = normal.log_prob(x_t)
SAC强化学习算法原理、实现与机器人应用

最低0.47元/天 解锁文章
1717

被折叠的 条评论
为什么被折叠?



