图解强化学习 |手算SAC算法

简介: SAC(Soft Actor-Critic)是最稳定、强大的连续动作强化学习算法,广泛应用于机器人控制与决策任务。其核心是最大熵强化学习:通过双Q网络抑制过估计,柔性策略网络增强探索,自适应温度系数α动态平衡利用与探索,兼顾最优性与鲁棒性。(239字)

  image.gif 编辑

SAC 算法的基础认识

SAC = Soft Actor-Critic(柔性演员 - 评论家算法)

SAC 是目前最稳、最强、最常用的连续动作强化学习算法 ,机器人、控制、决策任务几乎都用

它。它是一种经典的连续动作强化学习算法,其核心思想是在提高长期奖励的同时,增强策略的随

机探索能力。

image.gif 编辑


SAC的网络结构

5 个神经网络

Actor —— 策略网络,输出动作分布

Critic 1 —— 第一个 Q 评估网络

Critic 2 —— 第二个 Q 评估网络

Target Critic 1 —— 稳定用的 Q 目标网络

Target Critic 2 —— 另一个稳定用的 Q 目标网络

再加 1 个可学习参数:α (alpha) —— 控制探索强度

① Actor

输入:状态 s

输出:动作 a、动作的对数概率 log π(a|s)

( 输入 next_state 对应输出 next_action 和 next_log_prob, 输入 state 对应输出 new_action 和

log_prob)

② Critic 1 / Critic 2

输入:状态 s + 动作 a

输出:一个 Q 值(评估这个动作好不好)

③ Target Critic 1 / Target Critic 2

输入:下一状态 s' + 下一动作 a'

输出:目标 Q 值(用来训练 Critic)

image.gif 编辑

SAC = 1 个策略网络 + 2 个 Q 网络 + 1 个目标 Q 网络

最大特点:双 Critic 防止过估计,随机策略保证探索


网络更新

更新两个 Q 网络(Critic)

image.gif 编辑

动作概率加权: 代表下一状态的动作选择概率,以此为权重对各类动作价值加权平均。下一状态

价值无法由单一动作决定,加权计算才能贴合策略分布的真实期望。

双 Q 网络取最小值:双目标 Q 网络输出取最小值,用以抑制价值高估问题。单个网络易夸大动作

收益,造成训练波动;采用悲观取值思路,能让估值结果更平稳可靠。

熵正则约束:将策略熵纳入价值计算,落地最大熵学习思想。动作随机性越强,该项数值越大,在

目标值中扣除该项后,探索型策略会获得更高评分。以此督促模型兼顾收益最大化与探索能力,防

止算法陷入局部最优。

  SAC 以累积奖励与策略熵联合最大化为优化目标,兼顾决策最优性与环境探索性。借助熵正则

项引导价值网络偏好随机策略,平衡利用与探索,构成最大熵强化学习的核心思路。

image.gif 编辑

image.gif 编辑

image.gif 编辑

更新策略网络(Actor)

image.gif 编辑

其实和上面的公式一样两者目标都是为了最大化下面这个公式:

image.gif 编辑

动作的价值,越高越好,熵正则项,动作越随机,这一项越大,鼓励探索

image.gif 编辑

image.gif 编辑

image.gif 编辑

更新温度系数 α(自动调节探索)

image.gif 编辑

image.gif 编辑

image.gif 编辑

image.gif 编辑

软更新目标 Q 网络(Target Q)

image.gif 编辑


手动计算

已知条件

状态维度:8
动作数:4
gamma = 0.99
rho(tau) = 0.005
target_entropy = -2.0
alpha = 0.2

image.gif

state      = [0.1,0.2,-0.3,0.05,0.02,-0.01,0,0]
action     = 1
reward     = 5.0
next_state = [0.1,0.18,0.04,-0.28,0.02,-0.01,0,0]
done       = False (0)

image.gif

Actor 输出概率:

next_action_prob = [0.1, 0.6, 0.2, 0.1]
log_next_prob    = [-2.30, -0.51, -1.61, -2.30]

image.gif

目标 Q 网络输出:

target_q1 = [10, 20, 5, 8]
target_q2 = [11, 19, 4, 9]

image.gif

当前 Q 网络输出:

q1 = [12, 15, 8, 10]
q2 = [13, 14, 7, 11]

image.gif

更新 Q 网络

计算 target_q_min(双 Q 取最小)

target_q1 = [10, 20, 5, 8]
target_q2 = [11, 19, 4, 9]
target_q_min = [10, 19, 4, 8]

image.gif

计算熵项:alpha * log_next_prob

alpha * log_next_prob
= 0.2 * [-2.30, -0.51, -1.61, -2.30]
= [-0.46, -0.102, -0.322, -0.46]

image.gif

计算核心项:target_q_min - alpha * log_next_prob

target_q_min - alpha*log_next_prob
= [10,19,4,8] - [-0.46, -0.102, -0.322, -0.46]
= [10.46, 19.102, 4.322, 8.46]

image.gif

动作概率加权求和(求期望)

next_action_prob = [0.1, 0.6, 0.2, 0.1]
min_q_next_target
= 0.1*10.46  +  0.6*19.102  +  0.2*4.322  +  0.1*8.46
= 1.046 + 11.4612 + 0.8644 + 0.846
= 14.2176

image.gif

计算 TD Target(最终 Q 目标)

td_target = reward + (1-done) * gamma * min_q_next_target
= 5.0 + 1 * 0.99 * 14.2176
= 5.0 + 14.0754
= 19.0754

image.gif

计算 Q1、Q2 损失

q1(a=1) = 15
q2(a=1) = 14
td_target = 19.0754
q1_loss = (15 - 19.0754)² = (-4.0754)² = 16.609
q2_loss = (14 - 19.0754)² = (-5.0754)² = 25.760
总Q损失 = 16.609 + 25.760 = 42.369

image.gif

更新 Actor 策略网络

取当前状态的动作概率

action_prob = [0.1, 0.6, 0.2, 0.1]
log_prob    = [-2.3, -0.51, -1.6, -2.3]

image.gif

双 Q 取最小

q1 = [12,20,5,9]
q2 = [11,19,4,10]
min_q = [11, 19, 4, 9]

image.gif

计算 inside_term   alpha*log_prob - min_q

alpha*log_prob = [-0.46, -0.102, -0.32, -0.46]
inside_term = [-0.46, -0.102, -0.32, -0.46] - [11,19,4,9]
= [-11.46, -19.102, -4.32, -9.46]

image.gif

加权求和 → actor_loss

actor_loss = 0.1*(-11.46) + 0.6*(-19.102) + 0.2*(-4.32) + 0.1*(-9.46)
= -1.146 - 11.461 - 0.864 - 0.946
= -14.417

image.gif

自动更新温度系数 α

计算当前策略熵 H (π)

entropy = -sum( action_prob * log_prob )
action_prob * log_prob = -0.23 -0.306 -0.32 -0.23 = -1.086
entropy = 1.086

image.gif

计算 inside_term

inside_term = entropy - target_entropy
= 1.086 - (-2.0)
= 3.086

image.gif

计算 α 损失

alpha_loss = alpha * inside_term
= 0.2 * 3.086
= 0.6172

image.gif

软更新 Target Q 网络

target_param = tau * current_param + (1-tau) * target_param
tau = 0.005

image.gif

current_q1_weight = 2.0
target_q1_weight  = 1.9
new_target = 0.005*2.0 + 0.995*1.9
          = 0.01 + 1.8905
          = 1.9005

image.gif

TD目标值 = 19.0754
Q1 损失 = 16.609
Q2 损失 = 25.760
Actor 损失 = -14.417
α 损失 = 0.6172

image.gif

image.gif 编辑


目录
相关文章
|
2月前
|
机器学习/深度学习 人工智能 算法
图解强化学习 |手算近端策略优化算法(PPO)
PPO(近端策略优化)是当前最主流的强化学习算法,以训练稳定、上手简单、泛化性强著称。它通过Actor-Critic双网络架构,结合PPO-Clip损失函数限制策略更新幅度,并利用GAE优势估计提升样本效率,广泛应用于游戏AI、机器人控制、大模型对齐等领域。
726 3
|
机器人 Java Linux
Webots机器人仿真入门(一)
Webots是一个开源的移动机器人仿真模拟器,内置了许多机器人模型。机器人造价普遍超出新手承受范围,对于新手来说使用仿真软件入门是一个不错的选择。
Webots机器人仿真入门(一)
|
2月前
|
机器学习/深度学习 存储 人工智能
图解人工智能的数学基础(线性代数)
本文系统讲解线性代数核心概念,涵盖向量(定义、几何/坐标表示、内积)、矩阵(含义、运算、秩、逆、相似、分解)、行列式(几何意义与变换关系)、线性方程组、特征值与特征向量、二次型、向量空间及范数等,强调其在AI与神经网络中的实际应用。
432 7
|
2月前
|
机器学习/深度学习 算法 自动驾驶
图解强化学习 |手算DDPG
DDPG(深度确定性策略梯度)是一种面向连续动作空间的Actor-Critic强化学习算法。它采用4网络结构(Actor/Critic及其对应目标网络),结合经验回放与软更新,通过确定性策略梯度优化策略,广泛应用于机器人控制、自动驾驶等场景。(239字)
354 1
|
2月前
|
机器学习/深度学习 存储 算法
图解强化学习 |手算Q-learning
Q-learning是一种基于价值的离线无模型强化学习算法,通过Q表存储状态-动作价值,利用时序差分和ε-贪心策略迭代更新,实现最优策略学习;但对连续动作适应性差,大规模状态空间易致Q表爆炸。(239字)
208 0
|
机器学习/深度学习 算法 PyTorch
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
软演员-评论家算法(Soft Actor-Critic, SAC)是深度强化学习领域的重要进展,基于最大熵框架优化策略,在探索与利用之间实现动态平衡。SAC通过双Q网络设计和自适应温度参数,提升了训练稳定性和样本效率。本文详细解析了SAC的数学原理、网络架构及PyTorch实现,涵盖演员网络的动作采样与对数概率计算、评论家网络的Q值估计及其损失函数,并介绍了完整的SAC智能体实现流程。SAC在连续动作空间中表现出色,具有高样本效率和稳定的训练过程,适合实际应用场景。
6313 7
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
|
5月前
|
Android开发 iOS开发
阿里云数字短信全面开放!全终端适配,点击率提升 3 倍,营销触达新方案来了
阿里云数字短信全面开放!突破传统限制,支持图文/视频/音频富媒体(单条2MB),全平台(iOS/安卓/鸿蒙)触达率超90%,解决拦截高、内容单调、转化低痛点,助力电商、零售等行业实现“发得出、看得见、愿意点”的高效营销。
|
7月前
|
机器学习/深度学习 数据采集 人工智能
如何赋予大语言模型以“灵魂”?深度解析增量预训练(Continual Pre-training)逻辑与实战代码
本文深入解析大模型增量预训练(CPT/DAP/CFT)三大路径,厘清RAG、微调与预训练的适用边界;结合eBay、AWS等实战案例,详解低成本高效CPT方法,并提供Unsloth框架下Qwen-3-4B金融领域实操代码。
1329 1
如何赋予大语言模型以“灵魂”?深度解析增量预训练(Continual Pre-training)逻辑与实战代码
|
6月前
|
JSON 自然语言处理 数据格式
大模型应用:结构化思维:Schema在大模型信息抽取中的认知引导作用.14
本文介绍大模型+Schema结构化信息抽取技术,涵盖核心原理(Schema引导、大模型语义理解、格式校验)、三大范式(Zero-shot/少样本/思维链)及完整执行流程,并提供多类型抽取示例(单字段、嵌套、数组、关系等),支持CPU环境本地部署与后处理校验。
1602 15
|
8月前
|
SQL 关系型数据库 MySQL
MySQL 为何能稳居开源数据库主流宝座
自1995年发布以来,MySQL凭借轻量高效、易用友好、生态完善、灵活扩展四大优势,成为全球最受欢迎的开源关系型数据库。广泛适配各类开发语言、开源项目与云平台,支持从个人博客到大型电商的全场景应用,持续稳居DB-Engines排名前列,是Web开发的“标配”与开源数据库的“常青树”。(238字)