深度学习-14.深度强化学习:近端策略优化
Deep Learning - Lecture 14 Deep Reinforcement Learning: Proximal Policy Optimisation
- 简介
- 策略梯度方法和动作 - 价值方法的对比
- 策略梯度方法(Policy gradient methods)
- 演员 - 评论家(Actor-critic)方法
- 近端策略优化
- 信赖域策略优化算法(Trust region policy optimization,TRPO)
- 信赖域策略优化(TRPO)里的重要性采样技巧(Importance sampling trick)
- 近端策略优化(PPO)的目标函数
- 近端策略优化(PPO)目标函数中的裁剪(Clipping)机制
- 近端策略优化(PPO)算法
- 软件中的近端策略优化 (以Matlab为例)
- 评论家(Critic)网络
- 强化学习中演员(Actor)网络
- 使用近端策略优化(PPO)算法在Matlab中对倒立摆(CartPole)问题进行强化学习训练
- 总结
- 引用
本节目标:
- 解释策略梯度方法,
- 解释演员-评论家(演员-评判家)方法,
- 解释并实现近端策略优化
简介
上一节的深度Q学习,解决了连续状态空间,离散动作空间的问题。
现在我们希望能够解决具有连续动作空间的强化学习问题,这时我们通常会使用策略梯度方法。
- 左侧游戏图片:具有离散控制动作的强化学习(3种动作:向左、向右、开火)
- 右侧的无人机:具有连续控制动作的强化学习(连续动作空间:主旋翼桨距、尾桨桨距)
策略梯度方法和动作 - 价值方法的对比
- 间接方法(基于动作价值函数建模):通过深度网络(Deep Network)对最优动作价值函数进行建模,输入状态s,输出不同动作的价值估计值 q ^ ( s , a i ; θ ) \hat{q}(s, a_i; \theta) q^(s,ai;θ)。最优策略 π ∗ ( s ) \pi_*(s) π∗(s)通过选取使 q ^ ( s , a ; θ ) \hat{q}(s, a; \theta) q^(s,a;θ)最大化的动作得到,即 π ∗ ( s ) = arg max a q ^ ( s , a ; θ ) \pi_*(s) = \arg \max_{a} \hat{q}(s, a; \theta) π∗(s)=argmaxaq^(s,a;θ)。这种方法的优点是适用于离散动作空间。
- 直接方法(基于策略建模):利用深度网络直接对最优策略进行建模,输入状态s,输出在该状态下采取不同动作的概率分布 π ∗ ( a ∣ s ) \pi_*(a|s) π∗(a∣s)。该方法的优势在于对离散和连续动作空间都适用。
回顾
为例方便回顾,这里再贴一下强化学习的基本框架,智能体(Agent)根据当前状态
S
t
S_t
St,依据策略
π
\pi
π采取动作
A
t
A_t
At,环境(Environment)根据智能体的动作给出下一个状态
S
t
+
1
S_{t+1}
St+1和奖励
R
t
+
1
R_{t+1}
Rt+1,智能体再根据这些反馈通过强化学习算法更新策略。
策略梯度方法(Policy gradient methods)
- 策略建模:在策略梯度方法中,直接对策略进行建模,该方法适用于离散和连续动作空间,以及随机和确定性策略。可以使用由参数 θ \theta θ 化的函数来建模随机策略 π \pi π或确定性策略 μ \mu μ,表示为 π ( a ∣ s ; θ ) \pi(a|s; \theta) π(a∣s;θ),并且这个函数可以是一个深度网络。
- 问题框架:一般的问题框架是定义一个性能函数 J ( θ ) J(\theta) J(θ),通常基于未来奖励 R k R_k Rk的总和,目标是相对于 θ \theta θ最大化该函数。例如, J ( θ ) = v π ( s 0 ) = E π [ ∑ k = 0 ∞ γ k R k + 1 ∣ S 0 = s ] J(\theta) = v_{\pi}(s_0)=E_{\pi}\left[\sum_{k = 0}^{\infty}\gamma^{k}R_{k + 1}|S_0 = s\right] J(θ)=vπ(s0)=Eπ[k=0∑∞γkRk+1∣S0=s]其中 v π ( s 0 ) v_{\pi}(s_0) vπ(s0)是初始状态 s 0 s_0 s0的价值, E π E_{\pi} Eπ是基于策略 π \pi π的期望, γ \gamma γ是折扣因子。
- 最大化问题与参数更新:最大化问题表示为 θ ∗ = arg max θ J ( θ ) \theta_*=\arg\max_{\theta}J(\theta) θ∗=argθmaxJ(θ)即找到使 J ( θ ) J(\theta) J(θ)最大的参数 θ ∗ \theta_* θ∗。可以使用梯度上升法(注意是最大化而非最小化)来估计策略参数,参数更新公式为 θ ← θ + α ∇ θ J ( θ ) \theta\leftarrow\theta+\alpha\nabla_{\theta}J(\theta) θ←θ+α∇θJ(θ)其中 α \alpha α是学习率, ∇ θ J ( θ ) \nabla_{\theta}J(\theta) ∇θJ(θ)是性能函数关于 θ \theta θ的梯度。
- 最后的关键问题:需要找到一个易于处理的性能函数梯度 ∇ θ J ( θ ) \nabla_{\theta}J(\theta) ∇θJ(θ)的表达式,这是策略梯度方法实施中的关键挑战。
演员 - 评论家(Actor-critic)方法
策略梯度通常可以写成价值函数的一个函数。演员 - 评论家方法同时学习“演员”(即策略)和价值函数(即评论家)。
如上图,智能体(Agent)包含“Actor”和“Critic”两部分。“Actor”基于当前状态 S t S_t St,根据策略 π \pi π选择动作 A t A_t At并执行。环境(Environment)根据动作产生下一个状态 S t + 1 S_{t + 1} St+1和奖励 R t + 1 R_{t + 1} Rt+1。“Critic”根据这些反馈来评估策略的好坏,并用于更新“Actor”的策略。
事实上,存在多种演员 - 评论家方法,但其共性在于它们学习:
- 一个策略(演员部分)
- 一种形式的价值函数(评论家部分)
- 大致如下图:“Actor”接收状态
s
s
s作为输入,通过模型输出策略
π
(
s
;
θ
)
\pi(s;\theta)
π(s;θ);“Critic”接收状态
s
s
s和动作
a
a
a作为输入,通过模型输出价值函数
q
π
(
s
,
a
;
w
)
q_{\pi}(s, a; w)
qπ(s,a;w) 。
近端策略优化
近端策略优化(PPO)由 OpenAI 开发,如今被广泛应用,比如在 ChatGPT 中。它相对易于实现和调试。
OpenAI传送门
近端策略优化(PPO)模型
近端策略优化能够处理连续或离散的动作空间,因此随机策略模型需要相应地进行调整。
- 离散动作空间模型:当处理离散动作空间时,采用类别分布(categorical distribution)。策略表示为
π
(
a
∣
s
)
p
i
=
P
(
A
t
=
i
)
\pi(a|s)\\p_i = P(A_t = i)
π(a∣s)pi=P(At=i)表示在状态
s
s
s下采取动作
i
i
i的概率。
模型结构包含全连接层(Fully Connected)、修正线性单元激活函数层(ReLU),最后通过Softmax层输出每个动作的概率 p i p_i pi 。 - 连续动作空间模型:在处理连续动作空间时,采用高斯分布(Gaussian distribution),动作
a
a
a服从均值为
μ
\mu
μ、方差为
σ
2
\sigma^2
σ2的高斯分布,即
a
∼
N
(
μ
,
σ
2
)
a \sim N(\mu, \sigma^2)
a∼N(μ,σ2)。
模型同样以全连接层和ReLU层开始,之后分为两个分支,一个分支通过tanh函数输出均值 μ \mu μ,另一个分支通过Softplus函数输出方差 σ 2 \sigma^2 σ2 。
信赖域策略优化算法(Trust region policy optimization,TRPO)
近端策略优化(PPO)基于信赖域策略优化(TRPO)拓展而来。因此我们先介绍信赖域策略优化算法。
-
**信赖域策略优化(TRPO)**使用复杂的约束优化方法,在更新策略时通过限制新旧策略间的差异(如用KL散度衡量),来确保策略优化过程稳定。但TRPO计算复杂度高,实现也较为困难。
-
**近端策略优化(PPO)**在TRPO的基础上进行改进,采用更简单的方式来近似和处理策略更新的约束,使得算法更容易实现和调试,同时也保持了较好的性能,因而得到了更广泛的应用。
TRPO的目标函数为 J ( θ ) = E a ∼ π θ [ a π ( s , a ) ] = E a ∼ π θ o l d [ π ( a t ∣ s t ; θ ) π ( a t ∣ s t ; θ o l d ) a π ( s , a ) ] J(\theta) = E_{a\sim\pi_{\theta}}[a_{\pi}(s, a)] = E_{a\sim\pi_{\theta_{old}}}\left[\frac{\pi(a_t|s_t;\theta)}{\pi(a_t|s_t;\theta_{old})}a_{\pi}(s, a)\right] J(θ)=Ea∼πθ[aπ(s,a)]=Ea∼πθold[π(at∣st;θold)π(at∣st;θ)aπ(s,a)]其中, E a ∼ π θ E_{a\sim\pi_{\theta}} Ea∼πθ表示从新策略 π θ \pi_{\theta} πθ中采样动作 a a a, E a ∼ π θ o l d E_{a\sim\pi_{\theta_{old}}} Ea∼πθold表示从旧策略 π θ o l d \pi_{\theta_{old}} πθold中采样动作 a a a,运用了重要性采样技巧。
另外,算法有约束条件 E [ KL [ π θ o l d ∣ ∣ π θ ] ] ≤ δ E[\text{KL}[\pi_{\theta_{old}}||\pi_{\theta}]] \leq \delta E[KL[πθold∣∣πθ]]≤δ通过限制新旧策略之间的KL散度(相对熵),确保新策略不会与旧策略差异过大,从而避免优化过程中的不稳定性。
- 相关概念解释:
- “优势函数” a π a_{\pi} aπ指采取动作 a a a后遵循策略 π \pi π的优势,公式为 a π ( s , a ) = q π ( s , a ) − v π ( s ) a_{\pi}(s, a) = q_{\pi}(s, a) - v_{\pi}(s) aπ(s,a)=qπ(s,a)−vπ(s)。
- 重要性采样允许从另一个分布生成的样本中评估某个分布的期望,这里是从旧策略 π θ o l d \pi_{\theta_{old}} πθold生成样本。
- KL散度(Kullback Leibler divergence)即 K L [ P ∣ ∣ Q ] KL[P||Q] KL[P∣∣Q],用于衡量概率分布 P P P与 Q Q Q之间的距离。
信赖域策略优化(TRPO)里的重要性采样技巧(Importance sampling trick)
重要性采样使得我们能够通过一个相关的分布,来获取从某个难以采样的分布的期望值。
在强化学习中,直接从新策略 π θ \pi_{\theta} πθ中进行采样有时比较困难或效率不高。而重要性采样技巧允许我们从另一个分布(这里是旧策略 π θ o l d \pi_{\theta_{old}} πθold)中进行采样,然后通过对采样结果进行加权(权重为 π ( a ∣ s ; θ ) π ( a ∣ s ; θ o l d ) \frac{\pi(a|s;\theta)}{\pi(a|s;\theta_{old})} π(a∣s;θold)π(a∣s;θ)),来近似计算基于新策略的期望。这样一来,我们可以利用旧策略已经收集到的数据或者相对容易进行采样的特性,对新策略进行评估和优化,提高了算法的实用性和效率。
详细过程:
- 补充知识:离散随机变量 X X X的函数的期望值 : E [ f ( X ) ] = ∑ x p ( x ) f ( x ) E[f(X)]=\sum_x p(x)f(x) E[f(X)]=x∑p(x)f(x)
- 第一步:基于新策略
π
θ
\pi_{\theta}
πθ 计算优势函数的期望
E
a
∼
π
θ
[
a
π
(
s
,
a
)
]
E_{a\sim\pi_{\theta}}[a_{\pi}(s, a)]
Ea∼πθ[aπ(s,a)]:
E a ∼ π θ [ a π ( s , a ) ] = ∑ a π ( a ∣ s ; θ ) a π ( s , a ) E_{a\sim\pi_{\theta}}[a_{\pi}(s,a)]=\sum_{a}\pi(a|s;\theta)a_{\pi}(s,a) Ea∼πθ[aπ(s,a)]=a∑π(a∣s;θ)aπ(s,a)这里 π ( a ∣ s ; θ ) \pi(a|s;\theta) π(a∣s;θ) 是在状态 s s s 下 ,新策略 π θ \pi_{\theta} πθ 采取动作 a a a 的概率, a π ( s , a ) a_{\pi}(s, a) aπ(s,a) 是动作 a a a 在状态 s s s 下基于策略 π \pi π 的优势函数 ,对所有可能的动作 a a a 按照其发生概率加权求和,就得到了该期望。 - 第二步:乘以
π
(
a
∣
s
;
θ
o
l
d
)
π
(
a
∣
s
;
θ
o
l
d
)
\frac{\pi(a|s;\theta_{old})}{\pi(a|s;\theta_{old})}
π(a∣s;θold)π(a∣s;θold)(其值为1):
∑ a π ( a ∣ s ; θ ) a π ( s , a ) = ∑ a π ( a ∣ s ; θ ) π ( a ∣ s ; θ o l d ) π ( a ∣ s ; θ o l d ) a π ( s , a ) \sum_{a}\pi(a|s;\theta)a_{\pi}(s,a)=\sum_{a}\pi(a|s;\theta)\frac{\pi(a|s;\theta_{old})}{\pi(a|s;\theta_{old})}a_{\pi}(s,a) a∑π(a∣s;θ)aπ(s,a)=a∑π(a∣s;θ)π(a∣s;θold)π(a∣s;θold)aπ(s,a)这一步的目的是引入旧策略 π θ o l d \pi_{\theta_{old}} πθold 的概率 ,为后续利用旧策略采样做准备,因为乘以的这个分式值为1,所以不会改变原式的值。 - 第三步:交换乘法顺序:
∑ a π ( a ∣ s ; θ ) π ( a ∣ s ; θ o l d ) π ( a ∣ s ; θ o l d ) a π ( s , a ) = ∑ a π ( a ∣ s ; θ o l d ) π ( a ∣ s ; θ ) π ( a ∣ s ; θ o l d ) a π ( s , a ) \sum_{a}\pi(a|s;\theta)\frac{\pi(a|s;\theta_{old})}{\pi(a|s;\theta_{old})}a_{\pi}(s,a)=\sum_{a}\pi(a|s;\theta_{old})\frac{\pi(a|s;\theta)}{\pi(a|s;\theta_{old})}a_{\pi}(s,a) a∑π(a∣s;θ)π(a∣s;θold)π(a∣s;θold)aπ(s,a)=a∑π(a∣s;θold)π(a∣s;θold)π(a∣s;θ)aπ(s,a)
此时可以发现,式子已经变成了基于旧策略 π θ o l d \pi_{\theta_{old}} πθold 的形式,其中 π ( a ∣ s ; θ o l d ) \pi(a|s;\theta_{old}) π(a∣s;θold) 是旧策略在状态 s s s 下采取动作 a a a 的概率 。 - 第四步:根据期望的表示形式,得到:
∑ a π ( a ∣ s ; θ o l d ) π ( a ∣ s ; θ ) π ( a ∣ s ; θ o l d ) a π ( s , a ) = E a ∼ π θ o l d [ π ( a ∣ s ; θ ) π ( a ∣ s ; θ o l d ) a π ( s , a ) ] \sum_{a}\pi(a|s;\theta_{old})\frac{\pi(a|s;\theta)}{\pi(a|s;\theta_{old})}a_{\pi}(s,a)=E_{a\sim\pi_{\theta_{old}}}\left[\frac{\pi(a|s;\theta)}{\pi(a|s;\theta_{old})}a_{\pi}(s,a)\right] a∑π(a∣s;θold)π(a∣s;θold)π(a∣s;θ)aπ(s,a)=Ea∼πθold[π(a∣s;θold)π(a∣s;θ)aπ(s,a)]这里就完成了从基于新策略计算期望转换为基于旧策略计算期望的过程,从而可以利用旧策略进行采样来近似计算原本基于新策略的期望。
近端策略优化(PPO)的目标函数
PPO中需要最大化的性能函数是基于信赖域策略优化(TRPO)的目标函数进行改进的,采用裁剪(clipping)的方式替代了TRPO中的约束条件。
目标函数对比
-
TRPO目标函数:
- 公式为 J ( θ ) = E a ∼ π θ [ a π ( s , a ) ] = E a ∼ π θ o l d [ π ( a ∣ s ; θ ) π ( a ∣ s ; θ o l d ) a π ( s , a ) ] = E a ∼ π θ o l d [ r t ( θ ) a π ( s , a ) ] J(\theta) = E_{a\sim\pi_{\theta}}[a_{\pi}(s, a)] = E_{a\sim\pi_{\theta_{old}}}\left[\frac{\pi(a|s;\theta)}{\pi(a|s;\theta_{old})}a_{\pi}(s, a)\right]= E_{a\sim\pi_{\theta_{old}}}[r_{t}(\theta)a_{\pi}(s, a)] J(θ)=Ea∼πθ[aπ(s,a)]=Ea∼πθold[π(a∣s;θold)π(a∣s;θ)aπ(s,a)]=Ea∼πθold[rt(θ)aπ(s,a)],其中 r t ( θ ) = π ( a ∣ s ; θ ) π ( a ∣ s ; θ o l d ) r_{t}(\theta) = \frac{\pi(a|s;\theta)}{\pi(a|s;\theta_{old})} rt(θ)=π(a∣s;θold)π(a∣s;θ)。表示从旧策略 π θ o l d \pi_{\theta_{old}} πθold中采样动作 a a a,通过新旧策略的概率比值 r t ( θ ) r_{t}(\theta) rt(θ)对优势函数 a π ( s , a ) a_{\pi}(s, a) aπ(s,a)加权求期望。并且该优化受限于 E [ KL [ π θ o l d ∣ ∣ π θ ] ] ≤ δ E[\text{KL}[\pi_{\theta_{old}}||\pi_{\theta}]] \leq \delta E[KL[πθold∣∣πθ]]≤δ,即通过限制新旧策略间的KL散度来保证策略更新的稳定性。
-
PPO目标函数:
- 公式为 J ( θ ) = E a ∼ π θ o l d [ min ( r t ( θ ) a ^ π ( S t , A t ) , clip ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) a ^ π ( S t , A t ) ) ] J(\theta) = E_{a\sim\pi_{\theta_{old}}}\left[\min(r_{t}(\theta)\hat{a}_{\pi}(S_{t}, A_{t}), \text{clip}(r_{t}(\theta), 1 - \epsilon, 1 + \epsilon)\hat{a}_{\pi}(S_{t}, A_{t}))\right] J(θ)=Ea∼πθold[min(rt(θ)a^π(St,At),clip(rt(θ),1−ϵ,1+ϵ)a^π(St,At))] 。通过 clip \text{clip} clip函数对 r t ( θ ) r_{t}(\theta) rt(θ)进行裁剪,将其限制在 [ 1 − ϵ , 1 + ϵ ] [1 - \epsilon, 1 + \epsilon] [1−ϵ,1+ϵ]范围内,然后与优势函数 a ^ π ( S t , A t ) \hat{a}_{\pi}(S_{t}, A_{t}) a^π(St,At)相乘,再取最小值进行期望计算。
-
进步:如果在PPO中使用没有约束或裁剪的目标函数 J ( θ ) J(\theta) J(θ),会导致策略更新幅度过大,进而引起不稳定。PPO的裁剪函数避免了TRPO中的约束条件,同时还能保持策略更新过程的稳定性。
近端策略优化(PPO)目标函数中的裁剪(Clipping)机制
PPO目标函数中的裁剪机制,能避免策略出现过大变化,从而稳定学习过程。
目标函数公式:
J
(
θ
)
=
E
[
min
(
r
t
(
θ
)
a
^
π
(
S
t
,
A
t
)
,
clip
(
r
t
(
θ
)
,
1
−
ϵ
,
1
+
ϵ
)
a
^
π
(
S
t
,
A
t
)
)
]
J(\boldsymbol{\theta}) = E[\min(r_{t}(\boldsymbol{\theta})\hat{a}_{\pi}(S_{t}, A_{t}), \text{clip}(r_{t}(\boldsymbol{\theta}), 1 - \epsilon, 1 + \epsilon)\hat{a}_{\pi}(S_{t}, A_{t}))]
J(θ)=E[min(rt(θ)a^π(St,At),clip(rt(θ),1−ϵ,1+ϵ)a^π(St,At))] 其中
r
t
(
θ
)
=
π
(
a
∣
s
;
θ
)
π
(
a
∣
s
;
θ
o
l
d
)
r_{t}(\boldsymbol{\theta})=\frac{\pi(a|s;\boldsymbol{\theta})}{\pi(a|s;\boldsymbol{\theta}_{old})}
rt(θ)=π(a∣s;θold)π(a∣s;θ),是新、旧策略选择动作
a
a
a的概率比;
a
^
π
(
S
t
,
A
t
)
\hat{a}_{\pi}(S_{t}, A_{t})
a^π(St,At)是优势函数;
clip
(
r
t
(
θ
)
,
1
−
ϵ
,
1
+
ϵ
)
\text{clip}(r_{t}(\boldsymbol{\theta}), 1 - \epsilon, 1 + \epsilon)
clip(rt(θ),1−ϵ,1+ϵ)表示把
r
t
(
θ
)
r_{t}(\boldsymbol{\theta})
rt(θ)限制在
[
1
−
ϵ
,
1
+
ϵ
]
[1 - \epsilon, 1 + \epsilon]
[1−ϵ,1+ϵ]区间。
当新旧策略选择动作概率相同时, r t ( θ ) = 1 r_{t}(\boldsymbol{\theta}) = 1 rt(θ)=1 ;新策略选动作概率比旧策略大时, r t ( θ ) > 1 r_{t}(\boldsymbol{\theta})> 1 rt(θ)>1,反之则 r t ( θ ) < 1 r_{t}(\boldsymbol{\theta})< 1 rt(θ)<1 。
- 正优势情况( a ^ π ( S t , A t ) > 0 \hat{a}_{\pi}(S_{t}, A_{t})>0 a^π(St,At)>0):横坐标为 r t ( θ ) r_{t}(\boldsymbol{\theta}) rt(θ),纵坐标为 J ( θ ) J(\boldsymbol{\theta}) J(θ) 。 r t ( θ ) r_{t}(\boldsymbol{\theta}) rt(θ)在 0 0 0到 1 + ϵ 1 + \epsilon 1+ϵ间, J ( θ ) J(\boldsymbol{\theta}) J(θ)随 r t ( θ ) r_{t}(\boldsymbol{\theta}) rt(θ)增大上升; r t ( θ ) r_{t}(\boldsymbol{\theta}) rt(θ)大于 1 + ϵ 1 + \epsilon 1+ϵ时, J ( θ ) J(\boldsymbol{\theta}) J(θ)保持水平,限制了 r t ( θ ) r_{t}(\boldsymbol{\theta}) rt(θ)过大对目标函数的影响,红圈标记 r t ( θ ) = 1 r_{t}(\boldsymbol{\theta}) = 1 rt(θ)=1的起始点。
- 负优势情况( a ^ π ( S t , A t ) < 0 \hat{a}_{\pi}(S_{t}, A_{t})<0 a^π(St,At)<0):横坐标是 r t ( θ ) r_{t}(\boldsymbol{\theta}) rt(θ),纵坐标是 J ( θ ) J(\boldsymbol{\theta}) J(θ) 。 r t ( θ ) r_{t}(\boldsymbol{\theta}) rt(θ)大于 1 − ϵ 1 - \epsilon 1−ϵ时, J ( θ ) J(\boldsymbol{\theta}) J(θ)随 r t ( θ ) r_{t}(\boldsymbol{\theta}) rt(θ)减小下降; r t ( θ ) r_{t}(\boldsymbol{\theta}) rt(θ)小于 1 − ϵ 1 - \epsilon 1−ϵ时, J ( θ ) J(\boldsymbol{\theta}) J(θ)保持水平,限制 r t ( θ ) r_{t}(\boldsymbol{\theta}) rt(θ)过小的影响,红圈同样标记 r t ( θ ) = 1 r_{t}(\boldsymbol{\theta}) = 1 rt(θ)=1的起始点。
近端策略优化(PPO)算法
初始化
初始化所有算法参数以及演员-评论家(actor-critic)网络,分别为策略网络
π
(
a
∣
s
;
θ
1
)
\pi(a|s; \boldsymbol{\theta}_1)
π(a∣s;θ1) 和价值网络
v
^
π
(
S
t
;
ϕ
1
)
\hat{v}_{\pi}(S_t; \boldsymbol{\phi}_1)
v^π(St;ϕ1) 。其中
θ
\boldsymbol{\theta}
θ 是策略网络的参数,
ϕ
\boldsymbol{\phi}
ϕ 是价值网络的参数。
循环训练
对于每个训练回合
n
n
n (从
1
1
1 到
M
M
M ):
- 保存旧参数:将当前演员(策略网络)的参数 θ n \boldsymbol{\theta}_n θn 保存为旧参数 θ o l d \boldsymbol{\theta}_{old} θold 。
- 执行旧策略并存储经验:使用旧策略 π ( a ∣ s ; θ o l d ) \pi(a|s; \boldsymbol{\theta}_{old}) π(a∣s;θold) 在环境中运行 T T T 个时间步,记录每个时间步的状态 S t S_t St 、动作 A t A_t At 和奖励 R t + 1 R_{t + 1} Rt+1 。
- 计算优势函数:对于每个时间步
t
t
t ,使用公式
a ^ π ( S t , A t ) = [ R t + 1 + γ R t + 2 + ⋯ + γ T − t R T + 1 + γ v ^ π ( S T ; ϕ n ) ] − v ^ π ( S t ; ϕ n ) \hat{a}_{\pi}(S_t, A_t)=[R_{t + 1}+\gamma R_{t + 2}+\cdots+\gamma^{T - t}R_{T + 1}+\gamma \hat{v}_{\pi}(S_T; \boldsymbol{\phi}_n)]-\hat{v}_{\pi}(S_t; \boldsymbol{\phi}_n) a^π(St,At)=[Rt+1+γRt+2+⋯+γT−tRT+1+γv^π(ST;ϕn)]−v^π(St;ϕn) 计算优势函数,其中 γ \gamma γ 是折扣因子。 - 更新演员(策略网络):通过最大化裁剪后的策略目标函数 J ( θ ) J(\boldsymbol{\theta}) J(θ) 来更新策略网络的参数 θ \boldsymbol{\theta} θ 。目标函数通过限制策略更新的幅度,避免更新过大,以稳定学习过程。
- 更新评论家(价值网络):通过最小化均方误差来更新价值网络的参数 ϕ \boldsymbol{\phi} ϕ 。目标值 y t = R t + 1 + γ v ^ π ( S t + 1 ; ϕ n ) y_t = R_{t + 1}+\gamma \hat{v}_{\pi}(S_{t + 1}; \boldsymbol{\phi}_n) yt=Rt+1+γv^π(St+1;ϕn) ,均方误差为 ∑ t = 0 T ( y t − v ^ π ( S t ; ϕ ) ) 2 \sum_{t = 0}^{T}(y_t-\hat{v}_{\pi}(S_t; \boldsymbol{\phi}))^2 ∑t=0T(yt−v^π(St;ϕ))2 。
循环上述步骤,直到达到预定的训练回合数 M M M ,从而使策略不断优化,以在环境中获得更好的长期奖励。
软件中的近端策略优化 (以Matlab为例)
使用PPO算法来解决一个标准的控制问题——倒立摆问题。
倒立摆问题对于线性控制器来说是一个难题,因此是测试深度网络性能的一个很好的例子。
如上是倒立摆的示意图:
- Pole(摆杆):质量为 m m m,长度为 l l l。
- Cart(小车):质量为 M M M,受到一个输入力 F F F的作用。
- 摆杆与垂直方向的夹角为 θ \theta θ 。
- 系统的状态向量 x t x_t xt的表达式,包含四个元素,分别是小车的位置 x t x_t xt、小车的速度 x ˙ t \dot{x}_t x˙t、摆杆的角度 θ t \theta_t θt和摆杆的角速度 θ ˙ t \dot{\theta}_t θ˙t 。
用于设置和获取环境信息的Matlab代码如下
% load predefined environment
env = rlPredefinedEnv("CartPole-Discrete");
% get observation and specification info
stateInfo = getObservationInfo(env); % state info
stateDimension = stateInfo.Dimension; % state dimension
numStates = stateDimension(1); % number of states
actionInfo = getActionInfo(env); % action space info
numActions = length(actionInfo.Elements); % number of actions
env = rlPredefinedEnv("CartPole-Discrete");
:加载预定义的“CartPole-Discrete”环境,这是一个离散动作空间的倒立摆环境。stateInfo = getObservationInfo(env);
:获取环境的观测信息。stateDimension = stateInfo.Dimension;
:获取状态空间的维度。numStates = stateDimension(1);
:得到状态的数量。actionInfo = getActionInfo(env);
:获取动作空间的信息。numActions = length(actionInfo.Elements);
:得到动作的数量。
评论家(Critic)网络
评论家网络定义了价值函数——在本示例里,价值函数由一个简单的单隐藏层网络建模,该网络输出实数值 。
上图评论家网络的结构示意图-:
- 输入为状态(State s s s)。
- 首先进入全连接层(Fully Connected),对输入状态进行处理。
- 然后经过修正线性单元(ReLU)激活函数层,引入非线性。
- 最后再经过一个全连接层(Fully Connected),输出价值(Value v v v)。
Matlab代码
% Create the network to be used as approximator in the critic.
criticNetwork = [
featureInputLayer(numStates,'Normalization','none','Name','state')
fullyConnectedLayer(10)
reluLayer
fullyConnectedLayer(1,'Name','CriticFC')];
% Set options for the critic.
criticOpts = rlRepresentationOptions('LearnRate',8e-3,'GradientThreshold',1);
% Create the critic.
critic = rlValueRepresentation(criticNetwork,stateInfo,'Observation',{'state'},criticOpts)
- 创建网络结构:使用
criticNetwork = [...]
语句定义网络结构。先通过featureInputLayer(numStates,'Normalization','none','Name','state')
创建输入层,numStates
为状态数量;接着是fullyConnectedLayer(10)
创建一个有10个神经元的全连接隐藏层;然后reluLayer
添加ReLU激活函数层;最后fullyConnectedLayer(1,'Name','CriticFC')
创建输出层,输出一个实数值。 - 设置评论家网络选项:使用
criticOpts = rlRepresentationOptions('LearnRate',8e-3,'GradientThreshold',1);
设置评论家网络的学习率为0.008,梯度阈值为1。 - 创建评论家:通过
critic = rlValueRepresentation(criticNetwork,stateInfo,'Observation',{'state'},criticOpts);
基于前面定义的网络结构、状态信息和选项,创建评论家对象。
强化学习中演员(Actor)网络
演员网络定义了策略,在本例子中,动作空间是离散的,随机策略会输出执行某个动作的概率。
如上是演员网络的结构示意图:
- 输入为状态(State s s s)。
- 首先进入全连接层(Fully Connected),对输入状态进行初步处理。
- 然后经过修正线性单元(ReLU)激活函数层,引入非线性因素,增强网络的表达能力。
- 接着再经过一个全连接层(Fully Connected)。
- 最后通过Softmax层,输出各个动作的概率(Action probability p i p_i pi) 。
Matlab代码
% Create the network to be used as approximator in the actor.
actorNetwork = [
featureInputLayer(numStates,'Normalization','none','Name','state')
fullyConnectedLayer(10)
reluLayer
fullyConnectedLayer(numActions,'Name','action')
softmaxLayer(Name="actionProb")];
% Create the actor
actor = rlDiscreteCategoricalActor(actorNetwork,stateInfo,actionInfo,...
'Observation',{'state'});
- 创建网络结构:使用
actorNetwork = [...]
语句定义网络结构。先通过featureInputLayer(numStates,'Normalization','none','Name','state')
创建输入层,numStates
为状态数量;接着是fullyConnectedLayer(10)
创建一个有10个神经元的全连接隐藏层;然后reluLayer
添加ReLU激活函数层;再通过fullyConnectedLayer(numActions,'Name','action')
创建一个输出维度为动作数量的全连接层;最后softmaxLayer(Name="actionProb")
添加Softmax层,将输出转换为概率分布。 - 创建演员:使用
actor = rlDiscreteCategoricalActor(actorNetwork,stateInfo,actionInfo,...'Observation',{'state'});
基于前面定义的网络结构、状态信息和动作空间信息,创建一个适用于离散动作空间的演员对象。
使用近端策略优化(PPO)算法在Matlab中对倒立摆(CartPole)问题进行强化学习训练
- 训练结果图表
上方的是一个折线图,表示使用rlPPOAgent(Matlab中实现PPO算法的代理)在离散动作空间的CartPole任务中每回合(Episode)的奖励情况。横坐标为“Episode Number”(回合数),纵坐标为“Episode Reward”(回合奖励)。从图中可以看到,随着训练回合数的增加,奖励总体呈上升趋势,说明智能体在学习过程中表现越来越好。 - 倒立摆示意图
下方是一个倒立摆的简单示意图,展示了倒立摆的位置范围,绿色虚线表示边界,用于表示训练过程中倒立摆的状态界限等信息。
Matlab代码
% define the agent options
agentOpts = rlPPOAgentOptions(...
'ExperienceHorizon',1024, ...
'DiscountFactor',0.95, ...
'MiniBatchSize',128);
agent = rlPPOAgent(actor,critic,agentOpts);
% specify reinforcement learning training options
trainOpts = rlTrainingOptions(...
'MaxEpisodes', 200, ...
'MaxStepsPerEpisode', 1000, ...
'Verbose', false, ...
'Plots','training-progress',...
'StopTrainingCriteria','AverageReward',...
'StopTrainingValue',300);
% train the agent
trainingStats = train(agent,env,trainOpts);
- 定义代理选项:
agentOpts = rlPPOAgentOptions(...)
用于设置PPO代理的参数,如'ExperienceHorizon'
(经验范围,设为1024)、'DiscountFactor'
(折扣因子,设为0.95)、'MiniBatchSize'
(小批量大小,设为128)。然后agent = rlPPOAgent(actor,critic,agentOpts);
基于之前定义的演员(actor)网络、评论家(critic)网络和这些选项创建PPO代理。 - 指定强化学习训练选项:
trainOpts = rlTrainingOptions(...)
设置训练选项,包括'MaxEpisodes'
(最大回合数,设为200)、'MaxStepsPerEpisode'
(每回合最大步数,设为1000)、'Verbose'
(是否输出详细信息,设为false)、'Plots'
(是否绘制训练进度图,设为'training-progress'
)、'StopTrainingCriteria'
(停止训练的标准,设为'AverageReward'
)和'StopTrainingValue'
(停止训练的奖励值,设为300)。 - 训练代理:
trainingStats = train(agent,env,trainOpts);
使用前面定义的代理、环境和训练选项进行训练,并将训练统计信息存储在trainingStats
中。
总结
- 策略梯度方法直接学习一个参数化的策略函数。
- 演员 - 评论家方法根据以下内容来表示策略梯度:
- 一个演员(即策略);
- 一个评论家(某种形式的价值函数),并且同时学习这两者。
- 近端策略优化(PPO)是一种基于策略的演员 - 评论家算法,也是当前最流行的深度强化学习算法之一。
引用
-(离散控制动作的强化学习)Mnih, et al. (2013). Playing Atari with deep reinforcement learning.
Advances in Neural Information Processing Systems. arXiv:1312.5602.
-(连续控制动作)Abbeel, P., Coates, A., Quigley, M., & Ng, A. Y. (2007). An application of reinforcement learning to aerobatic helicopter flight. Advances in Neural Information Processing Systems, 19, 1.
-(信赖域策略优化算法)Schulman, J., Levine, S., Abbeel, P., Jordan, M., & Moritz, P. (2015). Trust region policy optimization. In International Conference on Machine Learning (pp. 1889-1897).
-(近端策略优化(PPO)的目标函数)Schulman, J., Wolski, F., Dhariwal, P., Radford, A., & Klimov, O. (2017). Proximal policy optimization algorithms. arXiv preprint arXiv:1707.06347.
-(近端策略优化(PPO)算法)Schulman, J., Wolski, F., Dhariwal, P., Radford, A., & Klimov, O. (2017). Proximal policy optimization algorithms. arXivpreprint arXiv:1707.06347.