强化学习(5):策略梯度(Policy Gradient, PG)算法

news/2024/5/19 1:12:16 标签: 强化学习, policy gradient, PG

最近自己会把自己个人博客中的文章陆陆续续的复制到CSDN上来,欢迎大家关注我的 个人博客,以及我的github。

本文主要讲解有关 Policy Gradient(PG)算法的相关内容。

之前提到的 Sarsa、Q-Learning 和 DQN 算法都是基于价值的方法,也就是先计算每个状态对应的动作的 Q 值,再选择 Q 值最大的动作执行。而 Policy Gradient 是一种更加直接的方式,它直接计算每个状态对应的动作或者动作的概率。这样做的优点就是它可以在一个连续区间内选取动作。

Policy Gradient 算法就是对策略函数进行建模,然后用梯度下降更新网络的参数。但是在强化学习中并没有实际的损失函数,而 PG 算法的目的是最大化累计奖励的期望值,所以可以将损失函数设为: l o s s = − E [ log ⁡ [ π ( a ∣ s ) ] ⋅ Q ( s , a ) ] loss=-E[\log{[\pi(a|s)]}\cdot Q(s,a)] loss=E[log[π(as)]Q(s,a)],可以理解为如果一个动作的奖励值较大,则下次选取该动作的可能性增加的幅度也大,反之选取该动作的可能性增加的幅度小。

但是因为策略 π \pi π 不易求得,所以可以将其改写为 l o s s = − E [ log ⁡ [ p θ ( τ ) ] ⋅ R ( τ ) ] loss=-E[\log[p_\theta(\tau)]\cdot R(\tau)] loss=E[log[pθ(τ)]R(τ)],其中 p θ ( τ ) p_\theta(\tau) pθ(τ) 是轨迹 τ \tau τ 出现的概率, R ( τ ) R(\tau) R(τ) 是轨迹 τ \tau τ 的总奖励值。因此,策略梯度的直观含义是增大高回报轨迹的概率,降低低回报轨迹的概率。

而取对数的原因是取对数后不会改变函数的单挑性,又会避免指数的计算(如果有的话),同时可以将乘法转化为加法,既降低了计算复杂度,又避免了多个小于 1 的数相乘导致下溢出的情况。

根据采样方式的不同可以分为两种情况,第一种是基于蒙特卡洛的方式,此时会采一个回合(episode)的样本然后计算 loss;第二种是基于 TD 的方式,此时会采单步的样本然后计算 loss。前一种的代表是 REINFORCE 算法,后一种的代表是 Actor-Critic 算法。

以上是关于 PG 算法的一些感性认识和拼凑起来的总结,下面将从理性的角度以数学公式推理的形式推导一下 PG 算法的损失函数。以下内容主要是根据李宏毅老师的 RL 教程整理的。


轨迹: τ = { s 1 , a 1 , s 2 , a 2 , . . . , s T , a T } \tau=\{s_1,a_1,s_2,a_2,...,s_T,a_T\} τ={s1,a1,s2,a2,...,sT,aT},则该轨迹出现的概率为:
p θ ( τ ) = p ( s 1 ) p θ ( a 1 ∣ s 1 ) p ( s 2 ∣ s 1 , a 1 ) p θ ( a 2 ∣ s 2 ) p ( s 3 ∣ s 2 , a 2 ) . . . p_\theta(\tau)=p(s_1)p_\theta(a_1|s_1)p(s_2|s_1,a_1)p_\theta(a_2|s_2)p(s_3|s_2,a_2)... pθ(τ)=p(s1)pθ(a1s1)p(s2s1,a1)pθ(a2s2)p(s3s2,a2)...

= p ( s 1 ) ∏ t = 1 T p θ ( a t ∣ s t ) p ( s t + 1 ∣ s t , a t ) 公 式 ( 1 ) =p(s_1)\prod_{t=1}^Tp_\theta(a_t|s_t)p(s_{t+1}|s_t,a_t)\quad\quad\quad 公式(1) =p(s1)t=1Tpθ(atst)p(st+1st,at)(1)

在上式中,因为在给定状态 s t s_t st 确定要采取什么动作 a t a_t at 时,需要神经网络来完成,所以 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(atst) 带参数 θ \theta θ,相反, p ( s t + 1 ∣ s t , a t ) p(s_{t+1}|s_t,a_t) p(st+1st,at) 是由环境决定的,所以不带参数 θ \theta θ

每一个动作 a t a_t at 获得相应的奖励 r t r_t rt,则总奖励为 $ R(\tau)=\sum_{t=1}^Tr_t$,我们希望总奖励最大化。

奖励的期望为: R ˉ θ = ∑ τ R ( τ ) p θ ( τ ) = E τ − p θ ( τ ) [ R ( τ ) ] \bar R_\theta=\sum_\tau R(\tau)p_\theta(\tau)=E_{\tau-p_\theta(\tau)}[R(\tau)] Rˉθ=τR(τ)pθ(τ)=Eτpθ(τ)[R(τ)],即奖励的期望为所有轨迹出现的概率与该轨迹奖励值乘积之和。

因为我们要求的是使得总奖励值 R ˉ θ \bar R_\theta Rˉθ 最大的最优策略 π \pi π,所以损失函数可以设为:
L ( θ ) = − R ˉ θ L(\theta)=-\bar R_\theta L(θ)=Rˉθ
损失函数(负的奖励的期望)对参数 θ \theta θ 求导:
∇ L ( θ ) = − ∇ R ˉ θ = − ∑ τ R ( τ ) ∇ p θ ( τ ) = − ∑ τ R ( τ ) p θ ( τ ) ∇ p θ ( τ ) p θ ( τ ) \nabla L(\theta)=-\nabla \bar R_\theta=-\sum_\tau R(\tau)\nabla p_\theta(\tau)=-\sum_\tau R(\tau)p_\theta(\tau)\frac{\nabla p_\theta(\tau)}{p_\theta(\tau)} L(θ)=Rˉθ=τR(τ)pθ(τ)=τR(τ)pθ(τ)pθ(τ)pθ(τ)
因为 ∇ f ( x ) = f ( x ) ∇ log ⁡ f ( x ) \nabla f(x)=f(x)\nabla\log f(x) f(x)=f(x)logf(x),所以:
= − ∑ τ R ( τ ) p θ ( τ ) ∇ log ⁡ p θ ( τ ) =-\sum_\tau R(\tau)p_\theta(\tau)\nabla\log p_\theta(\tau) =τR(τ)pθ(τ)logpθ(τ)
p θ ( τ ) p_\theta(\tau) pθ(τ) 看作是 R ( τ ) ∇ log ⁡ p θ ( τ ) R(\tau)\nabla\log p_\theta(\tau) R(τ)logpθ(τ) 的概率分布,则可改写为期望的形式:
= − E τ ∼ p θ ( τ ) [ R ( τ ) ∇ log ⁡ p θ ( τ ) ] ≈ − 1 N ∑ n = 1 N R ( τ n ) ∇ log ⁡ p θ ( τ n ) =-E_{\tau\sim p_\theta(\tau)}[R(\tau)\nabla\log p_\theta(\tau)]\thickapprox -\frac{1}{N}\sum_{n=1}^N R(\tau^n)\nabla\log p_\theta(\tau^n) =Eτpθ(τ)[R(τ)logpθ(τ)]N1n=1NR(τn)logpθ(τn)
上式中由于前一项没法直接结算,所以可以通过采样的方式获取多个轨迹 τ \tau τ 来计算,其中 N 是轨迹的个数, τ n \tau^n τn 表示是第 n 个轨迹。

如公式(1) 所示,轨迹的概率 p θ ( τ n ) p_\theta(\tau^n) pθ(τn) 的表达式中的 p ( s t + 1 ∣ s t , a t ) p(s_{t+1}|s_t,a_t) p(st+1st,at) 来自环境,而 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(atst) 来自决策网络,前者是不带参数 θ \theta θ 的,对其求导没什么用。所以 p θ ( τ n ) p_\theta(\tau^n) pθ(τn) 可以写作 p θ ( τ n ) = p θ ( a 1 n ∣ s 1 n ) ⋅ p θ ( a 2 n ∣ s 2 n ) ⋅ . . . ⋅ p θ ( a T n n ∣ s T n n ) p_\theta(\tau^n)=p_\theta(a_1^n|s_1^n)\cdot p_\theta(a_2^n|s_2^n)\cdot ...\cdot p_\theta(a_{T_n}^n|s_{T_n}^n) pθ(τn)=pθ(a1ns1n)pθ(a2ns2n)...pθ(aTnnsTnn),对其取对数后变为求和的形式,即:
= − 1 N ∑ n = 1 N ∑ t = 1 T n R ( τ n ) ∇ log ⁡ p θ ( a t n ∣ s t n ) =-\frac{1}{N}\sum_{n=1}^N\sum_{t=1}^{T_n} R(\tau^n)\nabla\log p_\theta(a_t^n|s_t^n) =N1n=1Nt=1TnR(τn)logpθ(atnstn)
其中 T n T_n Tn 是第 n 个轨迹的长度。然后更新模型参数:
θ = θ − η ⋅ ∇ L ( θ ) \theta=\theta-\eta\cdot\nabla L(\theta) θ=θηL(θ)
其中 η \eta η 是学习率。

Tip1:增加基准

由于采取的行动概率和为一,可能存在归一化之后,好的 action 的概率相对下降,坏的 action 概率相对上升的情况,因此需要引入一个基准线 b,让 ∇ R ˉ θ \nabla\bar R_\theta Rˉθ 变得有正有负,将其改写为:
∇ R ˉ θ ≈ 1 N ∑ n = 1 N ∑ t = 1 T n ( R ( τ n ) − b ) ∇ log ⁡ p θ ( a t n ∣ s t n ) \nabla\bar R_\theta\approx\frac{1}{N}\sum_{n=1}^N\sum_{t=1}^{T_n}(R(\tau^n)-b)\nabla\log p_\theta(a_t^n|s_t^n) RˉθN1n=1Nt=1Tn(R(τn)b)logpθ(atnstn)

b ≈ E [ R ( τ ) ] b\approx E[R(\tau)] bE[R(τ)]

Tip2:设置适当的置信度
∇ R ˉ θ ≈ 1 N ∑ n = 1 N ∑ t = 1 T n ( ∑ t ′ = t T n γ t ′ − t ⋅ r t ′ n − b ) ∇ log ⁡ p θ ( a t n ∣ s t n ) \nabla\bar R_\theta\approx\frac{1}{N}\sum_{n=1}^N\sum_{t=1}^{T_n}(\sum_{t'=t}^{T_n}{\gamma^{t'-t}\cdot r_{t'}^n}-b)\nabla\log p_\theta(a_t^n|s_t^n) RˉθN1n=1Nt=1Tn(t=tTnγttrtnb)logpθ(atnstn)
∑ t ′ = t T n γ t ′ − t ⋅ r t ′ n \sum_{t'=t}^{T_n}{\gamma^{t'-t}\cdot r_{t'}^n} t=tTnγttrtn 代替了 R ( τ n ) R(\tau^n) R(τn),将从当前状态以后产生的回报作为当前状态的奖励值。 γ < 1 \gamma<1 γ<1 表示折扣系数,一个状态离当前状态越远损失越大,即与当前越不相关。


http://www.niftyadmin.cn/n/968509.html

相关文章

【GESP】2023年06月图形化一级 -- 小猫寻宝

文章目录 小猫寻宝1. 准备工作2. 功能实现3. 设计思路与实现&#xff08;1&#xff09;角色、舞台背景设置a. 角色设置b. 舞台背景设置 &#xff08;2&#xff09;脚本编写a. 角色&#xff1a;Catb. 角色&#xff1a;Crystal 4. 评分标准 小猫寻宝 1. 准备工作 &#xff08;1&…

一个acitvity同时设置多个theme

建立一个values/styles.xml&#xff0c;内容如下 <?xml version"1.0" encoding"utf-8"?> <resources><style name"Theme.Transparent" parent"android:style/Theme.Dialog"><item name"android:windowIsT…

asm

四年过去了&#xff0c;只留下些代码... 1.data segmentdata endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax MOV CX,26 MOV BL,ALOP: MOV DL,BL MOV AH,2 INT 21H ADD BL,1 LOOP LOPexit: mov ah,4cH i…

宜信敏捷数据中台建设实践|分享实录

内容来源&#xff1a;宜信技术学院第2期技术沙龙-线上直播|宜信敏捷数据中台建设实践 分享嘉宾&#xff1a;宜信数据中台平台团队负责人 卢山巍 导读&#xff1a;宜信于2017年推出了一系列大数据开源工具&#xff0c;包括大家熟悉的DBus、Wormhole、Moonbox、Davinci等&#xf…

面向对象预习随笔

Java是纯粹的面向对象的程序设计语言&#xff0c;具有三种基本特征&#xff1a;封装&#xff0c;继承&#xff0c;多态&#xff0c;面向对象具有更好的可用性、可维护性、可扩展性&#xff0c;抽象就是忽略一个主题中与当前目标无关的那些方面&#xff0c;以便更充分的注意与当…

优化方法:原问题和拉格朗日对偶问题(primal-dual)

本文主要讲解有关原问题和拉格朗日对偶问题&#xff0c;以及它们之间的关系&#xff0c;从而引出弱对偶性和强对偶性以及 KKT 条件和 Slater 条件。 原问题 优化问题一般都可以写为下面的形式&#xff1a; min⁡f0(x),x∈Rn\min f_0(x),\quad x\in R^n minf0​(x),x∈Rn s.t.f…

往事如风,往事如烟,岁月如歌

大学四年还有几个月&#xff0c;趁现在和这四年里的一切记忆告别&#xff0c;告别... 除了硬盘里的n多记忆&#xff0c;还有大学里人的同学老师和朋友 这应该就是我大学里全部的记忆了

怎么在CAD编辑工具中对图纸的结构进行管理

当我们收到一张CAD图纸的时候&#xff0c;就需要对这张图纸进行查看。那么&#xff0c;怎么在CAD编辑工具中对图纸的结构进行管理呢&#xff1f;具体要怎么来进行操作呢&#xff1f;那下面本编教程小编就来教教大家&#xff0c;希望对你们有帮助&#xff0c;以下就是具体操作方…