Reinforcement Learning
一、马尔可夫决策过程
马尔可夫决策过程(markov decision process, MDP)是强化学习的基石。随机过程中有马尔可夫性质,即下一步的状态仅与当前状态有关而与之前所有状态无关:
P
(
s
t
+
1
∣
s
t
)
=
P
(
s
t
+
1
∣
s
t
,
s
t
−
1
,
.
.
.
,
s
1
)
P(s_{t+1}|s_t)=P(s_{t+1}|s_t,s_{t-1},...,s_1)
P(st+1∣st)=P(st+1∣st,st−1,...,s1)
基于马尔可夫性质有马尔可夫决策过程,MDP有五个组成部分
<
S
,
A
,
P
,
R
,
γ
>
<S,A,P,R,\gamma>
<S,A,P,R,γ>。
S
S
S为状态集合;
A
A
A为行动集合;
P
P
P为状态转移矩阵;
R
R
R为奖励收益;
γ
\gamma
γ为折合因子。
- 状态转移矩阵probability: P s s ′ a = P ( s t + 1 = s ′ ∣ s t = s , a t = a ) P_{ss'}^a=P(s_{t+1}=s'|s_t=s,a_t=a) Pss′a=P(st+1=s′∣st=s,at=a);表示看见s状态并采取a行动出现s’的概率(概率分布)
- 奖励函数reward functoin: R s a = E ( r t ∣ s t = s , a t = a ) R_s^a=E(r_t|s_t=s,a_t=a) Rsa=E(rt∣st=s,at=a);奖励是概率分布的将该分布的期望作为奖励函数(固定值)
原定义 s t s_t st时刻采取 a t a_t at行动后得到的奖励为 r t + 1 r_{t+1} rt+1,这特么有点反直觉吧?哪个二比定义的?下面统一贴合直觉。
- 策略policy: π ( a ∣ s ) = P ( a t = a ∣ s t = s ) \pi(a|s)=P(a_t=a|s_t=s) π(a∣s)=P(at=a∣st=s);看到状态而采取的行动(概率分布)
- V function(state value function) V π ( s ) V^{\pi}(s) Vπ(s):状态值函数。input是state,给定策略 π \pi π和初始状态 s s s。用以评估当前策略下状态的长期价值(discounted cumulative reward)。
- Q function(state-action value function) Q π ( s , a ) Q^{\pi}(s,a) Qπ(s,a):动作值函数。input是state和action的pair,给定策略 π \pi π、初始状态 s s s和动作 a a a。用以评估当前策略和状态下,采取动作 a a a的长期价值。(actor π \pi π不变)
本质上V和Q函数都是奖励函数,Q比V多了强制性抉择下一步的行为,所以Q和V都是discounted cumulative reward,但他俩都是期望。
二、贝尔曼方程
贝尔曼方程(bellman equation)非常重要,分为bellman expectation equation和bellman optimal equation。
- Bellman expectation equation:反映当前状态方程与下一状态方程的关系
- V π ( s ) = E π ( r t + γ V π ( s t + 1 ) ∣ s t = s ) V_{\pi}(s)=E_{\pi}(r_t+{\gamma}V_{\pi(s_{t+1})}|s_t=s) Vπ(s)=Eπ(rt+γVπ(st+1)∣st=s)
- Q π ( s , a ) = E π ( r t + γ Q π ( s t + 1 , a t + 1 ) ∣ s t = s , a t = a ) Q_{\pi}(s,a)=E_{\pi}(r_t+{\gamma}Q_{\pi}(s_{t+1},a_{t+1})|s_t=s,a_t=a) Qπ(s,a)=Eπ(rt+γQπ(st+1,at+1)∣st=s,at=a)
贝尔曼方程不仅能够反映相邻状态方程的关系,还能够反映出V和Q之间的关系。下式2带1得3,2带下1得4
- V π ( s ) = ∑ a ∈ A π ( a ∣ s ) Q π ( s , a ) V_{\pi}(s)=\sum_{a∈A}\pi(a|s)Q_{\pi}(s,a) Vπ(s)=∑a∈Aπ(a∣s)Qπ(s,a)
- Q π ( s , a ) = r s a + γ ∑ s ′ ∈ S P s s ′ a V π ( s ′ ) Q_{\pi}(s,a)=r_s^a+{\gamma}\sum_{s'∈S}P_{ss'}^{a}V_{\pi}(s') Qπ(s,a)=rsa+γ∑s′∈SPss′aVπ(s′)
- V π ( s ) = ∑ a ∈ A π ( a ∣ s ) ( r s a + γ ∑ s ′ ∈ S P s s ′ a V π ( s ′ ) ) V_{\pi}(s)=\sum_{a∈A}\pi(a|s)(r_s^a+{\gamma}{\sum}_{s'∈S}P_{ss'}^aV_{\pi}(s')) Vπ(s)=∑a∈Aπ(a∣s)(rsa+γ∑s′∈SPss′aVπ(s′))
- Q π ( s , a ) = r s a + γ ∑ s ′ ∈ S P s s ′ a ∑ a ′ ∈ A π ( a ′ ∣ s ′ ) Q π ( s ′ , a ′ ) Q_{\pi}(s,a)=r_s^a+{\gamma}\sum_{s'∈S}P_{ss'}^{a}{\sum}_{a'∈A}\pi(a'|s')Q_{\pi}(s',a') Qπ(s,a)=rsa+γ∑s′∈SPss′a∑a′∈Aπ(a′∣s′)Qπ(s′,a′)
- Bellman optimal equation: 确定policy π \pi π使得return最大,此时每个s和a不再具有随机性
- V ∗ ( s ) = m a x a Q ∗ ( s , a ) V^*(s)=max_aQ^*(s,a) V∗(s)=maxaQ∗(s,a)
- Q ∗ ( s , a ) = r s a + γ ∑ s ′ ∈ S P s s ′ a V ∗ ( s ′ ) Q^*(s,a)=r_s^a+{\gamma}{\sum_{s'∈S}}P_{ss'}^aV^*(s') Q∗(s,a)=rsa+γ∑s′∈SPss′aV∗(s′)
- V ∗ ( s ) = m a x a ( r s a + γ ∑ s ′ ∈ S P s s ′ a V ∗ ( s ′ ) ) V^*(s)=max_a(r_s^a+{\gamma}{\sum_{s'∈S}}P_{ss'}^aV^*(s')) V∗(s)=maxa(rsa+γ∑s′∈SPss′aV∗(s′))
- Q ∗ ( s , a ) = r s a + γ ∑ s ′ ∈ S P s s ′ a m a x a Q ∗ ( s ′ , a ′ ) Q^*(s,a)=r_s^a+{\gamma}{\sum_{s'∈S}}P_{ss'}^amax_aQ^*(s',a') Q∗(s,a)=rsa+γ∑s′∈SPss′amaxaQ∗(s′,a′)
以上关系均可用决策树进行推导,V直接带入Q得到与下一V的关系,Q带入下一时刻state与action的V得到与下一Q的关系。
Deep Reinforcement Learning
本系列文为作者本人在学习过程中笔记,为本人复盘学习用,主观色彩浓厚,且仅适合对DRL有一定了解的人阅读!如与您的见解有出入请在评论区骂我。参考资料主要为李宏毅强化学习课程
把RL里面的function替换为neural network就是DRL。DL都是supervised learning的训练方法,也就是给network一个输入并告诉它输出应该是什么,即训练资料就是data和label。RL面对的问题,其需要解决的问题连人类都拿不准它的输出或结果,而这需要经过不断与环境互动才可能得到。
重要概念:
- state/observation/function input
- action/function output
- agent/actor/function
- policy for maximizing return(可以理解为trajectory,也可以理解为一个固定参数的actor,因为一个有确定policy的actor在一次episode中的trajectory和最后的reward是既定的,或存在一个可忽略不计的误差)
- return/total reward/cumulative reward…
- value funcion:某个状态的长期价值,即 G G G的数学期望( G G G定义为考虑长期价值后当前state的reward,即accumulated reward,是一个分布)
- V function(state value function) V π ( s ) V^{\pi}(s) Vπ(s):状态值函数。input是state,给定策略 π \pi π和初始状态 s s s。用以评估当前策略下状态的长期价值(discounted cumulative reward)。
- Q function(state-action value function) Q π ( s , a ) Q^{\pi}(s,a) Qπ(s,a):动作值函数。input是state和action的pair,给定策略 π \pi π、初始状态 s s s和动作 a a a。用以评估当前策略和状态下,采取动作 a a a的长期价值。(actor π \pi π不变)
文章目录
一、概述
1.1 基本框架
(1) Actor
(2) Environment
(3) Behaviour:Observation(function input);Action(function output);Reward
(4) Purpose:find a policy maximizing total reward Action = f(Observation)
1.2 训练步骤
- function with unkowen
- policy network----actor----neural network(等价关系)
- input:the observation of machine represented as a vector or a matrix
- output:each action correspond to a neuron in output layer
- define “loss”
- episode
- total reward(return)(maximize)
- optimization
- reward need the output of envionment and actor respectly
- question
- sample exists random
- environment and rewaed are black box rather network, and exists random
拿GAN类比:Actor就像是Generator,Envionment和Reward就像是Discriminator,训练的目的都是为了让return或者是Discriminator输出的value越大越好。但在GAN中,Generator和Discriminator是两个连在一起的neural network,而RL中的Environment和reward是两个既定规则,是码者所不知道的黑盒子,没有办法去用一般gradient descent的方法去调整参数。但是还是可以像前面三个步骤一样去训练RL,但在optimization步骤中会采取不同的方法。
二、Policy Gradient
- 首先需要思考如何让actor接受到某一个画面作为输入后输出一个action:可以想象成一个分类问题,actor的输出相当于对所有可能的action赋予概率,将最大概率的哪一个action作为真正的输出。更为具体地,假设需要让actor在接受s输入后,需要输出a’,但实际输出是a,再计算a和a’的cross-entropy,根据此定义一个loss function,此时Optimization policy就是找到Actor中的参数使得loss function最小,也就是实际和理想差异最小。上述过程是我们希望action是我们想要的行为,如果想要不要采取这个行为,那么将loss function加负号即可。上述思想借由训练classifier的思想,本质还是一个supervised learning,但接下来就是重点的不同之处。
- 经过上面步骤后,可以得到一个训练集{{ s i , a j s_i,a_j si,aj},±1},表示在 s i s_i si作为输入的情况下,输出是 a j a_j aj是我们想要的(+1)或者是我们不想要的(-1)。还可以更进一步,每一个行为并不只有想不想要二元分类,而是有一个对应的分数,来表示行为好的程度或者坏的程度。那么有了这些咨询,可以在上一步基础上定义一个loss function: L = ∑ A n e n L=\sum{A_ne_n} L=∑Anen。那么上一步问题就被定义为找到Actor中的参数使得该loss function最小。接下来的问题有两点,一是要怎么定出这个a,二是怎么产生s和a的pair
2.1 定义 G G G训练目标
- Version 0(
G
1
=
r
1
G_1=r_1
G1=r1)
- 定义:设计一个随机的初始actor去跟env互动得到训练资料。通常会作多个episode收集足够资料,再对每一个action进行评价。将每一个action的reward直接作为其评价结果。得到的最终数据集用来训练
- 问题:短视的版本。因为每一个行为都会关联接下来的所有行为,并非独立;此外,实际情况会需要reward delay,也就是需要牺牲短期利益而获取长期高额利益
- Version 1(
G
1
=
r
1
+
r
2
+
.
.
.
+
r
N
G_1=r_1+r_2+...+r_N
G1=r1+r2+...+rN)
- 定义:评价不再是只取决于当前,而是考虑之后的所有reward加起来作为当前action的评价,那么这种评价被称为cumulative reward
- 问题:如果一次episode非常长,可能在最后kill the game的action的reward不应该归功于当前的action(简单来说就是当前的步骤可能对于最后赢得游戏或比赛没有太大的意义,或者当前的步骤对于最后一步的实现概率很低)
- Version 2(
G
1
=
r
1
+
γ
r
2
+
γ
2
r
3
+
.
.
.
+
γ
N
−
1
r
N
G_1=r_1+γr_2+γ^2r_3+...+γ^{N-1}r_N
G1=r1+γr2+γ2r3+...+γN−1rN)
- 定义:在Version 1的基础上,设置一个γ,cumulative reward就是关于 γ \gamma γ的多项式,距离当前action的reward越远, γ \gamma γ次数递增( γ \gamma γ<1)即discounted cumulative reward(简单来说就是距离当前action越远,之后的action的影响就越小)
- 问题:许多RL都是在评价上做文章,即如何定义评价
- Version 3(
G
1
′
=
G
1
−
b
G_1'=G_1-b
G1′=G1−b)
- 定义:标准化定义好坏。最简单的就是设定一个baseline,让所有的评价都减去这个baseline,呈现让较小的评价为负数,较大的为正数,从而以正负定好坏。那么接下来就是去考虑如何设定baseline
- Version 3.5(
A
t
=
G
t
′
−
V
θ
(
s
t
)
A_t=G'_t-V^θ(s_t)
At=Gt′−Vθ(st))(Critic应用,从这个版本开始就是AC方法)
- 定义:将actor-critic中得到的value function作为baseline。其中 G t ′ G'_t Gt′表示当前 s t s_t st下采用 a t a_t at后到episode结束的一个cumulative reward。 V θ ( s t ) V^θ(s_t) Vθ(st)表示看到当前 s t s_t st后最终估计出的cumulative reward的期望。
- 问题:cumulative reward应该是一个期望(action是一个概率分布)。也就是 G t ′ G'_t Gt′项应该是个期望,具体地,就是采取 a t a_t at看到 s t + 1 s_{t+1} st+1最终可能地cumulative reward的期望,即 V θ ( s t + 1 ) V^θ(s_{t+1}) Vθ(st+1)。
- Version 4(
A
t
=
r
t
+
γ
V
θ
(
s
t
+
1
)
−
V
θ
(
s
t
)
A_t=r_t+{\gamma}V^θ(s_{t+1})-V^θ(s_t)
At=rt+γVθ(st+1)−Vθ(st))
- 定义:将下一步的discounted cumulative reward计算期望与当前的作差再加上当前action的reward
- 该版本即:Advantage Actor-Critic
2.2 实际算法
- initialize actor network parameters θ 0 \theta^0 θ0
- for training iteration
i
=
1
i = 1
i=1 to
T
T
T
- using actor θ i − 1 \theta^{i-1} θi−1 to interact with env
- obtain data { s 1 , a 1 s_1, a_1 s1,a1}, { s 2 , a 2 s_2, a_2 s2,a2}, …, { s N , a N s_N, a_N sN,aN}
- compute
A
1
A_1
A1,
A
2
A_2
A2, …,
A
N
A_N
AN
- defined by sum of subsequents rewards
- add discounted return
- normalization
- compute loss L L L
- θ i ⬅ θ i − 1 − η ▿ L \theta^i⬅\theta^{i-1}-\eta ▿L θi⬅θi−1−η▿L
具体细节于第四章详细阐述
与深度学习不同的是,强化学习的收集资料是在循环内的,也就是不断的去用输出结果当作收集资料,然后训练、更新一次参数,再回到重新收集资料依此循环。因此强化学习非常花费时间
为什么不把收集来的资料对模型一次性训练更新完呢?因为收集到的资料可能只对下一次更新的参数更有意义,从而需要不断收集资料对参数更新,也就是on-policy的方法。那么为了提高资料效率,使得收集一次可以更新多次,就有了off-policy的方法。(后接)
2.3 求解最优策略
动态规划法(dynamic programming methods, DP)
V
(
S
t
)
←
E
π
[
R
t
+
1
+
γ
V
(
S
t
+
1
)
]
=
∑
a
π
(
a
∣
S
t
)
∑
s
′
,
r
p
(
s
′
,
r
∣
S
t
,
a
)
[
r
+
γ
V
(
s
′
)
]
V(S_t)←E_{\pi}[R_{t+1}+{\gamma}V(S_{t+1})]=\sum_{a}\pi(a|S_t)\sum_{s',r}p(s',r|S_t,a)[r+{\gamma}V(s')]
V(St)←Eπ[Rt+1+γV(St+1)]=a∑π(a∣St)s′,r∑p(s′,r∣St,a)[r+γV(s′)]
DP计算值函数利用到了下一步状态处的所有值函数(期望),即用后继状态的值函数估计当前值函数,其中后继状态是用模型
p
(
s
′
,
r
∣
S
t
,
a
)
p(s',r|S_t,a)
p(s′,r∣St,a)计算得到的。因此,DP方法就是存储每个状态的值函数Q表,根据Q表通过迭代方法得到最佳策略。存储Q表后利用后续状态值函数估计当前值函数,实现单步更新,一轮过后Q表也完成一次更迭,提升学习效率。
优势:提前得到Q表后,不需再于环境交互,直接通过迭代算法得到最佳策略
劣势:实际应用中,状态转移概率和值函数很难得到
蒙特卡罗法(monte carlo methods, MC)
V
(
S
t
)
←
V
(
S
t
)
+
α
(
G
t
−
V
(
S
t
)
)
V(S_t)←V(S_t)+\alpha(G_t-V(S_t))
V(St)←V(St)+α(Gt−V(St))
MC方法通过采样的方法来估计状态的期望值函数,更新方法就是当前估测值函数加上学习率与估计偏差的积,也就是让
G
t
G_t
Gt越接近
V
(
S
t
)
V(S_t)
V(St)越好。MC方法其实就是在算一个回归问题
优势:不需要知道状态转移概率,通过经验(采样并不断试错)评估期望值函数。只要采样次数足够多,保证每个可能的状态-动作都能采样得到,就能最大程度逼近期望
劣势:需要不断试错评估期望值函数,所以学习效率较低
时间差分法(temporal difference, TD)
V
(
S
t
)
←
V
(
S
t
)
+
α
(
r
t
+
γ
V
(
S
t
+
1
)
−
V
(
S
t
)
)
V(S_t)←V(S_t)+\alpha(r_{t}+{\gamma}V(S_{t+1})-V(S_t))
V(St)←V(St)+α(rt+γV(St+1)−V(St))
TD方法不需要使用状态转移函数的模型,同时不需要执行到终态得到累积回报,而是根据discounted cumulative reward的特点差分处理。MC方法要比TD方法方差大,即更不稳定,因为回归目的是要与
G
t
G_t
Gt越接近越好,而
G
t
G_t
Gt是所有total reward,其中的每个reward都相当于是一个个的变量,那么最后
G
t
G_t
Gt随机性很高最终导致回归方差较大。而TD的变量只有当前reward,因此随机性小即回归方差较小。TD的问题在于value function的估计不见得会很准(在某些sparse sample中)
2.4 算法概念
强化学习的目标就是找到一个policy π \pi π最大化未来累积奖励。方法类型有两种分类方式:model-based和model-free以及value-based和policy-based
model-based/model-free
model-based基于模型的方法是让actor学习一种模型,这里的模型指的是在环境状态转移概率
P
P
P以及采取action后的奖励函数
R
R
R进行建模,然后利用模型做出动态规划得到最佳策略,例如上述DP方法。
model-free则不需对环境进行建模,通常情况下对环境统计出模型的情况也很少。方法是对特定状态下执行特定动作能获得未来累积奖励进行估计,例如上述MC和TD方法(即不需要先学一个概率转移模型)
所以判断一个RL算法是model-base/free的方法就是判断其知否对状态转移概率以及奖励进行建模
value-based/policy-based
value-based分为on-policy和off-policy,两者主要区别为是否采用了旧样本进行学习。经典的on-policy方法为SARSA;经典的off-policy方法为Q-learning
- SARSA(state-action-reward-state’-action’): Q ( S , A ) = Q ( S , A ) + α ( R + γ Q ( S ′ , A ′ ) − Q ( S , A ) ) Q(S,A)=Q(S,A)+\alpha(R+{\gamma}Q(S',A')-Q(S,A)) Q(S,A)=Q(S,A)+α(R+γQ(S′,A′)−Q(S,A))
基于 ϵ \epsilon ϵ贪婪法对当前状 态S选择动作A,进入下一状态S’并得到即时回报R,在新状态下S’再基于 ϵ \epsilon ϵ贪婪发选择下一动作A’,更新价值函数,如此循环迭代直到收敛
- Q-learning: Q ( S , A ) = Q ( S , A ) + α ( R + γ m a x a Q ( S ′ , a ) − Q ( S , A ) ) Q(S,A)=Q(S,A)+\alpha(R+{\gamma}max_aQ(S',a)-Q(S,A)) Q(S,A)=Q(S,A)+α(R+γmaxaQ(S′,a)−Q(S,A))
基于 ϵ \epsilon ϵ贪婪法对当前状态S选择动作A,进入下一个状态S’并得到即时回报R,使用贪婪法选择A‘来更新价值函数(SARSA使用 ϵ \epsilon ϵ贪婪法选择A’更新价值函数)
三、Actor-Critic
3.1 基本概念
Critic——Value function V θ ( s ) V^{\theta}(s) Vθ(s):给定actor θ \theta θ,估计其最终产生的discounted cumulated reward(实际数值需要当前episode结束计算得知)
训练方法
- MC:将给定的actor去跟环境互动得到输入为某个state时最终的的 G ′ G' G′。训练资料为(state , G ′ G' G′)。将state作为function的输入,目的是让输出值 V θ ( s ) V^{\theta}(s) Vθ(s)越接近 G ′ G' G′越好
- TD:训练资料为( s t , a t , r t , s t + 1 s_t,a_t,r_t,s_{t+1} st,at,rt,st+1)。两个相邻state分别作为两个function的输入,根据discounted cumulative reward的性质,训练目的是是让 V θ ( s t ) − γ V θ ( s t + 1 ) V^{\theta}(s_t)-{\gamma}V^{\theta}(s_{t+1}) Vθ(st)−γVθ(st+1)越接近 r t r_t rt越好。TD相较于MC方法在较长episode时更为有效且稳定,即TD的方差较小,但TD需要训练两个function。
3.2 基本应用
V θ ( s ) V^{\theta}(s) Vθ(s)作为normalization(baseline)即advantage actor-critic。
Actor和Critic都是神经网络,它们的输入都是state,区别在于Actor需要输出action,而Critic需要输出scalar(estimated return)。那么在一般应用中可以考虑将两者的network的前几层共用进行训练,比如state为图像数据的时候,采用CNN进行处理。
在RL中更为牛逼的Critic应用,就是直接用Critic就可以决定采取什么样的action,也就是Q learning/DQN。DQN有非常多的变形。其中经典的综述类文章为Rainbow,尝试了各种DQN中的变形并尽可能融合练成更为性能更牛掰的变形即Rainbow。
七种:DQN + DDQN + Prioritized DDQN + Dueling DQN + A3C + Distributional DQN + Noisy DQN = Rainbow
3.3 Another Critic:Q function
V function是估计看到某个state后最终得到的cumulated reward的期望。
Q function是估计看到某个state后强制采取某个action后最终得到的cumulated reward的期望。Q function有两种写法,一是输入为state和action的pair,输出就是scalar;二是输入为state,输出是不同action下的scalar。即一个是强制采取action给出scalar,一个是输入state给出所有可能action的scalar,后者仅在discrete情形下可取。虽然表面上Q function旨在评估action的好坏,但只有Q function也可以作RL,即Q learning。
3.4 Q Learning
- initialize policy π 0 \pi^0 π0
- for k = 1,2,3,… do
- actor interacts with the env
- learning Q π ( s , a ) Q^{\pi}(s,a) Qπ(s,a) with TD or MC
- find a new policy π k \pi^k πk than π k − 1 \pi^{k-1} πk−1 and update actor
- end for
其中的关键在于:只要已知Q function和policy
π
\pi
π,就可以保证找到一个新的policy
π
′
\pi'
π′一定会比
π
\pi
π要好(对于同一个state而言使用
π
′
\pi'
π′得到的V function大于等于使用
π
\pi
π得到的)。因此一直循环下去收敛能找到很好的Q function:
π
′
(
s
)
=
a
r
g
m
a
x
a
Q
π
(
s
,
a
)
\pi'(s)=argmax_aQ^{\pi}(s,a)
π′(s)=argmaxaQπ(s,a)
已知Q function,得到在该state下使得Q function最大的action是什么。但实际上这个等式只起到指明变换方向的作用,并且要解一个argmax的问题,如果action是连续空间的就会比较麻烦。证明:
π
′
(
s
)
=
a
r
g
m
a
x
a
Q
π
(
s
,
a
)
,
V
π
′
(
s
)
≥
V
π
(
s
)
f
o
r
a
l
l
s
t
a
t
e
s
\pi'(s)=argmax_aQ^{\pi}(s,a),V^{\pi'}(s)≥V^{\pi}(s)~for~all~state~s
π′(s)=argmaxaQπ(s,a),Vπ′(s)≥Vπ(s) for all state s
V π ( s ) = Q π ( s , π ( s ) ) ≤ m a x a Q π ( s , a ) = Q π ( s , π ′ ( s ) ) V^{\pi}(s)=Q^{\pi}(s,\pi(s))≤max_aQ^{\pi}(s,a)=Q^{\pi}(s,\pi'(s)) Vπ(s)=Qπ(s,π(s))≤maxaQπ(s,a)=Qπ(s,π′(s))
由此得知在看见state的情况下,按照policy
π
\pi
π指示一直更新最终得到的V function一定小于等于仅下一步按照policy
π
′
\pi'
π′更新而后按照policy
π
\pi
π更新最终得到的Q function。并且:
V
π
(
s
)
≤
Q
π
(
s
,
π
′
(
s
)
)
≤
.
.
.
.
.
.
≤
V
π
′
(
s
)
V^{\pi}(s)≤Q^{\pi}(s,\pi'(s))≤......≤V^{\pi'}(s)
Vπ(s)≤Qπ(s,π′(s))≤......≤Vπ′(s)
因为
Q
π
(
s
,
π
′
(
s
)
)
Q^{\pi}(s,\pi'(s))
Qπ(s,π′(s))只有下一个action fllow
π
′
\pi'
π′,所以后续如果每步都follow,那最后得到的reward就一定会更大。
3.5 Tips for Q learning
- Target network
TD的思想,一个是用来训练的
Q
π
(
s
t
,
a
t
)
Q^{\pi}(s_t,a_t)
Qπ(st,at),一个是Target network
Q
π
(
s
t
+
1
,
a
t
+
1
)
Q^{\pi}(s_{t+1},a_{t+1})
Qπ(st+1,at+1)。Target network跟训练的DQN之间的差应该是
(
s
t
,
a
t
)
(s_t,a_t)
(st,at)产生的reward
r
t
r_t
rt,也就是训练的目标,训练完后将DQN的参数复制到Target network,再以此循环。
采取这个方法的原因在于,因为DQN的输出是分布,不能固定,但前后的reward是固定的value,因而采用Target network得到fixed value作update。在实作中,会train好几次再复制一次参数。
- Exploration
actor采取行为的时候存在随机性,如果随机性不够,那么actor可能就没办法做出各种各样的action,也没有办法知道这些action的reward是什么样的,从而就一直保持某一个state,导致训练不起来,因此actor采取的action是一个概率集合,从中sample出一个。
保持一种随机性、探索性,action其实是一种分布,训练就是从其中sample出一些action来去得到Q function。有时候可能得到当前state可能有一个最大的value的action a1,那么接下来所有的训练中,遇到该state就会一直采用a1而不去尝试别的action,可能别的action最后得到的Q会更好。exploration最为经典的是epsilon greedy,即
ϵ
\epsilon
ϵ贪婪法。
Epsilon Greedy:采取的action会有
1
−
ϵ
1-\epsilon
1−ϵ的概率跟原先一样按照使Q值最大的选取,有
ϵ
\epsilon
ϵ的概率随机取action。
ϵ
\epsilon
ϵ会随着训练次数增多而逐渐变小,也就是越来越确定当前的action就是最好的action。除此之外还有Boltzmann Exploration等。
- Replay Buffer
将训练的pair存到一个Buffer块中,Buffer里面存的包含多种不同policy下的experience,最后sample Buffer中的data来训练Q function。
但Buffer里面有不同policy的experience,我们要训练的是当前policy的Q function,这有没有关系呢?没有关系。。。。。。
以上三种tip是DRL通用trick。学习DRL要明白很多tricks都是混来混去的,俗称炼丹
-
Typical Q learning Algorithm
- initialize Q function Q Q Q,target Q function Q ^ = Q \hat{Q}=Q Q^=Q(target network)
- in each episode
- for each time step t
- given state s t s_t st, take action a t a_t at based on Q Q Q (epsilon greedy)
- obtain reward r t r_t rt, and reach new state s t + 1 s_{t+1} st+1
- store ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st,at,rt,st+1) into buffer
- sample ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st,at,rt,st+1) from buffer (usually a batch)
- target y = r i + m a x a Q ^ ( s i + 1 , a ) y=r_i+max_a\hat{Q}(s_{i+1},a) y=ri+maxaQ^(si+1,a)
- update the parameters of Q Q Q to make Q ( s i , a i ) Q(s_i,a_i) Q(si,ai) close to y ( r e g r e s s i o n ) y(regression) y(regression)
- every C steps reset Q ^ = Q \hat{Q}=Q Q^=Q(reset until update several times )
- for each time step t
- end for
但相比于policy gradient based的方法,Q learning是比较稳的,在没有PPO之前,很难用policy gradient based的方法去训练。他比较稳的原因在于,只要能够估计出一个Q function,就能够找到一个比较好的policy,而估计Q function是比较容易的,因为这是一个回归问题(见下文具体算法)。但Q learning最大的问题是难以处理连续性问题,其更倾向于处理离散性问题。其原因在于需要找到一个action使得Q值最大,如果这个action是有限的、离散的那还可以穷举出来。但如果action是连续的,那就难以穷举。
将Q learning与神经网络结合就是DQN,李宏毅课程在讲的Q learning貌似就是DQN,因为所述直接用value function去近似这个问题。在网络上的一个说法是DQN相比于Q learning就是利用神经网络将Q表格变换为了Q网络(其实Q learning是model-based而DQN是model-free?)
3.6 Training tips for DQN
-
Double DQN(DDQN)
Q value估测出来的值总是偏大。因为在上述typical的循环中的target,要得到的是最大的 Q ^ ( s i + 1 , a ) \hat{Q}(s_{i+1},a) Q^(si+1,a),但neural network总是存在误差,也就是得到的Q value总是被高估的。
解决方法就是采用double DQN,即选择action的Q function跟算Q value的Q function不是同一个: y = r i + Q ′ ( s t + 1 , a r g m a x a Q ^ ( s i + 1 , a ) ) y=r_i+Q'(s_{t+1},argmax_a\hat{Q}(s_{i+1},a)) y=ri+Q′(st+1,argmaxaQ^(si+1,a))。双重保障,即便选出了那个高估Q value的action,只要第二个DQN不要高估这个值就行了;即便第二个DQN会高估,只要第一个DQN选择的action没有高估就行。虽然也有误差但此时可忽略不计。
在实作中,会拿真正的Q network去选择action(第一个),会拿target Q network去计算Q value。所以该tranning tip是最简单的一个,只用改动回归拟合方程。 -
Dueling DQN:唯一做的事情就是改变network的架构,可以更有效率的利用data
-
Prioritized Reply:训练资料是从经验池中随机抽取,我们希望比较重要且难以训练的数据能够以更大机率抽取到,也就是更大TD error(同target的差距)的数据有更大概率被抽取到。但Prioritized Reply并不仅仅更改了sampling probability,还更改了training process。
-
Multi-step:balance MC and TD。按照TD的方法,在buffer中会存取 ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st,at,rt,st+1)作为一笔笔训练资料。Multi-step则是将这个尺度拉长为N个step并存入buffer。兼具MC和TD的好处与坏处。
-
Noisy Net:epsilon greedy的探索方法是在action space上加入noise;noisy net是在参数上面加gaussion noise。也就是在每一个episode最开始在Q function中加入高斯噪声。这个方法比贪婪法要好,因为在同一episode某个确定的state的时候,我们希望它的action是固定的而不是随机的,贪婪法无论怎样都有小概率随机到别的action(会导致没有效率),那么到下一episode遇到这个state的时候采用的noisy net才会尝试别的action,而不是像epsilon greedy一样无论在episode内或外都有可能随到不同的action。
-
Distributional Q-function
Q值是 expected cumulative reward,虽然可能得到的均值一样,但实际分布可能不同,方差不同,因此风险不同。这个tips的作用就是将variance也考虑进去,减小风险。
- 以上tips基本上没有冲突,可以全部采用(DQN+DDQN+Prioritized DDQN+Dueling DDQN+A3C+Distributional DQN+Noisy DQN=rainbow)
3.7 Continuous Actions
比如自动行驶中方向盘转动角度,或者机器人关节转动角度等等。DQN算法中需要求解一个maximum的问题而难以应用于连续动作空间。解决方法如下
- Solution 1:抽取一系列action作为离散问题训练,判断哪个action的Q value最大。
- Solution 2:使用梯度上升法。问题在于难以得到global maximum并且其运算量很大,本来RL就很耗费时间,还要取train一个合适的action。
- Solution 3:特别设计一个Q function使得optimization很容易。输入仅为state,输出为一个vector μ ( s ) \mu(s) μ(s)、一个matix Σ ( s ) \Sigma(s) Σ(s)和一个scalar V ( s ) V(s) V(s)
Q ( s , a ) = − ( a − μ ( s ) ) T Σ ( s ) ( a − μ ( s ) ) + V ( s ) Q(s,a)=-(a-\mu(s))^T\Sigma(s)(a-\mu(s))+V(s) Q(s,a)=−(a−μ(s))TΣ(s)(a−μ(s))+V(s)
那么前一项越小,那么得到的Q value就越大,也就是直接让 a = μ ( s ) a=\mu(s) a=μ(s)即可。也就是 μ ( s ) = a r g m a x a Q ( s , a ) \mu(s)=argmax_aQ(s,a) μ(s)=argmaxaQ(s,a)。
Q:如果matrix不是正定矩阵的话,那么前项算出的scalar会使negative的,如何确保matrix是正定的?
A:Q function 并不直接输出 Σ \Sigma Σ,而是先输出一个matrix再与另一个matrix相乘以确保最终输出的matrix Σ \Sigma Σ是正定的。
- Solution 4:不使用Q learning。Policy-based to learning an actor;Value-based to learning a critic;二者有交叉方法即actor+critic的方法,例如A3C(asynchronous advantage actor-critic)。
3.8 Others
- reward shaping:给一些action额外的reward,引导训练。这种额外的reward非常主观,来自于人类对当前state。
- no reward:learning from demonstration:reward在一些artificial的环境中容易被定义出来,但在一些真实环境中,比如车辆行驶,难以去定义reward,如果没定义好reward,模型可能会被训练出很奇怪的行为(例如机器公敌中人类给机器人定下三条规则,让机器人得到把所有人类都监禁起来的结果)
- limitation learning
- 前提:actor可以与环境互动,但reward function不可得到
- 定义:有一系列expert的示范,expert通常是人类,即人类跟环境互动的示范,让actor学习这种示范。
- 问题:上述步骤称为behavior cloning,有两个问题。一是遇到人类不会遇到的问题,机器不会应对;二是只能完全复制人类行为,比如人类某些个人习惯/特质/多余的行为,即机器不知道什么该学什么不该学。
- inverse reinforcement learning
- 定义:从expert的示范中反推出reward function,利用这个reward function找到optimal actor
- principle:the teacher is always the best
- Basic idea:
- Initialize an actor
- In each iteration
- The actor interacts with the env to obtain some trajectories
- define a reward function, which makes the trajectories of the teacher better than the actor
- the actor learns to maximize the reward based on the new reward function
- Output the reward function and the actor learned from the reward function
- limitation learning
四、Policy-based Approach
对第二章PG的详细推导(应该吧)
4.1 Approach
- neural network as actor:如果RL中的actor是一个neural network,那么就是DRL
- input:the observation/state represented as vectors or matrixs
- output:each action corresponds to a neuron in output layer with stochestic values
- goodness of actor:maximize total reward
R
θ
R_\theta
Rθ
- each episodes obtain different returns for the same actor, hence the R θ R_\theta Rθ is a random variable, and what we desire to maximize is its expected value: R ˉ θ \bar{R}_\theta Rˉθ
- example:an episode is considered as a trajectory
τ
\tau
τ
- τ = ( s 1 , a 1 , r 1 , . . . , s T , a T , r T ) \tau=(s_1,a_1,r_1,...,s_T,a_T,r_T) τ=(s1,a1,r1,...,sT,aT,rT)
- R ( τ ) = ∑ n = 1 N r n R(\tau)=\sum_{n=1}^{N}r_n R(τ)=∑n=1Nrn
- 如果使用一个参数为 θ \theta θ的actor去训练,每一个 τ \tau τ出现的概率可以表示为:P( τ \tau τ| θ \theta θ)
- 那么期望就为所有可能的 τ \tau τ的return乘以在当前parameter下其对应概率的和: R ˉ θ = ∑ τ R ( τ ) P ( τ ∣ θ ) \bar{R}_\theta=\sum_{\tau}R(\tau)P(\tau|\theta) Rˉθ=∑τR(τ)P(τ∣θ)
- 实际中穷举所有的
τ
\tau
τ是不可能的,因此可用近似:
R
ˉ
θ
=
∑
τ
R
(
τ
)
P
(
τ
∣
θ
)
≈
1
N
∑
n
=
1
N
R
(
τ
n
)
\bar{R}_\theta=\sum_{\tau}R(\tau)P(\tau|\theta)≈\frac{1}{N}\sum_{n=1}^{N}R(\tau^n)
Rˉθ=∑τR(τ)P(τ∣θ)≈N1∑n=1NR(τn)
- 蒙特卡洛采样法(重要性采样应用之一):前提是on-policy,即数据来自于当前actor与当前env互动产生的。
- ps:前面RL的各个版本中定义的评价 G G G是对reward的优化定义
- pick the best actor:gradient descent
- 随机找一个actor,计算出在使用初始actor的情况下的 ∂ R ˉ θ ∂ θ \frac{\partial{\bar{R}_\theta}}{\partial{\theta}} ∂θ∂Rˉθ,再updata参数得到 θ 1 \theta_1 θ1,然后不断update得到最大。在实际中的这个 θ \theta θ就是所有的weight和bias分别对 R ˉ θ \bar{R}_\theta Rˉθ作微分然后串起来变成一个vector就是这个gradient。update: θ 1 ← θ 0 + η ▽ R ˉ θ \theta_1←\theta_0+\eta▽\bar{R}_\theta θ1←θ0+η▽Rˉθ
- 在步骤2分析到:
R
ˉ
θ
=
∑
τ
R
(
τ
)
P
(
τ
∣
θ
)
\bar{R}_\theta=\sum_{\tau}R(\tau)P(\tau|\theta)
Rˉθ=∑τR(τ)P(τ∣θ)。其中
R
(
τ
)
R(\tau)
R(τ)是跟
θ
\theta
θ没有关系的,所以仅相当于对
P
(
τ
∣
θ
)
P(\tau|\theta)
P(τ∣θ)作微分。
- ▽ R ˉ θ = ∑ τ R ( τ ) ▽ P ( τ ∣ θ ) = ∑ τ R ( τ ) P ( τ ∣ θ ) ▽ l n P ( τ ∣ θ ) ≈ 1 N ∑ n = 1 N R ( τ n ) ▽ l n P ( τ n ∣ θ ) ▽\bar{R}_\theta=\sum_{\tau}R(\tau)▽P(\tau|\theta)=\sum_{\tau}R(\tau)P(\tau|\theta)▽ln{P(\tau|\theta)}≈\frac{1}{N}\sum_{n=1}^{N}R(\tau^n)▽ln{P(\tau^n|\theta)} ▽Rˉθ=∑τR(τ)▽P(τ∣θ)=∑τR(τ)P(τ∣θ)▽lnP(τ∣θ)≈N1∑n=1NR(τn)▽lnP(τn∣θ)
- 接下来就是计算
▽
l
n
P
(
τ
n
∣
θ
)
▽ln{P(\tau^n|\theta)}
▽lnP(τn∣θ)
- P ( τ ∣ θ ) = p ( s 1 ) p ( a 1 ∣ s 1 , θ ) p ( r 1 , s 2 ∣ s 1 , a 1 ) p ( a 2 ∣ s 2 , θ ) p ( r 2 , s 3 ∣ s 2 , a 2 ) . . . = p ( s 1 ) ∏ t = 1 T p ( a t ∣ s t , θ ) p ( r t , s t + 1 ∣ s t , a t ) P(\tau|\theta)=p(s_1)p(a_1|s_1,\theta)p(r_1,s_2|s_1,a_1)p(a_2|s_2,\theta)p(r_2,s_3|s_2,a_2)...=p(s_1)\prod_{t=1}^{T}p(a_t|s_t,\theta)p(r_t,s_{t+1}|s_t,a_t) P(τ∣θ)=p(s1)p(a1∣s1,θ)p(r1,s2∣s1,a1)p(a2∣s2,θ)p(r2,s3∣s2,a2)...=p(s1)∏t=1Tp(at∣st,θ)p(rt,st+1∣st,at)
- 取对数: l n P ( τ ∣ θ ) = l n p ( s 1 ) + ∑ t = 1 T l n p ( a t ∣ s t , θ ) + l n p ( r t , s t + 1 ∣ s t , a t ) ln{P(\tau|\theta)}=lnp(s_1)+\sum_{t=1}^Tln{p(a_t|s_t,\theta)+lnp(r_t,s_{t+1}|s_t,a_t)} lnP(τ∣θ)=lnp(s1)+∑t=1Tlnp(at∣st,θ)+lnp(rt,st+1∣st,at)
- 仅有 p ( a t ∣ s t , θ ) p(a_t|s_t,\theta) p(at∣st,θ)跟actor有关系: ▽ l n P ( τ ∣ θ ) = ∑ t = 1 T ▽ l n p ( a t ∣ s t , θ ) ▽ln{P(\tau|\theta)}=\sum_{t=1}^T▽ln{p(a_t|s_t,\theta)} ▽lnP(τ∣θ)=∑t=1T▽lnp(at∣st,θ)
- 最后: ▽ R ˉ θ ≈ 1 N ∑ n = 1 N ∑ t = 1 T n R ( τ n ) ▽ l n p ( a t n ∣ s t n , θ ) ▽\bar{R}_\theta≈\frac{1}{N}\sum_{n=1}^{N}\sum_{t=1}^{T_{n}}R(\tau^n)▽ln{p(a_t^n|s_t^n,\theta)} ▽Rˉθ≈N1∑n=1N∑t=1TnR(τn)▽lnp(atn∣stn,θ)
- 优化:add a baseline and critic
4.2 Summary
- trajectory: τ = ( s 1 , a 1 , r 1 , . . . , s T , a T , r T ) \tau=(s_1,a_1,r_1,...,s_T,a_T,r_T) τ=(s1,a1,r1,...,sT,aT,rT)
- return: R ( τ ) R(\tau) R(τ)
- expect: R ˉ θ = ∑ τ R ( τ ) P ( τ ∣ θ ) = ∑ τ R ( τ ) p θ ( τ ) ≈ 1 N ∑ n = 1 N R ( τ n ) ≈ E τ ~ p [ R ( τ ) ] \bar{R}_\theta=\sum_{\tau}R(\tau)P(\tau|\theta)=\sum_{\tau}R(\tau)p_{\theta}(\tau)≈\frac{1}{N}\sum_{n=1}^{N}R(\tau^n)≈E_{{\tau}~p}{[R(\tau)]} Rˉθ=∑τR(τ)P(τ∣θ)=∑τR(τ)pθ(τ)≈N1∑n=1NR(τn)≈Eτ~p[R(τ)]
- gradient: ▽ R ˉ θ = ∑ τ R ( τ ) ▽ P ( τ ∣ θ ) = ∑ τ R ( τ ) p θ ( τ ) ▽ l n p θ ( τ ) ≈ 1 N ∑ n = 1 N R ( τ n ) ▽ l n p θ ( τ ) ≈ E τ ~ p [ R ( τ ) ▽ l n p θ ( τ ) ] ▽\bar{R}_\theta=\sum_{\tau}R(\tau)▽P(\tau|\theta)=\sum_{\tau}R(\tau)p_{\theta}(\tau)▽ln{p_{\theta}(\tau)}≈\frac{1}{N}\sum_{n=1}^{N}R(\tau^n)▽ln{p_{\theta}(\tau)}≈E_{{\tau}~p}[R(\tau)▽lnp_{\theta}(\tau)] ▽Rˉθ=∑τR(τ)▽P(τ∣θ)=∑τR(τ)pθ(τ)▽lnpθ(τ)≈N1∑n=1NR(τn)▽lnpθ(τ)≈Eτ~p[R(τ)▽lnpθ(τ)]
- practice: ▽ R ˉ θ = E ( s t , a t ) ~ π θ [ A θ ( s t , a t ) ▽ l n p θ ( a t n ∣ s t n ) ] ▽\bar{R}_\theta=E_{(s_t,a_t)~\pi_\theta}[A^{\theta}(s_t,a_t)▽lnp_{\theta}(a_t^n|s_t^n)] ▽Rˉθ=E(st,at)~πθ[Aθ(st,at)▽lnpθ(atn∣stn)]
五、On-policy to Off-policy
on-policy:参数为 θ \theta θ的初始actor与环境互动收集数据,更新一次参数后再与环境互动,依此循环。每次更新都要与环境互动行数,因为在上述policy gradient的方法中,更新的策略是actor跟环境作若干次互动(结果成分布),计算期望后再进行更新参数。每次更新完就是一个新的policy了,需要重新互动收集资料计算期望更新参数。
off-policy:参数为 θ ′ \theta' θ′的actor与环境互动收集数据,因为 θ ′ \theta' θ′跟 θ \theta θ无关,所以接下来 θ \theta θ如何更新都不会受到影响,可以用该数据更新多次参数为 θ \theta θ的actor,提升了效率
5.1 importance sampling
E x ~ p [ f ( x ) ] ≈ 1 N ∑ i = 1 N f ( x i ) ( a n d x i i s s a m p l e d f r o m p ( x ) ) E_{x~p}{[f(x)]}≈\frac{1}{N}\sum_{i=1}^{N}f(x^i)~(and ~x^i~is~sampled~from~p(x)) Ex~p[f(x)]≈N1i=1∑Nf(xi) (and xi is sampled from p(x))
满足p分布的x的期望近似于从该分布中采样N次x的均值。但在实际中不大可能从复杂分布p中进行采样,可以找到拟合分布q,但无法用q取代p去采样x。可以对importance sampling进一步推导:
E
x
~
p
[
f
(
x
)
]
≈
1
N
∑
i
=
1
N
f
(
x
i
)
=
∫
f
(
x
)
p
(
x
)
d
x
=
∫
f
(
x
)
p
(
x
)
q
(
x
)
q
(
x
)
d
x
=
E
x
~
q
[
f
(
x
)
p
(
x
)
q
(
x
)
]
E_{x~p}{[f(x)]}≈\frac{1}{N}\sum_{i=1}^{N}f(x^i)=\int{f(x)p(x)dx}=\int{f(x)\frac{p(x)}{q(x)}q(x)dx}=E_{x~q}{[f(x)\frac{p(x)}{q(x)}]}
Ex~p[f(x)]≈N1i=1∑Nf(xi)=∫f(x)p(x)dx=∫f(x)q(x)p(x)q(x)dx=Ex~q[f(x)q(x)p(x)]
结论:已知分布p与q,则以从p分布中随机采样为自变量的函数的期望可以近似为以从q分布中随机采样为自变量的函数乘以p/q的期望
Q:既然知道分布p,那为什么不能直接从p中sample出x嘞?更新一次参数其对应分布就会变啊,为什么还可以继续使用旧资料求拟合新参数的期望?
issue of importance sampling:虽然得到 E x ~ p [ f ( x ) ] = E x ~ q [ f ( x ) p ( x ) q ( x ) ] E_{x~p}{[f(x)]}=E_{x~q}{[f(x)\frac{p(x)}{q(x)}]} Ex~p[f(x)]=Ex~q[f(x)q(x)p(x)],但它们的方差不一样,即样本均值相同但样本方差不一定一样,这是个反映结果导向。由此逆推结论,如果分布p和q的差异越大,对sample的次数要求就越高。如果差异较大但sample不够,就会影响等式的正确性。
5.2 on-policy to off-policy
▽ R ˉ θ = E τ ~ p θ ( τ ) [ R ( τ ) ▽ l n p θ ( τ ) ] → E τ ~ p θ ′ ( τ ) [ p θ ( τ ) p θ ′ ( τ ) R ( τ ) ▽ l n p θ ( τ ) ] ( b a s e d o n t h e i m p o r t a n c e s a m p l i n g ) ▽\bar{R}_\theta=E_{{\tau}~p_{\theta}(\tau)}[R(\tau)▽lnp_{\theta}(\tau)]→E_{{\tau}~p_{\theta'}(\tau)}[\frac{p_{\theta(\tau)}}{p_{\theta'(\tau)}}R(\tau)▽lnp_{\theta}(\tau)](based~on~the~importance~sampling) ▽Rˉθ=Eτ~pθ(τ)[R(τ)▽lnpθ(τ)]→Eτ~pθ′(τ)[pθ′(τ)pθ(τ)R(τ)▽lnpθ(τ)](based on the importance sampling)
从
θ
′
\theta'
θ′中进行采样收集训练资料,再使用由此收集来的数据多次训练
θ
\theta
θ。换句话说,原本需要从
θ
\theta
θ中采样收集数据,但是通过重要性采样转换为了从
θ
′
\theta'
θ′中收集(拟合新数据训练效果)。在实际应用中,收集的训练资料通常是state和action的pair以及最后advantage的资料:
▽
R
ˉ
θ
=
E
(
s
t
,
a
t
)
~
π
θ
[
A
θ
(
s
t
,
a
t
)
▽
l
n
p
θ
(
a
t
n
∣
s
t
n
)
]
→
E
(
s
t
,
a
t
)
~
π
θ
′
[
P
θ
(
s
t
,
a
t
)
P
θ
′
(
s
t
,
a
t
)
A
θ
′
(
s
t
,
a
t
)
▽
l
n
p
θ
(
a
t
n
∣
s
t
n
)
]
▽\bar{R}_\theta=E_{(s_t,a_t)~\pi_\theta}[A^{\theta}(s_t,a_t)▽lnp_{\theta}(a_t^n|s_t^n)]→E_{(s_t,a_t)~\pi_{\theta'}}[\frac{P_{\theta}(s_t,a_t)}{P_{\theta'}(s_t,a_t)}A^{\theta'}(s_t,a_t)▽lnp_{\theta}(a_t^n|s_t^n)]
▽Rˉθ=E(st,at)~πθ[Aθ(st,at)▽lnpθ(atn∣stn)]→E(st,at)~πθ′[Pθ′(st,at)Pθ(st,at)Aθ′(st,at)▽lnpθ(atn∣stn)]
其中
A
θ
A^{\theta}
Aθ项为critic估测的当前state采用该action会有多好的advantage,即上文所述的accumulated reward减去baseline那一个版本。上式转换为
A
θ
′
A^{\theta'}
Aθ′的原因在于这个advantage表明的是在
θ
\theta
θ或者是
θ
′
\theta'
θ′策略下面的advantage,所以当采样的分布变化,它也需要跟着变化。进一步优化:
▽
R
ˉ
θ
=
E
(
s
t
,
a
t
)
~
π
θ
′
[
P
θ
(
s
t
,
a
t
)
P
θ
′
(
s
t
,
a
t
)
A
θ
′
(
s
t
,
a
t
)
▽
l
n
p
θ
(
a
t
n
∣
s
t
n
)
]
=
E
(
s
t
,
a
t
)
~
π
θ
′
[
p
θ
(
a
t
∣
s
t
)
p
θ
′
(
a
t
∣
s
t
)
p
θ
(
s
t
)
p
θ
′
(
s
t
)
A
θ
′
(
s
t
,
a
t
)
▽
l
n
p
θ
(
a
t
n
∣
s
t
n
)
]
=
E
(
s
t
,
a
t
)
~
π
θ
′
[
▽
p
θ
(
a
t
∣
s
t
)
p
θ
′
(
a
t
∣
s
t
)
A
θ
′
(
s
t
,
a
t
)
]
▽\bar{R}_\theta=E_{(s_t,a_t)~\pi_{\theta'}}[\frac{P_{\theta}(s_t,a_t)}{P_{\theta'}(s_t,a_t)}A^{\theta'}(s_t,a_t)▽lnp_{\theta}(a_t^n|s_t^n)]=E_{(s_t,a_t)~\pi_{\theta'}}[\frac{p_{\theta}(a_t|s_t)}{p_{\theta'}(a_t|s_t)}\frac{p_{\theta}(s_t)}{p_{\theta'}(s_t)}A^{\theta'}(s_t,a_t)▽lnp_{\theta}(a_t^n|s_t^n)]=E_{(s_t,a_t)~\pi_{\theta'}}[\frac{▽p_{\theta}(a_t|s_t)}{p_{\theta'}(a_t|s_t)}A^{\theta'}(s_t,a_t)]
▽Rˉθ=E(st,at)~πθ′[Pθ′(st,at)Pθ(st,at)Aθ′(st,at)▽lnpθ(atn∣stn)]=E(st,at)~πθ′[pθ′(at∣st)pθ(at∣st)pθ′(st)pθ(st)Aθ′(st,at)▽lnpθ(atn∣stn)]=E(st,at)~πθ′[pθ′(at∣st)▽pθ(at∣st)Aθ′(st,at)]
目标函数:
J
θ
′
(
θ
)
=
E
(
s
t
,
a
t
)
~
π
θ
′
[
p
θ
(
a
t
∣
s
t
)
p
θ
′
(
a
t
∣
s
t
)
A
θ
′
(
s
t
,
a
t
)
]
J^{\theta'}(\theta)=E_{(s_t,a_t)~\pi_{\theta'}}[\frac{p_{\theta}(a_t|s_t)}{p_{\theta'}(a_t|s_t)}A^{\theta'}(s_t,a_t)]
Jθ′(θ)=E(st,at)~πθ′[pθ′(at∣st)pθ(at∣st)Aθ′(st,at)]
由于importance sampling采样的问题,其应用于上述转换后,会导致如果两个样本分布差太多会影响表现性能,如何解决这个问题就是PPO和TRPO所在做的事情。
5.3 PPO
PPO/TRPO虽然是在用旧数据进行更新而非新数据,但其惩罚或者约束的目的是让两者越接近越好。简单来说,PPO/TRPO绕了个捷径,在保证旧数据影响较小的同时(作惩罚或约束使新旧数据接近,从而减小影响),能够像off-policy那样利用旧数据进行多次更新,并且还避免了importance sampling的缺陷。从结果导向,其为on-policy的方法。
proximal policy optimization(PPO):
J
P
P
O
θ
′
(
θ
)
=
J
θ
′
(
θ
)
−
β
K
L
(
θ
,
θ
′
)
J_{PPO}^{\theta'}(\theta)=J^{\theta'}(\theta)-{\beta}KL(\theta,\theta')
JPPOθ′(θ)=Jθ′(θ)−βKL(θ,θ′)
KL散度表征
θ
\theta
θ和
θ
′
\theta'
θ′有多像,目的是让在train的过程中两者越像越好。在PPO中是将constrain放到公式中合并求解,而TRPO是将constrain独立于object function之外设置(所以很难算)。
PPO algorithm:
-
initial policy parameters θ 0 {\theta}^0 θ0
-
in each iteration
-
using θ k {\theta}^k θk to interact with the environment to collect { s t , a t s_t,a_t st,at} and compute advantage A θ k ( s t , a t ) A^{{\theta}^k}(s_t,a_t) Aθk(st,at)
-
find θ \theta θ optimizing J P P O ( θ ) J_{PPO}(\theta) JPPO(θ): J P P O θ k ( θ ) = J θ k ( θ ) − β K L ( θ , θ k ) J_{PPO}^{{\theta}^k}(\theta)=J^{{\theta}^k}(\theta)-{\beta}KL(\theta,{{\theta}^k}) JPPOθk(θ)=Jθk(θ)−βKL(θ,θk) update parameters several times
-
if KL>KLmax, increase β;if KL<KLmax, decrease β
-
-
end for
在每一次迭代中利用 θ k \theta^k θk(上一次迭代得到的actor的参数)去跟环境作互动采样到一大堆state和action的pair,然后计算估测的advantage
PPO2 algorithm(PPO-Clip):
J
P
P
O
2
θ
k
(
θ
)
=
∑
(
s
t
,
a
t
)
m
i
n
(
p
θ
(
a
t
∣
s
t
)
p
θ
k
(
a
t
∣
s
t
)
A
θ
k
(
s
t
,
a
t
)
,
c
l
i
p
(
p
θ
(
a
t
∣
s
t
)
p
θ
k
(
a
t
∣
s
t
)
,
1
−
ϵ
,
1
+
ϵ
)
A
θ
k
(
s
t
,
a
t
)
)
J_{PPO2}^{{\theta}^k}(\theta)=\sum_{(s_t,a_t)}min(\frac{p_{\theta}(a_t|s_t)}{p_{{\theta}^k}(a_t|s_t)}A^{\theta^{k}}(s_t,a_t),clip(\frac{p_{\theta}(a_t|s_t)}{p_{{\theta}^k}(a_t|s_t)},1-\epsilon,1+\epsilon)A^{\theta^{k}}(s_t,a_t))
JPPO2θk(θ)=(st,at)∑min(pθk(at∣st)pθ(at∣st)Aθk(st,at),clip(pθk(at∣st)pθ(at∣st),1−ϵ,1+ϵ)Aθk(st,at))
上式:
m
i
n
(
)
min()
min()表示选取后面两项中最小的一项。
c
l
i
p
(
p
θ
(
a
t
∣
s
t
)
p
θ
k
(
a
t
∣
s
t
)
,
1
−
ϵ
,
1
+
ϵ
)
clip(\frac{p_{\theta}(a_t|s_t)}{p_{{\theta}^k}(a_t|s_t)},1-\epsilon,1+\epsilon)
clip(pθk(at∣st)pθ(at∣st),1−ϵ,1+ϵ):如果
p
θ
(
a
t
∣
s
t
)
p
θ
k
(
a
t
∣
s
t
)
\frac{p_{\theta}(a_t|s_t)}{p_{{\theta}^k}(a_t|s_t)}
pθk(at∣st)pθ(at∣st)小于
1
−
ϵ
1-\epsilon
1−ϵ项取
1
−
ϵ
1-\epsilon
1−ϵ;大于
1
+
ϵ
1+\epsilon
1+ϵ取
1
+
ϵ
1+\epsilon
1+ϵ;在中间取
p
θ
(
a
t
∣
s
t
)
p
θ
k
(
a
t
∣
s
t
)
\frac{p_{\theta}(a_t|s_t)}{p_{{\theta}^k}(a_t|s_t)}
pθk(at∣st)pθ(at∣st)。也就是:A>0,规定一个上界
1
+
ϵ
1+\epsilon
1+ϵ;A<0,规定一个下界
1
−
ϵ
1-\epsilon
1−ϵ。
直观解释:其目的也是让新旧policy差距不要太大,如果A>0,那么说明这个state和action的pair是好的,我们就希望去增加它的机率/权重,越大越好,但是
p
θ
(
a
t
∣
s
t
)
p
θ
k
(
a
t
∣
s
t
)
\frac{p_{\theta}(a_t|s_t)}{p_{{\theta}^k}(a_t|s_t)}
pθk(at∣st)pθ(at∣st)会有一个上界,如果超出就没有benefit;如果A<0同理。