3.1 策略梯度方法(Policy Gradient Methods)

news/2025/10/12 20:43:39/文章来源:https://www.cnblogs.com/zzzxx/p/19137216

策略梯度方法(Policy Gradient Methods)


背景

在基于值函数的方法(如 DQN)中,直接逼近 Q 值存在多种问题:

  • Q 值无界:可能取任意实数(正或负),输出层必须是线性的;
  • Q 值方差大:不同 \((s,a)\) 对的 Q 值差异巨大,神经网络难以拟合;
  • 仅适用于离散动作空间:在连续动作空间中无法直接求最大动作。

因此,可直接逼近策略 \(\pi_\theta(s,a)\),即用神经网络输出动作概率或连续控制信号。
这类网络称为参数化策略(Parameterized Policy)

  • 对离散动作空间:输出层通常为 softmax,表示每个动作的概率;
  • 对连续动作空间:输出层可直接生成动作值(如机械臂角度)。

policysearch


策略搜索直接学习参数化策略 \(\pi_\theta\),目标是最大化由该策略生成的轨迹的期望回报:

\[J(\theta) = \mathbb{E}_{\tau \sim \rho_\theta}[R(\tau)] = \mathbb{E}_{\tau \sim \rho_\theta}\left[\sum_{t=0}^T \gamma^t r(s_t, a_t, s_{t+1})\right] \]

其中轨迹 \(\tau = (s_0,a_0,s_1,a_1,\ldots,s_T,a_T)\) 的概率为:

\[\rho_\theta(\tau) = p_0(s_0) \prod_{t=0}^T \pi_\theta(s_t,a_t) p(s_{t+1}|s_t,a_t) \]

目标函数可表示为积分形式:

\[J(\theta) = \int_\tau \rho_\theta(\tau) R(\tau) d\tau \]

利用 Monte Carlo 采样,可近似计算目标函数:

\[J(\theta) \approx \frac{1}{N} \sum_{i=1}^N R(\tau_i) \]

但这种方法存在高方差、样本效率低、仅限回合式任务等问题。

为优化 \(J(\theta)\),我们使用梯度上升:

\[\theta \leftarrow \theta + \eta \nabla_\theta J(\theta) \]

关键问题是如何估计策略梯度 \(\nabla_\theta J(\theta)\)
REINFORCE 与 DPG(确定性策略梯度)等算法提供了相应的估计方法。


REINFORCE 算法

策略梯度推导

@Williams1992 提出利用对数技巧(log-trick)估计策略梯度。

从定义出发:

\[\nabla_\theta J(\theta) = \nabla_\theta \int_\tau \rho_\theta(\tau) R(\tau) d\tau = \int_\tau (\nabla_\theta \rho_\theta(\tau)) R(\tau) d\tau \]

利用恒等式:

\[\nabla_\theta \rho_\theta(\tau) = \rho_\theta(\tau) \nabla_\theta \log \rho_\theta(\tau) \]

得到:

\[\nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \rho_\theta}[\nabla_\theta \log \rho_\theta(\tau) R(\tau)] \]

展开 \(\log \rho_\theta(\tau)\)

\[\log \rho_\theta(\tau) = \log p_0(s_0) + \sum_{t=0}^T \log \pi_\theta(s_t,a_t) + \sum_{t=0}^T \log p(s_{t+1}|s_t,a_t) \]

由于环境动态不依赖于 \(\theta\),梯度简化为:

\[\nabla_\theta \log \rho_\theta(\tau) = \sum_{t=0}^T \nabla_\theta \log \pi_\theta(s_t,a_t) \]

因此:

\[\nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \rho_\theta}\left[\sum_{t=0}^T \nabla_\theta \log \pi_\theta(s_t,a_t) R(\tau)\right] \]


REINFORCE 算法流程

  1. 使用当前策略 \(\pi_\theta\) 采样 \(N\) 条轨迹 \(\{\tau_i\}\)

  2. 计算每条轨迹的回报 \(R(\tau_i)\)

  3. 估计策略梯度:

    \[\nabla_\theta J(\theta) \approx \frac{1}{N} \sum_{i=1}^N \sum_{t=0}^T \nabla_\theta \log \pi_\theta(s_t,a_t) R(\tau_i) \]

  4. 更新策略:

    \[\theta \leftarrow \theta + \eta \nabla_\theta J(\theta) \]

优点:

  • 模型无关(model-free);
  • 适用于部分可观测环境(POMDP)。

缺点:

  • 高方差;
  • 样本效率低;
  • 只能用于回合式任务;
  • 需频繁采样。

方差问题与基线校正

REINFORCE 的高方差源于:

  • 策略与环境均为随机;
  • 长时间跨度下,返回的不确定性积累。

解决方案之一是减去基线(baseline)

\[\nabla_\theta J(\theta) \approx \frac{1}{N} \sum_{i,t} \nabla_\theta \log \pi_\theta(s_t,a_t) [R(\tau_i) - \hat{R}] \]

其中:

\[\hat{R} = \frac{1}{N}\sum_i R(\tau_i) \]

这种方式不会引入偏差(证明见 @Williams1992),但能有效降低方差与奖励尺度敏感性。

最优基线为:

\[b = \frac{\mathbb{E}[(\nabla_\theta \log \rho_\theta(\tau))^2 R(\tau)]}{\mathbb{E}[(\nabla_\theta \log \rho_\theta(\tau))^2]} \]

在实践中,使用均值或状态值估计 \(\hat{V}(s_t)\) 即可。


策略梯度定理(Policy Gradient Theorem)

进一步推导得:

\[\nabla_\theta J(\theta) = \mathbb{E}_{s \sim \rho_\theta, a \sim \pi_\theta}[\nabla_\theta \log \pi_\theta(s,a) Q^{\pi_\theta}(s,a)] \]

即:每个状态–动作的梯度加权其期望 Q 值。

这一定理的意义在于:

  • 策略梯度可在单步转移上计算(可引入自举 bootstrapping);
  • 允许与值函数近似器(critic)结合。

Actor–Critic 框架

由策略梯度定理可得,策略学习可结合 Q 值估计形成 Actor–Critic 结构

  • Actor(行为者):学习策略 \(\pi_\theta(s,a)\)
  • Critic(评论者):估计 Q 值 \(Q_\varphi(s,a)\)

策略梯度:

\[\nabla_\theta J(\theta) = \mathbb{E}[\nabla_\theta \log \pi_\theta(s,a) Q_\varphi(s,a)] \]

评论者的目标是最小化 TD 误差:

\[\mathcal{L}(\varphi) = \mathbb{E}[(r + \gamma Q_{\varphi'}(s',\arg\max_{a'} Q_\varphi(s',a')) - Q_\varphi(s,a))^2] \]

policygradient

该结构将策略梯度与时序差分学习结合,成为深度强化学习中最常用的框架之一。

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

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

相关文章

perl语言中的三目运算符和do代码块

我有这么一个需求,根据学生考试成绩进行ABC划分,比如80分以上为A,60-80分为B,60分一下为C 我们能够相当的最简单的方式就是通过if判断并赋值的方式实现,如下代码: $ perl -E my $a; my $b=67; if($b > 80){$…

ll

llimport numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from sklearn.model_selection import train_test_split, KFold, cross_val_score from sklearn.linear_model imp…

CCPC2023女生专场 游记(VP)

整体进步明显,女生赛再砍一金,我们走在正确的道路上。省流 整体进步明显,女生赛再砍一金,我们走在正确的道路上。 在解决掉 \(vivid\_stareium\) 这个问题之后,\(ZWU\) 进入了 \(jianfeijian\) 和 \(yrjzs\) 的时…

tp3.2不再生成Runtime/Logs日志

<?php// +----------------------------------------------------------------------// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]// +----------------------------------------------------------------------…

2.5 分布式学习(Distributed Learning)

分布式学习(Distributed Learning)分布式 DQN(GORILA) 深度强化学习的主要瓶颈是学习速度慢,主要由以下两点决定:样本复杂度(sample complexity):获得令人满意的策略所需的状态转移数量; 在线交互限制(onli…

心得:刷算法的痛点-只根据题目的case思考,不考虑边界情况,写出一坨shit

977. 有序数组的平方 不停地根据错误用例给代码打补丁,最后还是会有新的错误用例,永远补不好。 下面展示一下耗时1小时产出的💩 class Solution {public int[] sortedSquares(int[] nums) {// 统计nums数组中非正数…

11-Redis 集合类型深度指南:从去重特性到集合运算场景落地 - 详解

11-Redis 集合类型深度指南:从去重特性到集合运算场景落地 - 详解2025-10-12 20:28 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !i…

OI 数论 1

部分摘自OiWikigcd 与 ex_gcd 的 C++ 实现 1. 最大公约数(GCD) 1.1 定义 最大公约数(Greatest Common Divisor)指两个或多个整数共有约数中最大的一个,记为 gcd(a, b)。对于非负整数 a 和 b,gcd(a, b) 是能同时整…

2.4 DQN 变体(Rainbow)

DQN 变体(Rainbow)双重 DQN(Double DQN) 在原始 DQN 中,经验回放与目标网络的引入使得 CNN 能够在强化学习中成功训练,但也带来了两个缺点:学习速度显著降低,样本复杂度增高; 稳定性较差,不同运行结果可能不…

Linux存储媒介devmount

Linux 存储媒介dev mount 挂载和卸载存储设备 管理存储设备的第一步是把设备连接到文件系统树中。这个叫做”挂载” 有一个叫做/etc/fstab 的文件可以列出系统启动时要挂载的设备。大多数文件系统是虚拟的,还有实际存…

单片机--概述 - 指南

单片机--概述 - 指南2025-10-12 20:18 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-f…

Emacs折腾日记(三十二)——org mode的基本美化

在上一篇,已经介绍了org mode的基础知识,它与markdown非常相似,并且也十分容易上手,但是它的可扩展性比markdown要强很多。如果将来打算重度使用org mode,那么此时可以对它进行一些基本的配置和美化 基本配置 org…

pp

ppimport numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from sklearn.model_selection import train_test_split, KFold, cross_val_score from sklearn.linear_model imp…

2025 工业风机十大品牌全景解析报告:覆盖离心风机,防爆风机,矿用风机的最新推荐

本报告基于 2025 年行业权威数据,结合中国玻璃钢协会、美国国际空气运动及控制协会(AMCA)等机构的测评结果,从技术创新、性能表现、市场布局三大维度,对工业风机十大品牌进行全景解析,为企业选购适配冶金、石化、…

详细介绍:P3.7计算机视觉

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2.3 深度 Q 网络(Deep Q-Network, DQN)

深度 Q 网络(Deep Q-Network, DQN)深度神经网络在函数逼近中的局限性 值函数型深度强化学习的目标是使用深度神经网络(DNN)逼近每个状态–动作对的 Q 值。 网络可以有两种形式(见下图):以状态–动作对 \((s,a)\…

Linux系统目录(文件)结构

Linux系统目录(文件)结构下方表格转载自: http://billie66.github.io/TLCL/book/chap04.html/ 根目录,万物起源。/bin 包含系统启动和运行所必须的二进制程序。/boot 包含 Linux 内核、初始 RAM 磁盘映像(用于启动…

实用指南:如何读懂Mach-O:构建macOS和iOS应用安全的第一道认知防线

实用指南:如何读懂Mach-O:构建macOS和iOS应用安全的第一道认知防线pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &qu…

vim配置使用

vim配置使用 大多数 Linux 发行版不包含真正的 vi;而是自带一款高级替代版本,叫做 vim。通常,vim 在 Linux 系统中是“vi”的符号链接(或别名)。是一个模式编辑器。(插入模式,命令模式) 配置 全局配置一般在/e…

shell高级

shell高级 组命令和子 shell bash 允许把命令组合在一起。可以通过两种方式完成;要么用一个 group 命令,要么用一个子 shell。 组命令: { command1; command2; [command3; ...] }子 shell: (command1; command2; […