当前位置: 首页 > news >正文

【深度强化学习 DRL 快速实践】策略梯度算法 (PG)

在这里插入图片描述

PG(1984,Sutton) 核心改进点

策略梯度算法 (PG): 直接对策略函数进行建模,可以适用于连续的动作空间

  • model-free, PG
核心改进点说明
策略梯度优化通过Actor网络直接优化策略,适应连续动作问题: θ n e w = θ o l d + α ∇ θ J ( θ ) \theta_{new} = \theta_{old} + \alpha \nabla_\theta J(\theta) θnew=θold+αθJ(θ)

PG 网络更新 – 基于蒙特卡洛估计REINFORCE

∇ θ J ( θ ) ≈ ∑ t = 0 T − 1 ∇ θ log ⁡ π θ ( a t ∣ s t ) G t ,where  G t = ∑ t ′ = t T γ t ′ − t r t ′ \nabla_\theta J(\theta) \approx \sum_{t=0}^{T-1} \nabla_\theta \log \pi_\theta(a_t | s_t) G_t,\text{where } G_t = \sum_{t'=t}^{T} \gamma^{t' - t} r_{t'} θJ(θ)t=0T1θlogπθ(atst)Gtwhere Gt=t=tTγttrt


详细网络更新公式推导

策略更新目标:使得 θ \theta θ 策略下得到的所有轨迹 τ \tau τ 的回报期望 R ^ θ \hat{R}_\theta R^θ 最大化: 可以用 N 条轨迹的均值近似

  • τ = { s 1 , a 1 , r 1 , s 2 , a 2 , r 2 , … , s τ , a τ , r τ } \tau = \{s_1, a_1, r_1, s_2, a_2, r_2, \dots, s_\tau, a_\tau, r_\tau\} τ={s1,a1,r1,s2,a2,r2,,sτ,aτ,rτ}
    R ^ θ = ∑ τ R ( τ ) P ( τ ∣ θ ) ≈ 1 N ∑ n N R ( τ n ) \hat{R}_\theta =\textcolor{red}{\sum_\tau} R(\tau) \textcolor{red}{P(\tau | \theta)} \approx \textcolor{blue}{\frac{1}{N} \sum_n^N}R(\tau^n) R^θ=τR(τ)P(τθ)N1nNR(τn)

计算梯度 (近似)

∇ R ˉ θ = ∑ τ R ( τ ) ∇ P ( τ ∣ θ ) = ∑ τ R ( τ ) P ( τ ∣ θ ) ∇ P ( τ ∣ θ ) P ( τ ∣ θ ) = ∑ τ R ( τ ) P ( τ ∣ θ ) ∇ θ log ⁡ P ( τ ∣ θ ) ≈ 1 N ∑ n = 1 N R ( τ n ) ∇ θ log ⁡ P ( τ n ∣ θ ) \nabla \bar{R}_\theta = \sum_\tau R(\tau) \nabla P(\tau | \theta) = \sum_\tau R(\tau) P(\tau | \theta) \frac{\nabla P(\tau | \theta)}{P(\tau | \theta)}=\textcolor{red}{\sum_\tau} R(\tau) \textcolor{red}{P(\tau | \theta)} \nabla_\theta \log P(\tau | \theta)\\ \approx \textcolor{blue}{\frac{1}{N} \sum_{n=1}^N} R(\tau^n) \nabla_\theta \log P(\tau^n | \theta) Rˉθ=τR(τ)P(τθ)=τR(τ)P(τθ)P(τθ)P(τθ)=τR(τ)P(τθ)θlogP(τθ)N1n=1NR(τn)θlogP(τnθ)

  • 注:转为 log 时利用了公式 d log ⁡ ( f ( x ) ) d x = 1 f ( x ) ⋅ d f ( x ) d x \frac{d \log(f(x))}{dx} = \frac{1}{f(x)} \cdot \frac{d f(x)}{dx} dxdlog(f(x))=f(x)1dxdf(x)

其中, ∇ θ log ⁡ P ( τ n ∣ θ ) \nabla_\theta\log P(\tau^n | \theta) θlogP(τnθ) 可以做进一步表示

P ( τ ∣ θ ) = p ( s 1 ) ∏ t = 1 T p ( a t ∣ s t , θ ) p ( r t , s t + 1 ∣ s t , a t ) log ⁡ P ( τ ∣ θ ) = log ⁡ p ( s 1 ) + ∑ t = 1 T log ⁡ p ( a t ∣ s t , θ ) + log ⁡ p ( r t , s t + 1 ∣ s t , a t ) ∇ θ log ⁡ P ( τ ∣ θ ) = ∑ t = 1 T ∇ θ log ⁡ p ( a t ∣ s t , θ ) P(\tau|\theta) = p(s_1) \prod_{t=1}^{T} p(a_t|s_t, \theta) p(r_t, s_{t+1}|s_t, a_t) \\ \log P(\tau|\theta) = \log p(s_1) + \sum_{t=1}^{T} \log p(a_t|s_t, \theta) + \log p(r_t, s_{t+1}|s_t, a_t)\\ \nabla_\theta\log P(\tau | \theta) = \sum_{t=1}^{T} \nabla_\theta \log p(a_t | s_t, \theta) P(τθ)=p(s1)t=1Tp(atst,θ)p(rt,st+1st,at)logP(τθ)=logp(s1)+t=1Tlogp(atst,θ)+logp(rt,st+1st,at)θlogP(τθ)=t=1Tθlogp(atst,θ)

所以梯度 (近似)的表示更新为

∇ R ˉ θ ≈ 1 N ∑ n = 1 N ∑ t = 1 T n R ( τ n ) ∇ θ log ⁡ p ( a t n ∣ s t n , θ ) \nabla \bar{R}_\theta \approx {\frac{1}{N} \sum_{n=1}^N} \sum_{t=1}^{T^n} R(\tau^n) \nabla_\theta \log p(a_t^n | s_t^n, \theta) RˉθN1n=1Nt=1TnR(τn)θlogp(atnstn,θ)

  • 注:梯度用的是总的回报 R ( τ n ) R(\tau^n) R(τn) 而不是 a t n a_t^n atn 对应的即时奖励,也就是说,总的回报会增强/减弱轨迹上所有有利/有害的动作输出;进一步,由于对于第 t 个step,所选择的动作只会影响未来的 U t n = ∑ t T n r t n U^n_t = \sum_t^{T^n} r^n_t Utn=tTnrtn 所以 R ( τ n ) R(\tau^n) R(τn) 可以被优化为 U t n U^n_t Utn,对应本文一开始所给出的梯度公式

关于如何理解这个梯度,李宏毅老师类比分类学习的讲法也很有启发,强烈推荐学习下 【PG 李宏毅 B 站】

进一步的 还可以通过添加 baseline 等方法进一步优化表现

  • 解决全正数值的奖励导致的 – 没有被 sample 到的 action 输出概率会下降 (因为其他被 sample 到了的 actions,获得了正数值的奖励导致其被视为 有利的动作,进而被增强了其的输出) 的问题

基于 stable_baselines3 的快速代码示例

  • 见后续 PPO 算法章节

参考资料:策略梯度算法(PG)详解


http://www.mrgr.cn/news/100066.html

相关文章:

  • Pycharm(十六)面向对象进阶
  • 红黑树——如何靠控制色彩实现平衡的?
  • DPIN河内AI+DePIN峰会:共绘蓝图,加速构建去中心化AI基础设施新生态
  • 【Harmony OS】组件
  • Java 安全:如何实现用户认证与授权?
  • Chrmo手动同步数据
  • 一款好用的桌面待办工具,轻松掌控时间沙漏!
  • 【Python数据库与后端开发】从ORM到RESTful API
  • 【专题刷题】二分查找(二)
  • 单机无穷大系统暂态稳定性仿真Matlab模型
  • 【Kafka 初学】为什么启动 Kafka 前必须先启动 Zookeeper
  • Canvas入门教程!!【Canvas篇二】
  • 第TR5周:Transformer实战:文本分类
  • 基于Axure的动态甘特图设计:实现任务增删改与时间拖拽交互
  • 初一试后担忧
  • 【c++11】c++11新特性(下)(可变参数模板、default和delete、容器新设定、包装器)
  • Redis是单线程的,如何提高多核CPU的利用率?
  • Python Transformers 库介绍
  • Langchain入门介绍
  • 【金仓数据库征文】金仓数据库:开启未来技术脑洞,探索数据库无限可能