策略梯度法(policy gradient)算法简述

本文介绍了深度强化学习中策略梯度法的基本原理。通过玩家在游戏中的行为轨迹,利用梯度上升法来优化策略参数,以达到最大化长期奖励的目标。文章详细解释了策略梯度的计算过程,并讨论了如何通过引入基线和折扣未来奖励来改善学习效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文通过整理李宏毅老师的机器学习教程的内容,简要介绍深度强化学习(deep reinforcement learning)中的策略梯度法(policy gradient)。

李宏毅老师课程的B站链接:
李宏毅, 深度强化学习, policy gradient

相关笔记:
近端策略优化(proximal policy optimization)算法简述
DQN(deep Q-network)算法简述
actor-critic 相关算法简述


设:
一次游戏的轨迹(trajectory): τ \tau τ
玩家(actor)策略(policy): θ \theta θ

则激励(reward)的期望值可通过 N 次采样(sampling)估算(激励 R R R 是一个随机变量):
R ˉ θ = ∑ τ R ( τ ) P ( τ ∣ θ ) ≈ 1 N ∑ n = 1 N R ( τ n ) \bar R_{\theta} = \sum_{\tau} R(\tau) P(\tau | \theta) \approx \frac{1}{N} \sum_{n=1}^{N} R(\tau^{n}) Rˉθ=τR(τ)P(τθ)N1n=1NR(τn)

最优策略为:
θ ∗ = arg ⁡ max ⁡ θ R ˉ θ \theta^{*} = \arg \max_{\theta} \bar R_{\theta} θ=argθmaxRˉθ

优化方法即为梯度上升法(gradient ascent)。
激励的梯度:
▽ R ˉ θ = ∑ τ R ( τ ) ▽ P ( τ ∣ θ ) = ∑ τ R ( τ ) P ( τ ∣ θ ) ▽ P ( τ ∣ θ ) P ( τ ∣ θ ) = ∑ τ R ( τ ) P ( τ ∣ θ ) ▽ ln ⁡ P ( τ ∣ θ ) ≈ 1 N ∑ n = 1 N R ( τ n ) ▽ ln ⁡ P ( τ n ∣ θ ) \triangledown \bar R_{\theta} = \sum_{\tau} R(\tau) \triangledown P(\tau | \theta) = \sum_{\tau} R(\tau) P(\tau | \theta) \frac {\triangledown P(\tau | \theta)} {P(\tau | \theta)} = \sum_{\tau} R(\tau) P(\tau | \theta) \triangledown \ln P(\tau | \theta) \approx \frac{1}{N} \sum_{n=1}^{N} R(\tau^{n}) \triangledown \ln P(\tau^{n} | \theta) Rˉθ=τR(τ)P(τθ)=τR(τ)P(τθ)P(τθ)P(τθ)=τR(τ)P(τθ)lnP(τθ)N1n=1NR(τn)lnP(τnθ)

其中,取对数的操作原理:
d ln ⁡ ( f ( x ) ) d x = 1 f ( x ) d f ( x ) d x \frac {d \ln (f(x))} {dx} = \frac{1}{f(x)} \frac{df(x)}{dx} dxdln(f(x))=f(x)1dxdf(x)

由于轨迹在策略的条件发生的概率:
P ( τ ∣ θ ) = p ( s 1 ) p ( a 1 ∣ s 1 , θ ) p ( r 1 , s 2 ∣ s 1 , a 1 ) p ( a 2 ∣ s 2 , θ ) p ( r 2 , s 3 ∣ s 2 , a 2 ) ⋯ = p ( s 1 ) ∏ t = 1 T p ( a t ∣ s t , θ ) p ( r t , s t + 1 ∣ s t , a t ) P(\tau | \theta) = p(s_1) p(a_1 | s_1, \theta) p(r_1, s_2 | s_1, a_1) p(a_2 | s_2, \theta) p(r_2, s_3 | s_2, a_2) \cdots = p(s_1) \prod_{t=1}^{T} p(a_t | s_t, \theta) p(r_t, s_{t+1} | s_t, a_t) P(τθ)=p(s1)p(a1s1,θ)p(r1,s2s1,a1)p(a2s2,θ)p(r2,s3s2,a2)=p(s1)t=1Tp(atst,θ)p(rt,st+1st,at)

其中, s s s 为各时刻的游戏状态(state), a a a 为玩家的动作(action)。
只有 p ( a t ∣ s t , θ ) p(a_t | s_t, \theta) p(atst,θ) 部分与玩家的策略 θ \theta θ 有关,另外两项 p ( s 1 ) p(s_1) p(s1) p ( r t , s t + 1 ∣ s t , a t ) p(r_t, s_{t+1} | s_t, a_t) p(rt,st+1st,at) 均与玩家策略无关。

因此对数项的梯度:
ln ⁡ P ( τ ∣ θ ) = ln ⁡ p ( s 1 ) + ∑ t = 1 T [ ln ⁡ p ( a t ∣ s t , θ ) + ln ⁡ p ( r t , s t + 1 ∣ s t , a t ) ] ▽ ln ⁡ P ( τ ∣ θ ) = ∑ t = 1 T ▽ ln ⁡ p ( a t ∣ s t , θ ) \ln P(\tau | \theta) = \ln p(s_1) + \sum_{t=1}^{T} [\ln p(a_t | s_t, \theta) + \ln p(r_t, s_{t+1} | s_t, a_t)] \\ \triangledown \ln P(\tau | \theta) = \sum_{t=1}^{T} \triangledown \ln p(a_t | s_t, \theta) lnP(τθ)=lnp(s1)+t=1T[lnp(atst,θ)+lnp(rt,st+1st,at)]lnP(τθ)=t=1Tlnp(atst,θ)

从而得出激励的梯度:
▽ R ˉ θ ≈ 1 N ∑ n = 1 N R ( τ n ) ▽ ln ⁡ P ( τ n ∣ θ ) = 1 N ∑ n = 1 N R ( τ n ) ∑ t = 1 T n ▽ ln ⁡ p ( a t n ∣ s t n , θ ) = 1 N ∑ n = 1 N ∑ t = 1 T n R ( τ n ) ▽ ln ⁡ p ( a t n ∣ s t n , θ ) \triangledown \bar R_{\theta} \approx \frac{1}{N} \sum_{n=1}^{N} R(\tau^{n}) \triangledown \ln P(\tau^{n} | \theta) = \frac{1}{N} \sum_{n=1}^{N} R(\tau^{n}) \sum_{t=1}^{T_n} \triangledown \ln p(a^n_t | s^n_t, \theta) = \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_n} R(\tau^{n}) \triangledown \ln p(a^n_t | s^n_t, \theta) RˉθN1n=1NR(τn)lnP(τnθ)=N1n=1NR(τn)t=1Tnlnp(atnstn,θ)=N1n=1Nt=1TnR(τn)lnp(atnstn,θ)

需要注意以下几点:

一,上式所乘的激励为全局收益,而非单步激励,否则无法学习到对后续时刻激励的动作。(第四点会做出相应改进)

二,取对数的原因:

由于取对数再求梯度相当于,对概率求梯度后除以概率本身:
▽ ln ⁡ p ( a t n ∣ s t n , θ ) = ▽ p ( a t n ∣ s t n , θ ) p ( a t n ∣ s t n , θ ) \triangledown \ln p(a^n_t | s^n_t, \theta) = \frac {\triangledown p(a^n_t | s^n_t, \theta)} {p(a^n_t | s^n_t, \theta)} lnp(atnstn,θ)=p(atnstn,θ)p(atnstn,θ)

而除以概率本身,可以防止某些激励不高的动作被采样多次,从而导致累积过多激励的结果:
去对数的原因

三,引入基线(baseline):

当游戏的激励恒非负时,为防止未被采样到的高激励动作的概率值降低,故加入基线:

引入基线的原因 1
引入基线的原因 2
基线的一个最简单的设置方式,即对 R ( τ ) R(\tau) R(τ) 取平均值:
b ≈ E [ R ( τ ) ] b \approx E[R(\tau)] bE[R(τ)]

四,给每个动作分配合适的分数(credit):

每个时刻的动作,只考虑该时间点之后直到游戏结束的所有激励的总和:
▽ R ˉ θ ≈ 1 N ∑ n = 1 N ∑ t = 1 T n ( ∑ t ′ = t T n r t ′ n − b ) ▽ ln ⁡ p ( a t n ∣ s t n , θ ) \triangledown \bar R_{\theta} \approx \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_n} (\sum_{t^{\prime}=t}^{T_n} r_{t^{\prime}}^n - b) \triangledown \ln p(a^n_t | s^n_t, \theta) RˉθN1n=1Nt=1Tn(t=tTnrtnb)lnp(atnstn,θ)

进一步地,把未来的激励做一个折扣(discount),即时间越久,影响力就越小:
▽ R ˉ θ ≈ 1 N ∑ n = 1 N ∑ t = 1 T n ( ∑ t ′ = t T n γ t ′ − t r t ′ n − b ) ▽ ln ⁡ p ( a t n ∣ s t n , θ ) \triangledown \bar R_{\theta} \approx \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_n} (\sum_{t^{\prime}=t}^{T_n} \gamma^{t^{\prime} - t} r_{t^{\prime}}^n - b) \triangledown \ln p(a^n_t | s^n_t, \theta) RˉθN1n=1Nt=1Tn(t=tTnγttrtnb)lnp(atnstn,θ)

其中,折扣因子 γ \gamma γ 取值范围为 [ 0 , 1 ] [0, 1] [0,1],通常取 0.9 0.9 0.9 0.99 0.99 0.99,若取 0 0 0,则表示只关心即时激励,若取 1 1 1,则表示未来激励等同于即时激励。

此外,基线 b b b 也可以是与状态相关的(state-dependent),事实上它通常是一个网络的输出。

R ( τ n ) − b R(\tau^n) - b R(τn)b 这一项也称为优势函数(advantage function),记为 A θ ( s t , a t ) A^{\theta}(s_t, a_t) Aθ(st,at),表示在状态 s t s_t st 下采取动作 a t a_t at 相较于其他动作究竟有多好,它可以通过一个网络训练出来,即 critic。


<think>好的,我现在需要帮助用户解决如何用Mermaid语法绘制策略梯度(Policy Gradient算法的流程图的问题。首先,用户提到了之前关于Q学习的流程图修复和优化方案,这可能意味着他希望这次的流程图也能遵循类似的规范,比如正确的语法、转义特殊符号、节点命名等。 接下来,我需要参考用户提供的站内引用。引用[1]提到策略梯度的流程包括策略参数化、采样、计算梯度和更新策略参数,形成一个循环。引用[2]和[3]讨论了策略梯度与其他方法的关系以及未来的挑战。这些信息帮助我理解策略梯度的核心步骤和关键点。 用户的需求是绘制策略梯度的Mermaid图,所以需要将这些步骤转化为流程图。根据引用中的步骤,基础流程应该包括初始化参数、采样轨迹、计算梯度、更新参数,然后循环。同时,用户之前的问题中提到过节点标签中的下划线需要转义,决策节点用{},所以需要注意这些语法细节。 另外,用户可能希望流程图不仅基础,还能展示扩展部分,比如探索机制(如熵正则化)、优化方法(如Adam)、多环境交互等,这可以增加图的实用性和详细程度。引用[3]提到的挑战,比如探索与利用的平衡,可能在流程图中通过添加探索策略的节点来体现。 在绘制过程中,需要确保特殊符号如下划线和数学表达式用双引号包裹,节点ID用英文,标签用中文,保持一致性。同时,可能需要调整图表大小,使用用户之前提到的HTML包裹或Mermaid参数设置。 还需要考虑用户可能的后续问题,比如如何优化策略梯度、与其他算法的对比等,所以在回答中生成相关问题,帮助用户深入理解。最后,确保引用正确的来源,比如策略梯度的公式和优化方法,引用用户提供的引用[1]、[2]、[3]。 现在需要整合这些信息,构建一个结构清晰、语法正确的Mermaid流程图,并解释每个步骤和优化点,确保用户能够理解并应用。</think>--- ### **策略梯度(Policy Gradient算法Mermaid流程图构建** --- #### **1. 基础流程图设计** 根据策略梯度方法的核心步骤[^1][^3],构建符合Mermaid语法的标准化流程图: ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'fontSize': '14px'}}}%% graph TD A["初始化策略参数θ"] --> B["采样轨迹τ: (s_0,a_0,r_1,...,s_T)"] B --> C["计算梯度∇J(θ)"] C --> D["更新参数θ ← θ + α∇J(θ)"] D -->|循环| B ``` **关键步骤解析**: 1. **参数初始化**:定义策略网络参数$θ$,通常使用随机初始化 2. **轨迹采样**:通过当前策略生成交互序列$\tau$,记录状态$s_t$、动作$a_t$、奖励$r_{t+1}$ 3. **梯度计算**:计算目标函数$J(θ)$的梯度,核心公式为: $$ ∇_θ J(θ) = \mathbb{E}_\tau \left[ \sum_{t=0}^T ∇_θ \log π_θ(a_t|s_t) G_t \right] $$ 其中$G_t = \sum_{k=t}^T γ^{k-t} r_k$为累积回报[^1] 4. **参数更新**:使用学习率$\alpha$进行梯度上升优化 --- #### **2. 扩展流程图(含探索机制与优化)** 结合策略梯度方法的改进需求[^3],添加关键扩展模块: ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'fontSize': '12px'}}}%% graph TD subgraph 核心循环 A["初始化θ(策略网络)"] --> B["与环境交互N次"] B --> C["收集轨迹集合{τ_i}"] C --> D["计算优势函数A(s,a)"] D --> E["估计策略梯度∇J(θ)"] E --> F{优化器选择} F -->|Adam| G["参数更新θ ← θ + α∇J(θ)"] F -->|RMSProp| G G --> H["熵正则化项H(π)"] --> E end subgraph 探索机制 I["ε-贪婪探索"] --> B J["噪声注入"] --> B end subgraph 终止判断 K{收敛条件?} -->|是| L[输出最优策略π*] K -->|否| B end ``` **新增模块说明**: - **优势函数计算**:使用$A(s,a) = Q(s,a) - V(s)$减少方差[^2] - **优化器选择**:支持多种梯度优化方法 - **熵正则化**:添加$H(π) = -\sum π(a|s)\log π(a|s)$防止策略过早收敛[^3] - **探索机制**:显式标注探索策略的实现方式 --- #### **3. 绘制规范与常见问题处理** 根据Mermaid语法规范[^1]和Q学习流程图修复经验: | 问题类型 | 解决方案 | 示例对比 | |------------------|---------------------------------------------|-----------------------------| | 数学公式显示 | 用双引号包裹含`_`或`^`的标签 | `"状态值V_π(s)"` | | 多行标签 | 使用`<br>`换行符 | `"策略评估<br>(Policy Evaluation)"` | | 子图对齐 | 明确subgraph层级关系 | 见扩展流程图代码 | | 箭头符号冲突 | 避免使用`-->`与HTML标签混合 | 改用`-- 文本 -->` | --- #### **4. 策略梯度完整公式推导** 策略梯度目标函数定义为: $$ J(θ) = \mathbb{E}_{\tau \sim π_θ} \left[ \sum_{t=0}^T γ^t r_t \right] $$ 通过似然比技巧推导梯度: $$ \begin{aligned} ∇_θ J(θ) &= \mathbb{E}_\tau \left[ \left( \sum_{t=0}^T ∇_θ \log π_θ(a_t|s_t) \right) \left( \sum_{k=0}^T γ^k r_k \right) \right] \\ &= \mathbb{E}_\tau \left[ \sum_{t=0}^T ∇_θ \log π_θ(a_t|s_t) G_t \right] \end{aligned} $$ 其中折扣因子$γ \in [0,1]$控制远期回报的权重[^1] --- ### **相关问题** 1. 策略梯度中基线(Baseline)如何减少方差? 2. 对比REINFORCE与Actor-Critic算法的流程图差异? 3. 如何用Mermaid绘制带时间步的策略梯度回溯过程? 4. 策略梯度在连续动作空间中的实现有什么特殊处理? : 策略梯度基本定理 Sutton et al. 2000 [^2]: 优势函数理论分析 Mnih et al. 2016 [^3]: 熵正则化应用指南 Haarnoja et al. 2018
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值