| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 近端策略优化(proximal policy optimization)算法简述 -> 正文阅读 |
|
[人工智能]近端策略优化(proximal policy optimization)算法简述 |
本文通过整理李宏毅老师的机器学习教程的内容,简要介绍深度强化学习(deep reinforcement learning)中的近端策略优化算法(proximal policy optimization)。 李宏毅老师课程的B站链接: 相关笔记: PPO 是策略梯度法的一个变形,它是 OpenAI 现在默认的强化学习算法。 与原始策略梯度法不同的是,PPO 是 off-policy 算法(原始策略梯度法是 on-policy 算法): 首先介绍 重要性采样(importance sampling) 的概念: 假设
x
x
x 是从分布
p
p
p 中采样出来,则: 当无法从分布
p
p
p 采样数据,只能从另一个分布
q
q
q 采样数据时: 即,用 q q q 代替 p p p 采样,需要乘上一个重要性权重(importance weight) p ( x ) q ( x ) \frac{p(x)}{q(x)} q(x)p(x)? 来修正两个分布之间的差异。理论上 q q q 可以是任何分布,唯一的限制是当 q ( x ) q(x) q(x) 为 0 0 0 时, p ( x ) p(x) p(x) 也要为 0 0 0,否则会没有定义。 虽然可以把
p
p
p 换成任何
q
q
q,但是在实现上,两者不能差太多,否则会有一些问题。因为虽然
f
(
x
)
f(x)
f(x) 和
f
(
x
)
p
(
x
)
q
(
x
)
f(x) \frac{p(x)}{q(x)}
f(x)q(x)p(x)? 的期望相同,但是方差不同: D x ~ q [ f ( x ) p ( x ) q ( x ) ] = E x ~ q [ ( f ( x ) p ( x ) q ( x ) ) 2 ] ? ( E x ~ q [ ( f ( x ) p ( x ) q ( x ) ) ] ) 2 = E x ~ p [ f ( x ) 2 p ( x ) q ( x ) ] ? ( E x ~ p [ f ( x ) ] ) 2 D_{x \sim q}[f(x) \frac{p(x)}{q(x)}] = E_{x \sim q}[(f(x) \frac{p(x)}{q(x)}) ^ 2] - (E_{x \sim q}[(f(x) \frac{p(x)}{q(x)})]) ^ 2 = E_{x \sim p}[f(x) ^ 2 \frac{p(x)}{q(x)}] - (E_{x \sim p}[f(x)]) ^ 2 Dx~q?[f(x)q(x)p(x)?]=Ex~q?[(f(x)q(x)p(x)?)2]?(Ex~q?[(f(x)q(x)p(x)?)])2=Ex~p?[f(x)2q(x)p(x)?]?(Ex~p?[f(x)])2 举例说明当
p
p
p 和
q
q
q 差距比较大时可能发生的问题: 将重要性采样应用到 off-policy 情形,就可以把 on-policy 算法改进成 off-policy 算法。 具体地,根据策略梯度法的梯度更新公式: on-policy: off-policy: 实际在更新梯度时,是对每个“状态-动作”分开计算,即: on-policy: off-policy: 由于: 于是得到下式: 由于 actor 会看到的状态与其采取的动作关系不大,而且
p
θ
(
s
t
)
p_\theta(s_t)
pθ?(st?) 很难算,因此假设
p
θ
(
s
t
)
=
p
θ
′
(
s
t
)
p_\theta(s_t) = p_{\theta^\prime}(s_t)
pθ?(st?)=pθ′?(st?),将
p
θ
(
s
t
)
p
θ
′
(
s
t
)
\frac{p_\theta(s_t)}{p_{\theta^\prime}(s_t)}
pθ′?(st?)pθ?(st?)? 删掉,得: 上式为梯度公式,可以通过梯度反推原目标函数,由: 可得目标函数: 写成
J
θ
′
(
θ
)
J^{\theta^\prime}(\theta)
Jθ′(θ) 是因为,括号里的
θ
\theta
θ 代表要去优化的参数,
θ
′
\theta^\prime
θ′ 是真正在与环境互动用作示范的参数。
J
θ
′
(
θ
)
J^{\theta^\prime}(\theta)
Jθ′(θ) 是可以计算的,而更新参数则按照
?
*
? 式进行。 在前面介绍重要性采样时提到,如果 p θ ( a t ∣ s t ) p_\theta(a_t | s_t) pθ?(at?∣st?) 和 p θ ′ ( a t ∣ s t ) p_{\theta^\prime}(a_t | s_t) pθ′?(at?∣st?) 相差很多,采样结果就会不好。因此,避免两者相差太多就是 PPO 算法要做的事情。 在 PPO 算法中,除本来要优化的目标之外,又加入了一项约束: 其中,
K
L
(
θ
,
θ
′
)
KL(\theta, \theta^\prime)
KL(θ,θ′) 表示 KL 散度,用于度量
θ
\theta
θ 与
θ
′
\theta^\prime
θ′ 之间的差异;
β
\beta
β 大于
0
0
0,用于调节约束程度。 有关 KL 散度: PPO 算法有一个前身,即 信任区域策略优化(TRPO,trust region policy optimization) ,采用直接约束 KL 散度的方式: 但由于基于梯度进行优化时,约束很难处理,因此通常采用 PPO,而非 TRPO。 上述 PPO 算法为 PPO1 算法 ,通过使用 KL 散度进行惩罚(penalty)的方式,保证 θ \theta θ 与 θ ′ \theta^\prime θ′ 之间的相似性,因此也叫近端策略优化惩罚(PPO-penalty)。 关于 PPO1,还有一个 自适应 KL 散度(adaptive KL divergence) 的方法,即对参数
β
\beta
β 进行动态调整: 除 PPO1 外,还有一个 PPO2 算法 ,不需要计算 KL 散度,而是通过裁剪(clip)的方式进行约束,即近端策略优化裁剪(PPO-clip): 裁剪的原理如下: |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 17:43:39- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |