去听了 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

\[\begin{aligned}
\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 的概率:

\[p(\tau\mid\theta)=\underbrace{\mu(s_0)}_{\text{initial state distribution}} \cdot \prod_{t=0}^{T-1}[\underbrace{\pi(a_t\mid s_t,\theta)}_{\text{policy}}\cdot\underbrace{p(s_{t+1},r_t\mid s_t,a_t)}_{\text{transition fn.}}]
\\

\]

然后,对单个 transition,我们有

\[\nabla_\theta\mathbb{E}_{x\sim p(x|s;\theta)}[r(x)]=\mathbb{E}_{x\sim p(x|s;\theta)}[r(x)\nabla_\theta\log p(x\mid s;\theta)]
\]

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

\[\nabla_\theta\mathbb{E}_\tau[R(\tau)]=\mathbb{E}_\tau[\underbrace{\nabla_\theta\log p(\tau\mid\theta)}_{\text{What is this?}}\underbrace{R(\tau)}_{\text{Reward of a trajectory}}]
\]

现在,让我们来看 \(\nabla_\theta\log p(\tau\mid\theta)\) 。

\[\begin{aligned}
\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)\) 带 θ,因此,前后两项都不用跟 θ 求梯度了。

由此,我们得到:

\[\nabla_\theta\mathbb{E}_\tau[R(\tau)]=\mathbb{E}_\tau\left[R(\tau)\nabla_\theta\sum_{t=0}^{T-1}\log\pi(a_t\mid s_t,\theta)\right]
\]

结论:如果想最大化期望下的 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 的推导的更多相关文章

  1. (转)RL — Policy Gradient Explained

    RL — Policy Gradient Explained 2019-05-02 21:12:57 This blog is copied from: https://medium.com/@jon ...

  2. 强化学习七 - Policy Gradient Methods

    一.前言 之前我们讨论的所有问题都是先学习action value,再根据action value 来选择action(无论是根据greedy policy选择使得action value 最大的ac ...

  3. Deep Learning专栏--强化学习之从 Policy Gradient 到 A3C(3)

    在之前的强化学习文章里,我们讲到了经典的MDP模型来描述强化学习,其解法包括value iteration和policy iteration,这类经典解法基于已知的转移概率矩阵P,而在实际应用中,我们 ...

  4. DRL之:策略梯度方法 (Policy Gradient Methods)

    DRL 教材 Chpater 11 --- 策略梯度方法(Policy Gradient Methods) 前面介绍了很多关于 state or state-action pairs 方面的知识,为了 ...

  5. [Reinforcement Learning] Policy Gradient Methods

    上一篇博文的内容整理了我们如何去近似价值函数或者是动作价值函数的方法: \[ V_{\theta}(s)\approx V^{\pi}(s) \\ Q_{\theta}(s)\approx Q^{\p ...

  6. 强化学习--Policy Gradient

    Policy Gradient综述: Policy Gradient,通过学习当前环境,直接给出要输出的动作的概率值.   Policy Gradient  不是单步更新,只能等玩完一个epoch,再 ...

  7. 论文笔记之:SeqGAN: Sequence generative adversarial nets with policy gradient

    SeqGAN: Sequence generative adversarial nets with policy gradient  AAAI-2017 Introduction :  产生序列模拟数 ...

  8. 基于Policy Gradient实现CartPole

    http://chenrudan.github.io/blog/2016/09/04/cartpole.html 首页 分类 关于 归档 标签 基于Policy Gradient实现CartPole ...

  9. 深度增强学习--Policy Gradient

    前面都是value based的方法,现在看一种直接预测动作的方法 Policy Based Policy Gradient 一个介绍 karpathy的博客 一个推导 下面的例子实现的REINFOR ...

  10. 深度学习-深度强化学习(DRL)-Policy Gradient与PPO笔记

    Policy Gradient 初始学习李宏毅讲的强化学习,听台湾的口音真是费了九牛二虎之力,后来看到有热心博客整理的很细致,于是转载来看,当作笔记留待复习用,原文链接在文末.看完笔记再去听一听李宏毅 ...

随机推荐

  1. JS Leetcode 80. 删除有序数组中的重复项 II题解,常规解法与快慢双指针做法

    壹 ❀ 引 今天的题目来自LeetCode80. 删除有序数组中的重复项 II,是一道难度中等,但实际挺简单的一道题,题目描述如下: 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每 ...

  2. 西门子SIMATIC LPMLV30 库的模式和状态管理器

    从基于S7-1200 / S7-1500的OMAC PackML V3.0获取到的文章内容,用于记录查看 基本信息 根据PackML_V3.0,该库包含了用于机械模式和状态管理器的功能模块. • 机械 ...

  3. Git合并固定分支的某一部分至当前分支

    在 Git 中,通常使用 git merge 命令来将一个分支的更改合并到另一个分支.如果你只想合并某个分支的一部分代码,可以使用以下两种方法: 1.批量文件合并 1.1.创建并切换到一个新的临时分支 ...

  4. RedHat5 安装中文输入法

    为了学习linux命令,虚拟机里搞了个RedHat 5.4 .下面是安装中文输入法过程: 1.下载并安装小企鹅输入法 fcitx-3.0.0-1.i386.rpm 2.安装后执行以下命令: # cd ...

  5. 石子合并(区间dp+记忆化搜索)

    经典例题:石子合并 题目链接 N 堆石子排成一行,现要将石子有次序地合并成一堆,规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分.计算合并最小得分. 方法一.区间dp ...

  6. Go语言并发编程(4):sync包介绍和使用(下)-Once,Pool,Cond

    sync包下:Once,Pool,Cond 一.sync.Once 执行一次 Once 简介 sync.Once 是 Go 提供的让函数只执行一次的一种实现. 如果 once.Do(f) 被调用多次, ...

  7. requests请求超时尝试重连的3种方式

    参考文档 https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html#module-urllib3.util.retry ...

  8. SpringBoot Starter大全

    spring Boot应用启动器基本的一共有44种,具体如下 1)spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. 2)spring-b ...

  9. 【Azure 微服务】新创建的Service Fabric集群,如何从本地机器上连接到Service Fabric Explorer(Service Fabric状态/错误查看工具)呢?

    问题描述 当在Azure中成功创建一个Service Fabric Cluster 服务后,我们能够在它的Overview页面中发现 Service Fabric Explorer的终结点,但是打开后 ...

  10. 【Azure Redis 缓存】C#程序是否有对应的方式来优化并缩短由于 Redis 维护造成的不可访问的时间

    问题描述 C#程序是否有对应的方式来优化并缩短由于 Redis 维护造成的不可访问的时间? Redis维护说明: Redis 服务维护时,会把副本节点提升为主节点,且旧主节点关闭现有连接时,这个时候, ...