目录

回顾一下policy gradient:

QAC算法:

A2C- advantage actor critic

问题:

1. 为什么要结合起来,能解决什么问题?

1. 策略梯度 (PG) 的优势与核心问题

2. 基于价值方法 (Value-Based) 的优势与局限性

3. 潜在挑战与权衡

2.policy gradient和DQN的区别?

3.连续动作空间中,AC如何将输出值映射为具体的动作?

1. 确定性策略 + 输出层激活函数缩放 (DDPG, TD3 的核心方式)

2. 随机策略 + 参数化概率分布 (SAC, A2C/PPO 用于连续空间的核心方式)

总结:Actor 如何输出连续动作值

4.为什么具有探索能力?


Actor Critic是 actor与critic方法的组合

actor:policy update to take action

critic: policy evaluation

回顾一下policy gradient:

\theta_{t+1}=\theta_t +\alpha\bigtriangledown_{\theta} J(\theta_t)

\theta_{t+1}=\theta_t +\alpha\Xi [\bigtriangledown_{\theta}In\pi(A|S, \theta)q_{\pi}(S,A)]

其实从这个公式中就可以发现actor 和critic: 这个策略更新对应actor,而策略更新需要计算q_tq_t的计算对应于critic。

其中q_t的计算可以有两种方式:

1. Monte Carlo learning:对应的算法为REINFORCE 或者 Monte Carlo policy gradient。

2. Temporal-difference learning(TD):对应的算法称作actor-critic。

QAC算法:

其中

critic: 对应于“SARSA + value function approximation”

actor: 对应于policy update 算法

这个算法是on-policy的(每个轮次会根据新更新的policy进行数据采样)。

且policy是随机的,不需要\varepsilon -greedy技术。

A2C- advantage actor critic

基本思想:在AC中引入一个baseline,来降低方差:

\Xi _{S \sim d, A \sim \pi}[\bigtriangledown_{\theta}In\pi(A|S, \theta)q_{\pi}(S,A)]

\Xi _{S \sim d, A \sim \pi}[\bigtriangledown_{\theta}In\pi(A|S, \theta)(q_{\pi}(S,A)-b(S))]

为什么该公式成立且这种方式可以降低方差?

公式证明:

\Xi _{S \sim d, A \sim \pi}[\bigtriangledown_{\theta}In\pi(A|S, \theta)b(S)]=0

证明过程:

\bigtriangledown_{\theta} J(\theta_t)=\Xi [X]

X(S,A) = \bigtriangledown_{\theta}In\pi(A|S, \theta_t)[(q(S,A)-b(S))]

E[X]相对于b(S)是不变的,但是var(X)相对b(S)是变化的。

目标是找到一个baseline b 来最小化var(X)。这样通过一个随机采样来近似\Xi [X],方差会更小。

最优的baseline:可以通过状态函数v_{\pi}(s)来近似

这样:梯度上升算法变为:

\theta_{t+1}=\theta_t +\alpha\Xi [\bigtriangledown_{\theta}In\pi(A|S, \theta)(q_{\pi}(S,A)-v_{\pi}(S))]

\theta_{t+1}=\theta_t +\alpha\Xi [\bigtriangledown_{\theta}In\pi(A|S, \theta)\delta _{\pi}(S,A)]

其中:\delta _{\pi}(S,A) = q_{\pi}(S,A)-v_{\pi}(S) ,这就是advantage function

与PG一样,这个算法可以被转化为(推导过程见:Policy Gradient【强化学习的数学原理】-CSDN博客):

\theta_{t+1}=\theta_t +\alpha (\frac{\delta _{t}(s_t,a_t)}{\pi(a_t|s_t, \theta_t)})\bigtriangledown_{\theta}\pi (a_t|s_t, \theta_t)

与相对值\delta _{t} 成比例,而不是绝对值q_t,不在乎绝对值,在乎相对值。

advantahe function可以通过TD error来近似,这样可以只通过一个网络来近似v函数,而不需要近似q和v两个网络。

\delta _{t}(s,a) = q_{t}(s_t,a_t)-v_{\pi}(s_t)

\delta _{t}(s,a) =r_{t+1} + \gamma *v_{t}(s_{t+1}) -v_{\pi}(s_t)

具体算法:

问题:

1. 为什么要结合起来,能解决什么问题?

1. 策略梯度 (PG) 的优势与核心问题

  • 优势:

    • 直接优化策略: 直接参数化策略函数 $\pi_\theta(a|s)$ 并沿着提升期望回报的方向更新参数 $\theta$。

    • 处理连续动作空间: 天然适用于动作是连续的或高维的场景(如机器人控制、自动驾驶),因为它直接输出动作或动作分布。

    • 学习随机策略: 可以学习最优的随机策略(这在部分可观测环境或需要探索性的博弈中很重要)。

  • 核心问题:高方差

    • 策略梯度方法(如REINFORCE)使用蒙特卡洛(MC)方法估计整个轨迹的回报 $G_t$ 作为期望回报梯度的无偏估计。

    • 问题在于,$G_t$ 是通过采样得到的,其方差非常大。环境的内在随机性(状态转移、奖励)、策略本身的随机性以及长轨迹都会累积巨大的方差。

    • 高方差的后果:

      • 训练不稳定: 更新方向波动剧烈,导致策略参数剧烈震荡。

      • 收敛缓慢: 需要大量样本(轨迹)才能获得可靠的梯度估计,样本效率低。

      • 难以收敛到最优策略: 巨大的噪声可能使优化过程难以找到正确的方向。

2. 基于价值方法 (Value-Based) 的优势与局限性

  • 优势:

    • 低方差: 通过学习价值函数 $V(s)$ 或 $Q(s, a)$ 来评估状态或状态-动作对的好坏。

    • 样本效率相对较高: 价值函数估计可以利用时序差分(TD)学习进行 Bootstrap(自举),即利用当前估计的值来更新之前的估计,这大大降低了方差(相比MC)。

  • 局限性:

    • 间接优化策略: 需要从学到的价值函数(通常是 $Q$ 函数)中派生策略(例如 $\epsilon$-greedy 或 max操作 $\arg\max_a Q(s, a)$)。

    • 处理连续动作空间困难: 执行 $\arg\max_a Q(s, a)$ 在连续或高维动作空间中非常困难(需要昂贵的优化过程)。(DQN也不行:也需要输入action进行argmax;DQN同PG都是使用的神经网络建模,为什么DQN没有办法建模连续状态空间?

    • 通常学习确定性策略: 标准的基于价值的方法倾向于学习确定性策略或带探索噪声的确定性策略,不一定能学习到最优的随机策略。

通过这种结合,Actor-Critic 有效地解决了 PG 的核心痛点:

  • 显著降低方差: Critic 提供的价值估计(尤其是利用 TD 学习的)比原始的蒙特卡洛回报 $G_t$ 的方差低得多。这直接解决了 PG 方法高方差的核心问题。

  • 提高样本效率: 更低的方差意味着需要更少的样本来获得可靠度足够高的梯度信号,从而提高了样本利用效率

  • 提升训练稳定性: 更平滑、方差更小的梯度信号使得策略参数的更新更加稳定,减少了震荡,更容易收敛。

  • 保持 PG 的优势: 同时,它保留了策略梯度方法的优点:能够直接参数化和优化策略,轻松处理连续动作空间,并能学习随机策略

  • 解决基于价值方法的局限性: Actor 直接输出动作,绕过了基于价值方法在连续动作空间中执行 $\arg\max$ 的难题。

3. 潜在挑战与权衡

  • 引入偏差: Critic 的价值函数估计本身可能是有偏的(尤其是在函数逼近和 Bootstrap 的情况下)。虽然方差降低了,但可能引入了偏差。设计良好的 Critic 和算法(如使用 n-step TD 或 GAE)可以在偏差和方差之间取得良好平衡。

  • 需要训练两个网络: 需要同时学习和更新策略网络(Actor)和价值网络(Critic),增加了算法的复杂性和调参难度。

  • 相互依赖: Actor 的性能依赖于 Critic 的评估质量,而 Critic 评估的质量又依赖于 Actor 生成的样本。如果一方训练不好,会影响另一方。这可能导致训练不稳定。

简而言之,Actor-Critic 解决了“如何在保持策略梯度灵活性的前提下,使其学习过程更高效、更稳定”这个关键问题,使其成为解决复杂连续控制任务的主流且强大的强化学习框架。后续的许多先进算法(如 A2C/A3C, PPO, TRPO, SAC, TD3)都是 Actor-Critic 框架的改进和发展。

2.policy gradient和DQN的区别?

3.连续动作空间中,AC如何将输出值映射为具体的动作?

是一个非常关键的技术细节!Actor-Critic 方法(尤其是用于连续动作空间的算法如 DDPG, TD3, SAC)通过 Actor 网络的输出层设计采样策略,将网络输出的数值映射到具体的、有物理意义的连续动作值(如扭矩、角度)。核心思路是利用参数化的概率分布确定性函数,并结合激活函数进行缩放。

1. 确定性策略 + 输出层激活函数缩放 (DDPG, TD3 的核心方式)

  • Actor 网络结构: Actor 网络 $\pi_\theta(s)$ 是一个神经网络,输入是状态 s输出层直接输出一个动作向量 a。动作向量的维度等于动作空间的维度(例如,n 个关节就是 n 维向量)。

  • 关键:输出层激活函数: 为了将网络输出限制在期望的范围内(如 $[-1, 1]^n$ 或 $[-\pi, \pi]$),输出层使用有界激活函数。最常用的是:

    • tanh 函数: 输出范围是 $[-1, 1]$。这是最直接和常用的方式。

      • 例如,对于扭矩 $a_i \in [-1, 1]$:

        # Actor 网络最后一层
        raw_output = ...  # 神经网络中间层输出
        torque_i = torch.tanh(raw_output_i)  # 将每个维度的输出压缩到 [-1, 1]
    • sigmoid 函数 + 线性缩放: 输出范围是 $[0, 1]$。如果需要范围 $[min, max]$,可以线性缩放:

      • 例如,对于方向盘转角 $a \in [-90^\circ, 90^\circ]$:

        raw_output = ...  # 神经网络中间层输出 (假设是标量或单维向量)
        normalized_angle = torch.sigmoid(raw_output)  # [0, 1]
        steering_angle = min_val + normalized_angle * (max_val - min_val)  # [-90, 90]
        # 即:steering_angle = -90 + 180 * normalized_angle
      • 更常见的是直接用 tanh 缩放:

        steering_angle = max_val * torch.tanh(raw_output)  # 因为 tanh 在 [-1, 1], max_val=90 => [-90, 90]
  • 动作选择: 在训练和测试时(确定性策略),Actor 网络直接输出缩放后的动作值 a = \pi_\theta(s)

2. 随机策略 + 参数化概率分布 (SAC, A2C/PPO 用于连续空间的核心方式)

  • Actor 网络结构: Actor 网络 $\pi_\theta(s)$ 的输出层不再直接输出动作 a,而是输出一个概率分布的参数。对于连续动作空间,最常用的是多元高斯分布 (Multivariate Gaussian Distribution),通常假设各维度独立(对角协方差矩阵)。

    • 输出内容:

      • 均值 (mu, $\mu$): 一个向量,维度等于动作空间维度。表示每个动作维度的中心位置。

      • 标准差 (sigma, $\sigma$) 或 对数标准差 (log_sigma, $\log \sigma$): 一个向量(与 mu 同维),表示每个动作维度的分布宽度(不确定性/探索性)。通常输出 log_sigma 是为了确保 $\sigma > 0$ (通过 exp 转换)。

  • 映射动作范围:

    • 均值 mu 和确定性策略一样,mu 的输出层使用有界激活函数(如 tanh)进行缩放,使其落在 [min, max] 内。

    • 标准差 sigma 其输出层通常使用 softplus 或 exp 激活函数,确保其值为正数。

      • softplussigma = torch.nn.functional.softplus(raw_sigma) (输出 > 0, 更平滑)

      • expsigma = torch.exp(raw_sigma) (输出 > 0)

  • 动作选择 (采样): 在给定状态 s 下,动作 a 通过从该状态对应的参数化高斯分布中采样得到:

    mu = ... # Actor 网络输出的均值 (已缩放) e.g., [0.5, -0.3]
    log_sigma = ... # Actor 网络输出的对数标准差 e.g., [-1.0, -0.5]
    sigma = torch.exp(log_sigma)  # e.g., [0.367, 0.606]# 创建独立高斯分布 (假设各维度独立)
    dist = torch.distributions.Normal(loc=mu, scale=sigma)
    # 从分布中采样一个动作
    action_sampled = dist.sample()  # e.g., [0.62, -0.15]
  • 确保动作在范围内 (可选但推荐): 采样得到的动作可能略微超出 [min, max] 范围(尤其是在分布边缘时)。常见做法:

    1. Clipping: 直接将采样动作裁剪到范围内 action = torch.clamp(action_sampled, min_val, max_val)。简单有效,但会改变分布形状(概率质量累积在边界)。

    2. Squashing: 使用 tanh 等压缩函数将采样动作映射到范围内(SAC 使用此法)。但这引入了分布变换,计算对数概率 (log_prob) 时需要加入 Jacobian 行列式的修正项(SAC 论文处理了这点)。

  • 探索: 探索性来源于分布采样本身。标准差 sigma 控制探索程度。训练算法(如 SAC)通常会包含策略熵正则化项,鼓励策略保持一定的探索性(避免 sigma 过早坍缩到 0)。

  • 测试/部署时: 可以选择:

    • 使用均值 mu 作为动作(确定性输出,不探索)。

    • 继续采样(保持一定的随机性,可能更鲁棒)。

总结:Actor 如何输出连续动作值

方法类型输出内容动作范围映射关键动作选择 (训练)探索来源测试/部署常用动作
确定性策略
(DDPG, TD3)
动作向量 atanh 激活函数 直接输出到 [-1, 1]
(或缩放至 [min, max])
a = \pi_\theta(s) + 外部噪声添加的外部噪声a = \pi_\theta(s)
随机策略
(SAC, PPO)
分布参数 (mulog_sigma)mu 用 tanh 缩放
sigma 用 exp/softplus 保证 >0
从 Normal(mu, sigma) 分布采样
(+ Clipping/Squashing)

4.为什么具有探索能力?

祥见:Policy Gradient【强化学习的数学原理】-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/87730.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/87730.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/87730.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

buuctf-re

1.findKey 打开是C而且有点乱,所以找关键步骤有一个加密进去是不能反编译的,有花指令, 这里有重复的部分把下面的NOP掉,重新定义函数’p’ 之后分析逻辑, // positive sp value has been detected, the output may be wrong! int __userpurge sub_40191F<eax>(int a1&l…

RuoYi、Vue CLI 和 uni-app 结合构建跨端全家桶方案

将 RuoYi、Vue CLI 和 uni-app 结合构建跨端全家桶方案&#xff0c;可以实现一套代码管理后台系统&#xff08;PC&#xff09;和移动端应用&#xff08;H5/小程序/App&#xff09;。以下是整合思路和关键步骤&#xff1a; 技术栈分工 RuoYi&#xff1a;后端框架&#xff08;Spr…

二十九、windows系统安全---windows注册表安全配置

环境 windows server 2012 原理 注册表简介: 注册表&#xff08;Registry&#xff0c;繁体中文版Windows操作系统称之为登录档&#xff09;是Microsoft Windows中的一个重要的数据库&#xff0c;用于存储系统和应用程序的设置信息。早在Windows 3.0推出OLE技术的时候&#…

Android 一帧绘制流程

Android 一帧绘制流程揭秘&#xff1a;主线程与 RenderThread 的双人舞 核心目标&#xff1a;60帧/秒的丝滑体验&#xff0c;意味着每帧必须在16.67ms内完成所有工作&#xff01; 想象一下屏幕刷新就像放映电影&#xff0c;一帧接一帧。Android系统为了播放这“电影”&#xff…

智能网盘检测软件,一键识别失效链接

软件介绍 今天为大家推荐一款由吾爱论坛大神开发的网盘链接检测工具&#xff0c;专为网络资源爱好者设计&#xff0c;可快速批量检测分享链接的有效性。 核心功能 这款工具能够智能识别各类网盘分享链接的有效状态&#xff0c;用户只需批量粘贴链接&#xff0c;软件便会自…

408第三季part2 - 计算机网络 - 应用层

理解 客户机不能直接通信&#xff0c;要通过服务器才行 P2P可以 先记个名字 看图记查询流程 然后迭代就是 主机到本地 本地先查根&#xff0c;然后返回&#xff0c;再查顶级&#xff0c;然后返回&#xff0c;再查权限 然后注意这里主机到本地都是递归查询&#xff0c;其他的…

Modern C++(七)类

7、类 7.1、类声明 前置声明&#xff1a;声明一个将稍后在此作用域定义的类类型。直到定义出现前&#xff0c;此类名具有不完整类型。当代码仅仅需要用到类的指针或引用时&#xff0c;就可以采用前置声明&#xff0c;无需包含完整的类定义。 前置声明有以下几个作用&#xf…

4-6WPS JS宏自定义函数变长参数函数(实例:自定义多功能数据统计函数)学习笔记

一、自定义函数:自定义多功能数据统计函数。示例1&#xff1a;function jia1(x,...arr){//自定义变长函数&#xff0c;X第一参数&#xff0c;...arr为变长参数可放入无数个参数&#xff0c;就像是数组return xWorksheetFunction.Sum(arr)//返回&#xff0c;X第一参数WorksheetF…

HDMI延长器 vs 分配器 vs KVM切换器 vs 矩阵:技术区别与应用场景

在音视频和计算机信号传输领域&#xff0c;延长器、分配器、切换器和矩阵是四种常见设备&#xff0c;它们的功能和应用场景有显著区别。以下是它们的核心差异对比&#xff1a; 1. 延长器&#xff08;Extender&#xff09; 功能&#xff1a; ▸ 将信号&#xff08;如HDMI、Displ…

从0到1解锁Element-Plus组件二次封装El-Dialog动态调用

技术难题初登场 家人们&#xff0c;最近在开发一个超复杂的后台管理系统项目&#xff0c;里面有各种数据展示、表单提交、权限控制等功能&#xff0c;在这个过程中&#xff0c;我频繁地使用到了element-plus组件库中的el-dialog组件 。它就像一个小弹窗&#xff0c;可以用来显示…

数据结构实验习题

codeblock F2是出控制台 1.1 /* by 1705 WYY */ #include <stdio.h> #include <stdlib.h> #define TRUE 1 #define FALSE 0 #define YES 1 #define NO 0 #define OK 1 #define ERROR 0 #define SUCCESS 1 #define UNSUCCESS 0 #define OVERFLOW -2 #define UNDERF…

PyTorch 2.7深度技术解析:新一代深度学习框架的革命性演进

引言:站在AI基础设施变革的历史节点 在2025年这个充满变革的年份,PyTorch团队于4月23日正式发布了2.7.0版本,随后在6月4日推出了2.7.1补丁版本,标志着这个深度学习领域最具影响力的框架再次迎来了重大突破。这不仅仅是一次常规的版本更新,而是一次面向未来计算架构和AI应…

LTspice仿真10——电容

电路1中电容下标m5&#xff0c;表示5个该电阻并联电路2中ic1.5v&#xff0c;表示电容初始自带电量&#xff0c;电压为1.5v

C#事件驱动编程:标准事件模式完全指南

事件驱动是GUI编程的核心逻辑。当程序被按钮点击、按键或定时器中断时&#xff0c;如何规范处理事件&#xff1f;.NET框架通过EventHandler委托给出了标准答案。 &#x1f50d; 一、EventHandler委托&#xff1a;事件处理的基石 public delegate void EventHandler(object se…

全面的 Spring Boot 整合 RabbitMQ 的 `application.yml` 配置示例

spring:rabbitmq:# 基础连接配置 host: localhost # RabbitMQ 服务器地址port: 5672 # 默认端口username: guest # 默认用户名password: guest # 默认密码virtual-host: / # 虚拟主机&#xff08;默认/&…

Win32 API实现串口辅助类

近期需要使用C++进行串口通讯,将Win32 API串口接口进行了下封装,可实现同步通讯,异步回调通讯 1、SerialportMy.h #pragma once #include <Windows.h> #include <thread> #include <atomic> #include <functional> #include <queue> #inclu…

Python-执行系统命令-subprocess

1 需求 2 接口 3 示例 4 参考资料 Python subprocess 模块 | 菜鸟教程

Web攻防-XMLXXE上传解析文件预览接口服务白盒审计应用功能SRC报告

知识点&#xff1a; 1、WEB攻防-XML&XXE-黑盒功能点挖掘 2、WEB攻防-XML&XXE-白盒函数点挖掘 3、WEB攻防-XML&XXE-SRC报告 一、演示案例-WEB攻防-XML&XXE-黑盒功能点挖掘 1、不安全的图像读取-SVG <?xml version"1.0" standalone"yes&qu…

浏览器工作原理37 [#] 浏览上下文组:如何计算Chrome中渲染进程的个数?

一、前言 在默认情况下&#xff0c;如果打开一个标签页&#xff0c;那么浏览器会默认为其创建一个渲染进程。 如果从一个标签页中打开了另一个新标签页&#xff0c;当新标签页和当前标签页属于同一站点&#xff08;相同协议、相同根域名&#xff09;的话&#xff0c;那么新标…

位置编码和RoPE

前言 关于位置编码和RoPE 应用广泛&#xff0c;是很多大模型使用的一种位置编码方式&#xff0c;包括且不限于LLaMA、baichuan、ChatGLM等等 第一部分 transformer原始论文中的标准位置编码 RNN的结构包含了序列的时序信息&#xff0c;而Transformer却完全把时序信息给丢掉了…