RL 基础 | Policy Gradient 的推导
去听了 hzxu 老师的 DRL 课,感觉终于听懂了,记录一下…
相关链接:
0 我们想做什么
我们想最大化的东西: \(J(\theta) = \mathbb E_\tau[R(\tau)]\) ,其中 R 是轨迹的 reward 求和(或 discount 求和)。
我们希望,期望下的轨迹的 reward 求和(reward discounted 求和)最大。
1 三个数学 trick
①: \(\nabla_\theta\log z = \frac1z\nabla_\theta z\)
②: \(\mathbb E_{x\sim p(x)}[f(x)] = \int p(x)f(x)dx\)
③: \(a/b = [a\cdot p(x)] / [b\cdot p(x)]\)
2 对单个 transition 的 policy gradient
\nabla_\theta\mathbb{E}_{a\sim p(a|s;\theta)}[r(a)]& =\nabla_\theta\sum_ap(a\mid s;\theta)r(a) \\
&=\sum_ar(a)\nabla_\theta p(a\mid s;\theta) \\
&=\sum_ar(a)p(a\mid s;\theta)\frac{\nabla_\theta p(a\mid s;\theta)}{p(a\mid s;\theta)} \\
&=\sum_a^ar(a)p(a\mid s;\theta)\nabla_\theta\log p(a\mid s;\theta) \\
&=\mathbb{E}_{a\sim p(a|s;\theta)}[r(a)\nabla_\theta\log p(a\mid s;\theta)]
\end{aligned}
\]
其中,
第一行 把单个 (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)\(\nabla\)p(a|s) 了;
第五行 把 p(a|s) 塞回去,变成了 期望下的 r(s,a) \(\nabla\)log π(a|s)。
结论:如果想最大化期望下的 r(s,a),可以把 r(s,a) 放 \(\nabla\) 外面,去对 log π(a|s) 求梯度。
3 对整个 trajectory 的 policy gradient
先计算 trajectory 的概率:
\\
\]
然后,对单个 transition,我们有
\]
对于整个 trajectory 的 total reward 的梯度,应用跟 2 相同的方法(分数线上下同乘 p(τ|theta) ),可以得到
\]
现在,让我们来看 \(\nabla_\theta\log p(\tau\mid\theta)\) 。
\log p(\tau\mid\theta)& =\log\mu(s_0)+\log\prod_{t=0}^{T-1}[\pi(a_t\mid s_t,\theta)\cdot p(s_{t+1},r_t\mid s_t,a_t)] \\
&=\log\mu(s_0)+\sum_{t=0}^{T-1}\log[\pi(a_t\mid s_t,\theta)\cdot p(s_{t+1},r_t\mid s_t,a_t)] \\
&=\log\mu(s_0)+\sum_{t=0}^{T-1}[\log\pi(a_t\mid s_t,\theta)+\log p(s_{t+1},r_t\mid s_t,a_t)] \\
\end{aligned}
\]
其中,
第一行 是把 trajectory 的概率展开;
第二行 第三行 都是把 log(A×B) 变成 logA + logB;
然后发现,只有中间这一项 \(\sum_{t=0}^{T-1}\log\pi(a_t\mid s_t,\theta)\) 带 θ,因此,前后两项都不用跟 θ 求梯度了。
由此,我们得到:
\]
结论:如果想最大化期望下的 R(τ),可以把 R(τ) 放 \(\nabla\) 外面,去求 Σ \(\nabla\) log π(a|s) ,即 log [action 概率] 的梯度。
4 REINFORCE 算法
- 使用策略 π(a|s;θ),生成一个 trajectory:\((s_0, a_0, r_1, ..., s_{T-1}, a_{T-1}, r_T)\) ;
- 对每个时间步 t,计算回报:\(R_t = \sum_{k=t+1}^{T} γ^{k-t-1} r_k\)
- 更新策略参数:\(θ = θ + α γ^t R_t ∇_θ log π(a_t|s_t;θ)\)
(算法是 GPT 生成的,看起来好像没问题)
RL 基础 | Policy Gradient 的推导的更多相关文章
- (转)RL — Policy Gradient Explained
RL — Policy Gradient Explained 2019-05-02 21:12:57 This blog is copied from: https://medium.com/@jon ...
- 强化学习七 - Policy Gradient Methods
一.前言 之前我们讨论的所有问题都是先学习action value,再根据action value 来选择action(无论是根据greedy policy选择使得action value 最大的ac ...
- Deep Learning专栏--强化学习之从 Policy Gradient 到 A3C(3)
在之前的强化学习文章里,我们讲到了经典的MDP模型来描述强化学习,其解法包括value iteration和policy iteration,这类经典解法基于已知的转移概率矩阵P,而在实际应用中,我们 ...
- DRL之:策略梯度方法 (Policy Gradient Methods)
DRL 教材 Chpater 11 --- 策略梯度方法(Policy Gradient Methods) 前面介绍了很多关于 state or state-action pairs 方面的知识,为了 ...
- [Reinforcement Learning] Policy Gradient Methods
上一篇博文的内容整理了我们如何去近似价值函数或者是动作价值函数的方法: \[ V_{\theta}(s)\approx V^{\pi}(s) \\ Q_{\theta}(s)\approx Q^{\p ...
- 强化学习--Policy Gradient
Policy Gradient综述: Policy Gradient,通过学习当前环境,直接给出要输出的动作的概率值. Policy Gradient 不是单步更新,只能等玩完一个epoch,再 ...
- 论文笔记之:SeqGAN: Sequence generative adversarial nets with policy gradient
SeqGAN: Sequence generative adversarial nets with policy gradient AAAI-2017 Introduction : 产生序列模拟数 ...
- 基于Policy Gradient实现CartPole
http://chenrudan.github.io/blog/2016/09/04/cartpole.html 首页 分类 关于 归档 标签 基于Policy Gradient实现CartPole ...
- 深度增强学习--Policy Gradient
前面都是value based的方法,现在看一种直接预测动作的方法 Policy Based Policy Gradient 一个介绍 karpathy的博客 一个推导 下面的例子实现的REINFOR ...
- 深度学习-深度强化学习(DRL)-Policy Gradient与PPO笔记
Policy Gradient 初始学习李宏毅讲的强化学习,听台湾的口音真是费了九牛二虎之力,后来看到有热心博客整理的很细致,于是转载来看,当作笔记留待复习用,原文链接在文末.看完笔记再去听一听李宏毅 ...
随机推荐
- NC16129 小小粉刷匠
题目链接 题目 题目描述 "lalala,我是一个快乐的粉刷匠",小名一边快活地唱着歌,一边开心地刷着墙",兴致突然被打断,"小名,你今天如果刷不完这一栋楼的墙 ...
- 【Unity3D】IK动画
1 IK简介 2D动画.人体模型及动画.人物跟随鼠标位置中介绍了 Aniamtion.Animator.人体模型.人体骨骼.人体动画等基础知识及人体动画的应用,本文将进一步介绍 IK 动画. ...
- cmp命令
cmp命令 cmp命令用来比较两个文件是否有差异,当相互比较的两个文件完全一样时,则该指令不会输出任何信息,若发现有差异,预设会标示出第一个不同之处的字符和列数编号,若不指定任何文件名称或是所给予的文 ...
- 通过weblogic发布服务器某个文件夹
介绍 客户有一台老服务器,上面安装的是weblogic,现在有个需求是需要将服务器下面某个文件夹下的文件都发布出来供某前端直接访问.之前都是直接利用tomcat的webapps目录直接发布即可,搜索了 ...
- 如何在 libevent 中读取超过 4096 字节的数据
如何在 libevent 中读取超过 4096 字节的数据 bufferevent 是 libevent 中相对高层的封装,较 event 使用起来方便很多. 之前有一个需求,需要从服务端读取数据进行 ...
- "explicit" 的使用
今天在编译项目时,代码审查提示 "Single-parameter constructors should be marked explicit" 于是就在构造函数前加上 expl ...
- Youpk 脱壳机脱壳原理分析
Youpk 是一个针对整体加固和Dex抽取加固壳的脱壳机 主要是基于虚拟机的,也就是基于VA的脱壳机, 相对FART出来的更晚一些, 厂商针对少一些, 脱壳位置相对更底层一些,还提供了Dex修复的工具 ...
- 常用Windows控制台命令
查看网络连接信息 1.查看所有网络连接 netstat -ano -a 显示所有连接和侦听端口. -n 以数字形式显示地址和端口号. -o 显示拥有的与每个连接关联的进程 ID. 详细的使用方式使用n ...
- 2021-07-01 原生js获取文件数据
原理 手动用js创建一个type为file的DOM元素. 在读取到数据后,清空手动创建的DOM元素.返回得到的Promise类型的文件数据files. const getFilesPromise = ...
- django中如果不是第一次迁移的时候就配置AUTH_USER_MODEL(用来告知django认证系统识别我们自定义的模型类),那么该如何解决才能让django的认证系统识别且不会报未知错误?
Django认证系统中提供的用户模型类及方法很方便,我们可以使用这个模型类,但是字段有些无法满足项目需求,如还需要保存用户的手机号,需要给模型类添加额外的字段. Django提供了django.con ...