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

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 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 编辑


目录
相关文章
|
4天前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
1890 7
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
|
12天前
|
人工智能 开发工具 iOS开发
Claude Code 新手完全上手指南:安装、国产模型配置与常用命令全解
Claude Code 是一款运行在终端环境中的 AI 编程助手,能够直接在命令行中完成代码生成、项目分析、文件修改、命令执行、Git 管理等开发全流程工作。它最大的特点是**任务驱动、终端原生、轻量高效、多模型兼容**,无需图形界面、不依赖 IDE 插件,能够深度融入开发者日常工作流。
3362 10
|
14天前
|
Shell API 开发工具
Claude Code 快速上手指南(新手友好版)
AI编程工具卷疯啦!Claude Code凭借任务驱动+终端原生的特性,成了开发者的效率搭子。本文从安装、登录、切换国产模型到常用命令,手把手带新手快速上手,全程避坑,30分钟独立用起来。
3407 24
|
8天前
|
人工智能 Linux BI
国内用 Claude Code 终于不用翻墙了:一行命令搞定,自动接 DeepSeek
JeecgBoot AI专题研究 一键脚本:Claude Code + JeecgBoot Skills + DeepSeek 全平台接入 一行命令装好 Claude Code + JeecgBoot Skills + DeepSeek 接入,无需翻墙使用 Claude Code,支持 Wind
2499 5
国内用 Claude Code 终于不用翻墙了:一行命令搞定,自动接 DeepSeek
|
27天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23606 15
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
5天前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全+三种模式+记忆体系+实战工作流完整手册
Claude Code 是当前最流行的终端级 AI 编程助手,能够直接在命令行中完成代码生成、项目理解、文件修改、命令执行、错误修复等全流程开发工作。它不依赖图形界面、不占用额外资源,却能深度理解项目结构,自动生成规范代码,大幅提升研发效率。
1053 3
|
12天前
|
存储 Linux iOS开发
【2026最新】MarkText中文版Markdown编辑器使用图解(附安装包)
MarkText是一款免费开源、跨平台的Markdown编辑器,主打所见即所得实时预览,支持Windows/macOS/Linux。内置数学公式、流程图、代码高亮、多主题及PDF/HTML导出,是Typora的轻量免费替代首选。(239字)