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 初始学习李宏毅讲的强化学习,听台湾的口音真是费了九牛二虎之力,后来看到有热心博客整理的很细致,于是转载来看,当作笔记留待复习用,原文链接在文末.看完笔记再去听一听李宏毅 ...
随机推荐
- JS leetcode 搜索插入位置 题解分析
壹 ❀ 引 今天来做一道特别特别简单的题,来自leetcode35. 搜索插入位置,题目描述如下: 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会 ...
- NC19429 红球进黑洞
题目链接 题目 题目描述 在心理疏导室中有一种奇特的疏导工具,叫做红球.红球被提前分为了许多正方形小方格. 每当有人来找ATB做心理疏导时,ATB就会让他去先玩红球,然后通过红球小格方的高度来判断一个 ...
- Java设计模式-外观模式Facade
介绍 外观模式(Facade),也叫"过程模式:外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用 外观模式通过定义一个一致的接口, ...
- 《系列二》-- 3、FactoryBean 的使用
目录 FactoryBean 解决的问题 FactoryBean 接口初识 改造结果 最后的补充 回顾下 FactoryBean 的应用 factory-method 和 factory-bean 的 ...
- ubuntu 23.04 无法联网
一些参考文章: 解决ubuntu突然无法联网问题 共享主机网络方法: https://www.server-world.info/en/note?os=Ubuntu_22.04&p=squid ...
- 网络上收集的C++常见面试题
1. 进程与线程的关系,图解 进程简单理解就是我们平常使用的程序,进程拥有自己独立的内存空间地址,拥有一个以上的线程. 线程可以理解为轻量级的进程,是程序执行的最小单元.在某个进程启动后,会默认产生一 ...
- win32 - 关于GDI的RGB的数据分析
此文章为小结,仅供参考. 第一种情况,从桌面DC获取RGBA的数据. 32位 HDC hdc, hdcTemp; RECT rect; BYTE* bitPointer; int x, y; int ...
- java面向对象之封装-继承-抽象-多态-组合五种概念及用法一网打尽
说明 曾经在学习java面向对象时,你是否会为面向对象的封装-继承-抽象-多态-组合等各种概念搞得稀里糊涂,乃至反复阅读,背诵其相关概念,结果一段时间过后又还给了时间... 这种经历简直令人发指,让人 ...
- 如何在矩池云复现开源对话语言模型 ChatGLM
ChatGLM-6B 是一个开源的.支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数.结合模型量化技术,用户可以在消费级的显卡上进行 ...
- 详细的BoltDB学习记录文档
最近项目中用到了boltdb这个go开发的key/value 数据库,但是之前并有接触过,所以特意去看了官方,也找了些资料,网上找的资料要不就是官方文档的翻译,要不就是简单的介绍一点,都不是很全,所以 ...