软演员-评论家(SAC)强化学习算法详解与实现

软演员-评论家(Soft Actor-Critic, SAC)是一种基于最大熵框架的深度强化学习算法,在连续动作空间任务中表现出色。下面我将全面介绍SAC的原理、实现细节以及在机器人控制中的应用。

1. SAC算法核心思想

1.1 最大熵强化学习

SAC的核心创新点是最大熵目标,它不仅最大化累积奖励,还最大化策略的熵:

π∗=arg⁡max⁡πEπ[∑tr(st,at)+αH(π(⋅∣st))]π∗=argπmax​Eπ​[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=arg⁡min⁡π′DKL(π′(⋅∣s)∥exp⁡(Qπold(s,⋅)/α)Zπold(s))πnew​=argπ′min​DKL​(π′(⋅∣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)
     
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值