下面我们简单讨论下强化学习中的函数估计问题,这里对于强化学习的基本原理、常见算法以及凸优化的数学基础不作讨论。假设你对强化学习(Reinforcement Learning)有最基本的了解。
- 概述
- 价值函数估计
- 增量式/梯度下降方法
- 批处理方法
- 深度强化学习浅析(DQN)
- Double DQN
- 带有优先回放的Double DQN( Prioritized Replay )
- Dueling DQN
- 非参数化估计方法
- 直接策略搜索
- 无模型的策略搜索
- 随机策略
- REINFORCE
- G(PO)MDP
- TRPO
- Actor-Critic
- 确定性策略
- 基于模型的策略搜索
概述
对于状态空间为连续空间的强化学习问题,我们需要利用函数估计的方法表示各种映射关系。函数估计方法可分为参数估计和非参数估计,其中参数化估计又分为线性参数化估计和非线性参数化估计。本文中我们主要讨论参数化估计。对于基础较薄弱读者,可以参考这篇更基础的文章。
价值函数估计
价值函数估计的过程可以看作是一个监督学习的过程,其中数据和标签对为 (St,Ut) ( S t , U t ) 。训练的目标函数为:
argminθ(q(s,a)−q^(s,a,θ))orargminθ(v(s)−v^(s,θ)) arg min θ ( q ( s , a ) − q ^ ( s , a , θ ) ) or arg min θ ( v ( s ) − v ^ ( s , θ ) )
增量式/梯度下降方法
梯度下降的基本原理可以参考凸优化问题中的无约束规划方法。这里我们要求估计偏差最小,因此采用梯度下降方法:
θt+1=θt+αdt θ t + 1 = θ t + α d t
这里
dt d t 是偏差下降的方向,此处应为
−∇θ(Ut−v^(St,θt)) − ∇ θ ( U t − v ^ ( S t , θ t ) ) 即负梯度方向。代入上式可得:
θt+1=θt+α[Ut−v^(St,θt)]∇θv^(St,θ) θ t + 1 = θ t + α [ U t − v ^ ( S t , θ t ) ] ∇ θ v ^ ( S t , θ )
注意此处
Ut U t 与
θ θ 无关,但情况并非总是这样。如果采用蒙特卡罗方法对实验进行采样,即
Ut=Gt U t = G t 时,上述公式直接成立;但如果采样
TD(0) T D ( 0 ) 方法采样,由于用到了 bootstrapping,即
Ut=Rt+1+γv^(St+1,θ) U t = R t + 1 + γ v ^ ( S t + 1 , θ ) ,
Ut U t 中也包含
θ θ 。 使用上式忽略了这个影响,因此被称为
部分梯度(semi-gradient)法。
下面讨论线性估计问题,即 v^(s,θ)=θTϕ(s) v ^ ( s , θ ) = θ T ϕ ( s ) 。常用的线性基函数类型如下:
- 多项式基函数: (1,s1,s2,s1s2,s21,s22,…) ( 1 , s 1 , s 2 , s 1 s 2 , s 1 2 , s 2 2 , … )
- 傅里叶基函数: ϕi(s)=cos(iπs),s∈[0,1] ϕ i ( s ) = cos ( i π s ) , s ∈ [ 0 , 1 ]
- 径向基函数: ϕi(s)=exp(−∥s−ci∥22σ2i) ϕ i ( s ) = exp ( − ‖ s − c i ‖ 2 2 σ i 2 )
不同的更新公式如下:
- 蒙特卡罗方法: Δθ=α[Gt−θTϕ(s)]ϕ(s) Δ θ = α [ G t − θ T ϕ ( s ) ] ϕ ( s )
- TD(0) T D ( 0 ) 方法: Δθ=α[R+γθTϕ(s′)−θTϕ(s)]ϕ(s) Δ θ = α [ R + γ θ T ϕ ( s ′ ) − θ T ϕ ( s ) ] ϕ ( s )
- 正向视角的 TD(λ) T D ( λ ) 方法: Δθ=α[Gλt−θTϕ(s)]ϕ(s) Δ θ = α [ G t λ − θ T ϕ ( s ) ] ϕ ( s )
- 反向视角的 TD(λ) T D ( λ ) 方法:
δtEtΔθ=Rt+1+γθTϕ(s′)−θTϕ(s)=γλEt−1+ϕ(s)=αδtEt δ t = R t + 1 + γ θ T ϕ ( s ′ ) − θ T ϕ ( s ) E t = γ λ E t − 1 + ϕ ( s ) Δ θ = α δ t E t
关于这些更新方法的具体含义可以参考这篇文章。
批处理方法
批处理方法的计算比较复杂,但是计算效率高。批处理方法是指给定经验数据集 D={(s1,vπ1),(s2,vπ2),…,(sT,vπT)} D = { ( s 1 , v 1 π ) , ( s 2 , v 2 π ) , … , ( s T , v T π ) } ,找到最好的拟合函数 v^(s,θ) v ^ ( s , θ ) 使得 LS(θ)=∑Tt=1(vπt−v^πt(st,θ))2 L S ( θ ) = ∑ t = 1 T ( v t π − v ^ t π ( s t , θ ) ) 2 最小(此处为最小二乘)。此处我们不做详细介绍。
深度强化学习浅析(DQN)
这里介绍的 DQN 就是 DeepMind 发表在 Nature 上的一篇论文:
Human-level Control through Deep Reinforcement Learning
DQN 技术是 Q-Learning 算法的一种变体,具体改变的是以下三个方面:
- DQN 利用深度卷积神经网络估计值函数;
- DQN 利用经验回放进行学习;
- DQN 独立设置了目标网络来单独处理时间差分算法中的 TD 偏差。
由于训练神经网络时,存在的假设是训练数据是独立同分布的,而通过强化学习采集的数据之间总是存在着关联性,易造成神经网络不稳定。经验回放技术可以打破数据间的关联。独立的目标网络使用 θ¯ θ ¯ 而不是 θ θ 来计算 TD T D 偏差,这样做也为了打破关联性。DQN的算法伪代码如下:
- Initialize replay memory D D to capacity N N
- Initialize Q Q -function with ramdom weights θ θ
- Initialize target Q Q -function with weights θ¯=θ θ ¯ = θ
- For episode=1,M e p i s o d e = 1 , M do
- Initalize sequence s1={x1} s 1 = { x 1 } and preprocessed sequence ϕ1=ϕ(s1) ϕ 1 = ϕ ( s 1 )
- For t=1,T t = 1 , T do
- Select action at a t , then observe reward rt r t and image xt+1 x t + 1
- Processed ϕt+1=ϕ(xt+1) ϕ t + 1 = ϕ ( x t + 1 ) and store transition (ϕt,at,rt,ϕt+1) ( ϕ t , a t , r t , ϕ t + 1 ) in D D
- Sample minibatch of transitions (ϕj,aj,rj,ϕj+1) ( ϕ j , a j , r j , ϕ j + 1 ) from D D
- Set yj={rj,rj+γmaxa′Q(ϕj+1,a′,θ¯), if episode terminates at step j+1 otherwise y j = { r j , if episode terminates at step j + 1 r j + γ max a ′ Q ( ϕ j + 1 , a ′ , θ ¯ ) , otherwise
- Perform a gradient descent step on (yj−Q(ϕj,aj,θ)) ( y j − Q ( ϕ j , a j , θ ) ) w.r.t. network parameter θ θ
- Every C C steps reset θ¯=θ θ ¯ = θ
- End for
- End for
其中第5行通过预处理得到状态对应的特征输入。
Double DQN
DQN无法克服 Q-Learning 本身固有的过估计问题,原因是其中的最大化操作。Double Q-Learning 将动作的选择和动作的评估分别用不同的值函数来实现,可以缓解此问题。
在 Double Q-Learning 中,
Yt=Rt+1+γQ(St+1,argmaxaQ(St+1,a,θt),θ′t) Y t = R t + 1 + γ Q ( S t + 1 , arg max a Q ( S t + 1 , a , θ t ) , θ t ′ )
将该思想运动到 DQN 中,得到 Double DQN,其
TD T D 目标为:
YDQNt=Rt+1+γQ(St+1,argmaxaQ(St+1,a,θt),θ¯t) Y t D Q N = R t + 1 + γ Q ( S t + 1 , arg max a Q ( S t + 1 , a , θ t ) , θ ¯ t )
带有优先回放的Double DQN( Prioritized Replay )
这里仅讨论优先回放思想,不给出具体算法。在DQN中,选取训练集合的方法是均匀采样,然而并非所有数据集的效率一致。某些状态的学习效率远比其他状态高。优先回放的接班思想就是赋予学习效率高的状态以更大的采样权重。
那么如何选择采样权重呢?一个选择是 TD T D 偏差 δ δ 。例如:我们设样本 i i 处的 TD T D 偏差为 δ δ , 则该处的采样概率为
Pi=pαi∑kpαk P i = p i α ∑ k p k α
其中
pi=|δi|+ϵ p i = | δ i | + ϵ 或者
pi=1rank(i) p i = 1 r a n k ( i ) 。
|rank(i)| | r a n k ( i ) | 根据
|δi| | δ i | 排序得到。
采用优先回放的概率分布采样时,动作值的估计是一个有偏估计。因为采样分布于动作值函数分布完全不同,为了矫正这个偏差,我们需要乘以一个重要性采样系数 ωi=(1N⋅1Pi)β ω i = ( 1 N ⋅ 1 P i ) β 。
Dueling DQN
Dueling DQN 从网络结构上改进了 DQN。动作值函数可以被分解为状态值函数和优势函数,即:
Qπ(s,a)=Vπ(s)+Aπ(s,a) Q π ( s , a ) = V π ( s ) + A π ( s , a )
这也是为了消除训练数据的关联性,此处不做具体讨论。
非参数化估计方法
除了参数化方法之外,价值函数估计还有非参数化方法。非参数化函数估计指参数的个数和基底形式并非固定,由样本决定的估计方法。例如基于核函数的方法和基于高斯过程的方法。此处不做细致介绍,有兴趣可以参考如下书籍:
李航. 统计学习方法[M]. 清华大学出版社,2012.
Rasmussen C E, Williams C K I. Gaussian Processes for Machine Learning (Adaptive Computation and Machine Learning)[M]. The MIT Press, 2005.
直接策略搜索
基于价值函数的方法往往适用于有限的状态空间集合。策略搜索是将策略参数化,即 πθ(s) π θ ( s ) ,寻找最优的参数 θ θ ,使强化学习目标——累计回报的期望最大。这里不介绍过多细节,有兴趣的读者可以参考这篇更具体的文章。
无模型的策略搜索
随机策略
REINFORCE
随机策略搜索法最典型的算法是 REINFORCE 这里不给出具体算法,只推导基本原理。
我们用 τ τ 表示一组状态-行为序列 s0,u0,…,sH,uH s 0 , u 0 , … , s H , u H ,用符号 R(τ)=∑Ht=0R(st,ut) R ( τ ) = ∑ t = 0 H R ( s t , u t ) 表示轨迹 τ τ 的回报, P(τ,θ) P ( τ , θ ) 表示轨迹 τ τ 出现的概率,此时直接策略搜索的目标可以表示为:
U(θ)=∑τP(τ,θ)R(τ) U ( θ ) = ∑ τ P ( τ , θ ) R ( τ )
此时强化学习的目标是找到最优参数
θ θ 使得
maxθU(θ)=maxθ∑τP(τ,θ)R(τ) max θ U ( θ ) = max θ ∑ τ P ( τ , θ ) R ( τ )
此时搜索问题转化为优化问题,下面我们采用 最速下降法求解(这里其实是上升)。
θt+1=θt+α∇θU(θ) θ t + 1 = θ t + α ∇ θ U ( θ )
下面研究如何求
∇θU(θ) ∇ θ U ( θ ) :
∇θU(θ)=∇θ∑τP(τ,θ)R(τ)=∑τ∇θP(τ,θ)R(τ)=∑τP(τ,θ)∇θP(τ,θ)P(τ,θ)R(τ)=∑τP(τ,θ)∇θlogP(τ,θ)R(τ) ∇ θ U ( θ ) = ∇ θ ∑ τ P ( τ , θ ) R ( τ ) = ∑ τ ∇ θ P ( τ , θ ) R ( τ ) = ∑ τ P ( τ , θ ) ∇ θ P ( τ , θ ) P ( τ , θ ) R ( τ ) = ∑ τ P ( τ , θ ) ∇ θ log P ( τ , θ ) R ( τ )
这样一来求
∇θU(θ) ∇ θ U ( θ ) 变成了估计
∇θlogP(τ,θ)R(τ) ∇ θ log P ( τ , θ ) R ( τ ) 的期望。这可以利用经验平均,即利用
m m 条轨迹的经验计算平均值来估计:
∇θU(θ)≈1m∑i=1m∇θlogP(τi,θ)R(τi) ∇ θ U ( θ ) ≈ 1 m ∑ i = 1 m ∇ θ log P ( τ i , θ ) R ( τ i )
下面再研究如何估计
∇θlogP(τ,θ) ∇ θ log P ( τ , θ ) :
∇θlogP(τ,θ)=∇θlog[∏t=0HP(st+1|st,ut)⋅πθ(ut|st)]=∇θ[∑t=0HlogP(st+1|st,ut)+∑t=0Hlogπθ(ut|st)]=∇θ∑t=0Hlogπθ(ut|st)=∑t=0H∇θlogπθ(ut|st) ∇ θ log P ( τ , θ ) = ∇ θ log [ ∏ t = 0 H P ( s t + 1 | s t , u t ) ⋅ π θ ( u t | s t ) ] = ∇ θ [ ∑ t = 0 H log P ( s t + 1 | s t , u t ) + ∑ t = 0 H log π θ ( u t | s t ) ] = ∇ θ ∑ t = 0 H log π θ ( u t | s t ) = ∑ t = 0 H ∇ θ log π θ ( u t | s t )
到这一步可以看出,似然概率
P P 的梯度变化仅与策略
πθ π θ 有关,与环境本身的动力学模型无关,这个结果被称为
策略梯度定理。因此:
∇θU(θ)≈1m∑i=1m∑t=0H∇θlogπθ(u(i)t|s(i)t)R(τ(i)i) ∇ θ U ( θ ) ≈ 1 m ∑ i = 1 m ∑ t = 0 H ∇ θ log π θ ( u t ( i ) | s t ( i ) ) R ( τ i ( i ) )
这个估计是无偏的,但是方差很大。我们可以在回报中引入常数基线
b b 来减小方差:
∇θU(θ)≈1m∑i=1m∇θlogP(τ(i),θ)(R(τ(i))−b)=1m∑i=1m∑t=0H∇θlogπθ(u(i)t|s(i)t)(R(τ(i)i)−b) ∇ θ U ( θ ) ≈ 1 m ∑ i = 1 m ∇ θ log P ( τ ( i ) , θ ) ( R ( τ ( i ) ) − b ) = 1 m ∑ i = 1 m ∑ t = 0 H ∇ θ log π θ ( u t ( i ) | s t ( i ) ) ( R ( τ i ( i ) ) − b )
两个估计等价,证明很简单,此处从略。
G(PO)MDP
从之前的讨论中可以看出,每个动作 u(i)t u t ( i ) 所对应的 ∇θlogπθ(u(i)t|s(i)t) ∇ θ log π θ ( u t ( i ) | s t ( i ) ) 都乘以相同的轨迹总回报 (R(τ(i)i)−b) ( R ( τ i ( i ) ) − b ) 。然而,当前的动作与过去的回报实际上没有关系。因此,我们可以修改回报函数,有一种方法称为 G(PO)MDP:
∇θU(θ)≈1m∑i=1m∑j=0H−1∑t=0j∇θlogπθ(u(i)t|s(i)t)(rj−bj) ∇ θ U ( θ ) ≈ 1 m ∑ i = 1 m ∑ j = 0 H − 1 ∑ t = 0 j ∇ θ log π θ ( u t ( i ) | s t ( i ) ) ( r j − b j )
TRPO
策略梯度算法的硬伤就是更新步长 α α 的取法问题,当步长不合适时,更新的参数所对应的策略可能是一个更不好的策略。TRPO(Trust Region Policy Optimization)证明解决了此问题,使得当策略更新后,回报函数的值不能更差。TRPO的具体介绍请参考此文。
Actor-Critic
异策略(off-policy)是指行动策略和评估测录不是同一个策略。AC框架是一种实现异策略强化学习的典型框架。
关于Actor-Critic 框架的具体讨论请参考此文。
确定性策略
2014年,Silver 在论文
Deterministic Policy Gradient Algorithm
中首次提出了确定性策略理论。2015年 DeepMind 将该理论与 DQN 结合,在论文
Continuous Control with Deep Reinforcement Learning
中提到了DDPG算法。
确定性策略的公式如下:
a=μθ(s) a = μ θ ( s )
和随机策略不同,相同的策略参数,在状态为
s s 时,动作是唯一确定的。确定性策略的优点在于
需要采样的数据少,算法效率高。随机策略的梯度计算公式:
∇θJ(πθ)=Es∼ρπ,a∼πθ[∇θlogπθ(a|s)Qπ(s,a)] ∇ θ J ( π θ ) = E s ∼ ρ π , a ∼ π θ [ ∇ θ log π θ ( a | s ) Q π ( s , a ) ]
此式表明,策略梯度公式是关于状态和动作的期望,在求期望时,需要对状态分布和动作分布求积分,这就要求在状态空间和动作空间采集大量的样本,这样求均值才能近似期望。然而,确定性策略的动作是确定的,因此不需要再动作空间采样积分,所以确定性策略需要的样本数据更小。确定性策略梯度如下:
∇θJ(μθ)=Es∼ρμ[∇θμθ(s)∇aQμ(s,a)|a=μθ(s)] ∇ θ J ( μ θ ) = E s ∼ ρ μ [ ∇ θ μ θ ( s ) ∇ a Q μ ( s , a ) | a = μ θ ( s ) ]
DPG 与 DDPG
言归正传,确定性策略动作是确定的,无法探索环境,那么如何学习呢?答案就是利用异策略方法,这里采用AC框架。AC算法包含两个同等地位的元素,一个是 Actor 即行动策略,另一个是 Critic 即评估策略,这里指的是利用函数逼近的方法估计值函数。Actor 方法用来调整 θ θ 值;Critic 方法逼近值函数 Qω(s,a)≈Qπ(s,a) Q ω ( s , a ) ≈ Q π ( s , a ) ,其中 ω ω 为待逼近的参数,可用 TD 学习的方法评估值函数。
异策略随机策略梯度为
∇θJ(πθ)=Es∼ρπ,a∼πθ[πθ(a|s)βθ(a|s)∇θlogπθ(a|s)Qπ(s,a)] ∇ θ J ( π θ ) = E s ∼ ρ π , a ∼ π θ [ π θ ( a | s ) β θ ( a | s ) ∇ θ log π θ ( a | s ) Q π ( s , a ) ]
采样策略为
β β 。
异策略确定性策略梯度为:
∇θJβ(μθ)=Es∼ρβ[∇θμθ(s)∇aQμ(s,a)|a=μθ(s)] ∇ θ J β ( μ θ ) = E s ∼ ρ β [ ∇ θ μ θ ( s ) ∇ a Q μ ( s , a ) | a = μ θ ( s ) ]
对比上述两式不难发现,确定性策略梯度求解少了重要性权重。这是因为重要性采样是用简单的概率分布去估计复杂的概率分布,而确定性策略的动作为确定值而不是概率分布;此外,确定性策略的值函数评估用的是 Q-Learning 方法,即 TD(0)。有了上式,确定性异策略AC算法的更新过程如下:
δtωt+1θt+1=rt+γQω(st+1,μθ(st+1))−Qω(st,at)=ωt+αωδt∇ωQω(st,at)=θt+αθ∇θμθ(st)∇aQω(st,at)|a=μθ(s) δ t = r t + γ Q ω ( s t + 1 , μ θ ( s t + 1 ) ) − Q ω ( s t , a t ) ω t + 1 = ω t + α ω δ t ∇ ω Q ω ( s t , a t ) θ t + 1 = θ t + α θ ∇ θ μ θ ( s t ) ∇ a Q ω ( s t , a t ) | a = μ θ ( s )
以上介绍的是 Deterministic Policy Gradient 方法,简称 DPG。
有了 DPG,我们再看 DDPG,即Deep Determinstic Policy Gradient。这里所谓的深度是指利用神经网络估计行为值函数 Qω(st,at) Q ω ( s t , a t ) 和确定策略 μθ(s) μ θ ( s ) 。如前介绍DQN时所说,这里用了两个技巧:经验回放和独立的目标网络。此处不再重复。这里需要修改的是对 ω ω 和 θ θ 利用独立的网络进行更新。DDPG的更新公式为:
δtωt+1θt+1θ−ω−=rt+γQω−(st+1,μθ−(st+1))−Qω(st,at)=ωt+αωδt∇ωQω(st,at)=θt+αθ∇θμθ(st)∇aQω(st,at)|a=μθ(s)=τθ+(1−τ)θ−=τω+(1−τ)ω− δ t = r t + γ Q ω − ( s t + 1 , μ θ − ( s t + 1 ) ) − Q ω ( s t , a t ) ω t + 1 = ω t + α ω δ t ∇ ω Q ω ( s t , a t ) θ t + 1 = θ t + α θ ∇ θ μ θ ( s t ) ∇ a Q ω ( s t , a t ) | a = μ θ ( s ) θ − = τ θ + ( 1 − τ ) θ − ω − = τ ω + ( 1 − τ ) ω −
基于模型的策略搜索
无模型强化学习算法有很多优点,比如无需环境建模。但是因为没有模型,无模型方法必须不断试探环境,效率低下。解决该问题的方法是利用模型探索。例如有了模型之后,可以利用基于模型的优化方法得到好的数据,并稳定训练策略网络;而且,有了模型我们可以充分利用示教(Demonstration)数据学习。
GPS
引导策略搜索方法(Guided Policy Search)最早见于2015年 Sergey Levine 的博士论文
Levine S, “Motor skill learning with local trajectory methods,” PhD thesis, Stanford University, 2014.
GPS将策略搜索分为两步:控制相和监督相。控制相通过轨迹最优、传统控制器或随机最优等方法产生好的数据;监督相利用产生的数据进行监督学习。
关于GPS的具体讨论详见此文。
PILCO
基于模型的强化学习方法最大的问题是模型误差。针对此类问题,业界提出了 PILCO (Probabilistic Inference for Learning Control)算法。它把模型误差纳入考虑的范围。
关于PILCO的具体实现方法详见此文。