码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • RL 基础 | Policy Gradient 的推导



    去听了 hzxu 老师的 DRL 课,感觉终于听懂了,记录一下…

    目录
    • 0 我们想做什么
    • 1 三个数学 trick
    • 2 对单个 transition 的 policy gradient
    • 3 对整个 trajectory 的 policy gradient
    • 4 REINFORCE 算法

    相关链接:

    • RL 基础 | Value Iteration 的收敛性证明
    • RL 基础 | Policy Iteration 的收敛性证明

    0 我们想做什么

    我们想最大化的东西: J(θ)=Eτ[R(τ)] ,其中 R 是轨迹的 reward 求和(或 discount 求和)。

    我们希望,期望下的轨迹的 reward 求和(reward discounted 求和)最大。

    1 三个数学 trick

    ①: ∇θlog⁡z=1z∇θz

    ②: Ex∼p(x)[f(x)]=∫p(x)f(x)dx

    ③: a/b=[a⋅p(x)]/[b⋅p(x)]

    2 对单个 transition 的 policy gradient

    ∇θEa∼p(a|s;θ)[r(a)]=∇θ∑ap(a∣s;θ)r(a)=∑ar(a)∇θp(a∣s;θ)=∑ar(a)p(a∣s;θ)∇θp(a∣s;θ)p(a∣s;θ)=∑aar(a)p(a∣s;θ)∇θlog⁡p(a∣s;θ)=Ea∼p(a|s;θ)[r(a)∇θlog⁡p(a∣s;θ)]

    其中,
    第一行 把单个 (s,a) 的 reward 期望写为 Σπ(a|s)r(s,a) 的形式;
    第二行 认为 r(a) 是不可微分的,去微分 π(a|s);
    第三行 在分数线上下 同时塞了一个 π(a|s) (即 p(a|s;θ) );
    第四行 因为 d log z = dz/z,原式变成 p(a|s)∇p(a|s) 了;
    第五行 把 p(a|s) 塞回去,变成了 期望下的 r(s,a) ∇log π(a|s)。

    结论:如果想最大化期望下的 r(s,a),可以把 r(s,a) 放 ∇ 外面,去对 log π(a|s) 求梯度。

    3 对整个 trajectory 的 policy gradient

    先计算 trajectory 的概率:

    p(τ∣θ)=μ(s0)⏟initial state distribution⋅∏t=0T−1[π(at∣st,θ)⏟policy⋅p(st+1,rt∣st,at)⏟transition fn.]

    然后,对单个 transition,我们有

    ∇θEx∼p(x|s;θ)[r(x)]=Ex∼p(x|s;θ)[r(x)∇θlog⁡p(x∣s;θ)]

    对于整个 trajectory 的 total reward 的梯度,应用跟 2 相同的方法(分数线上下同乘 p(τ|theta) ),可以得到

    ∇θEτ[R(τ)]=Eτ[∇θlog⁡p(τ∣θ)⏟What is this?R(τ)⏟Reward of a trajectory]

    现在,让我们来看 ∇θlog⁡p(τ∣θ) 。

    log⁡p(τ∣θ)=log⁡μ(s0)+log⁡∏t=0T−1[π(at∣st,θ)⋅p(st+1,rt∣st,at)]=log⁡μ(s0)+∑t=0T−1log⁡[π(at∣st,θ)⋅p(st+1,rt∣st,at)]=log⁡μ(s0)+∑t=0T−1[log⁡π(at∣st,θ)+log⁡p(st+1,rt∣st,at)]

    其中,
    第一行 是把 trajectory 的概率展开;
    第二行 第三行 都是把 log(A×B) 变成 logA + logB;
    然后发现,只有中间这一项 ∑t=0T−1log⁡π(at∣st,θ) 带 θ,因此,前后两项都不用跟 θ 求梯度了。

    由此,我们得到:

    ∇θEτ[R(τ)]=Eτ[R(τ)∇θ∑t=0T−1log⁡π(at∣st,θ)]

    结论:如果想最大化期望下的 R(τ),可以把 R(τ) 放 ∇ 外面,去求 Σ ∇ log π(a|s) ,即 log [action 概率] 的梯度。

    4 REINFORCE 算法

    • 使用策略 π(a|s;θ),生成一个 trajectory:(s0,a0,r1,...,sT−1,aT−1,rT) ;
    • 对每个时间步 t,计算回报:Rt=∑k=t+1Tγk−t−1rk
    • 更新策略参数:θ=θ+αγtRt∇θlogπ(at|st;θ)

    (算法是 GPT 生成的,看起来好像没问题)



  • 相关阅读:
    elementUi——table表格中内容超过2行后,省略号...展示,鼠标悬停展示全部
    【docker】docker 、docker-compose离线安装
    某酒业集团数字化转型规划(169页附下载)
    【机器学习项目实战10例】(二):利用LightGBM实现天气变化的时间序列预测
    初看python
    vue请求代理查看真实地址
    Kafka MQ 主题和分区
    敏稳融合时代,云原生PaaS是企业IT转型的“灵药”吗?
    【ELK】日志系统&部署
    python利用matplotlib绘图,对于中文和负号不显示,显示方框“口口”完美解决办法!!
  • 原文地址:https://www.cnblogs.com/moonout/p/18086974
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号