李宏毅老师2020强化学习——总结篇(1-5)
李宏毅老师2020强化学习课程(课件)主页:
http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS18.html
其中的Deep Reinforcement Learning部分
视频链接地址:
https://www.bilibili.com/video/BV1UE411G78S
目录
- 1 Scratching the surface
- 2 Policy Gradient
- 3 Learning to Interact with Environments
- 4 Proximal Policy Optimization(PPO)
- 5 From on-policy to off-policy
注!!!:本总结篇仅供大家快速了解这门课,每一篇都会是笔者听后总结,这门强化学习的课程无论是数学原理还是方法讲的都非常清晰!强烈建议详细学习的读者还是请自行一一观看学习。
以下顺序均严格参照视频顺序,无缺无改
1 Scratching the surface1.1 Scenario of RL
Agent + Environment,Agent会通过观察Environment得到Observation(State),并做出一个Action,Environment会根据Action返给Agent一个Reward,上述将会是一个连续的过程。
1.2 Difficulties
Reward delay 比如在飞行射击游戏中,只有”开火“杀掉敌人才得分,那很有可能RL只学到不断开火,而忽视了左右移动对开火得分的重要性。虽然这些左右移动action不会得到任何得分,但是它可以帮助模型在未来取得更高的分数。
Agent’s actions affect the subsequent,Agent的行为会影响它之后看到的东西。所以Agent要学会Exploration探索没做过的行为
1.3 Outline
跳过马尔科夫决策过程(Markov Decision Process,MDP)和Deep Q-Learning,将直接进入A3C的讲解。
有两种方法:
- Value-based : Learning a Critic
- Policy-based :Learning an Actor
- A3c: Actor + Critic
1.4 Policy-based
首先,有这样的概念
Observation = Function input
Action = Function output
Reward来找出最好的fuction
其次有这样三个步骤
- 用Neural network 作为 Actor,输入当前的observation,输出就是当前可以采取的action(可以是多分类,以几率采取action)
- 决定一个function的好坏。也就是决定一个Actor的好坏。如果仅用当前的function去玩完整个游戏得到的Reward作为评估,这样会有很大的随机性,因为我们采取action就是几率采取,且游戏本身就有随机性,故我们用期望值作为评估。用function去玩n场游戏,用Reward的均值去近似期望值
- 选一个最好的function。用Gradint Ascent梯度上升找到可以得到最好Reward的function
这里的数学公式讲解请参见原视频,公式讲的非常清晰
2 Policy Gradient由有监督的多分类类比到强化学习的”损失函数“,并通过reward来作为权重切分数据集。
3 Learning to Interact with Environments让机器和环境做互动,机器所采取的行为会影响未来发生的事请,会影响接下来的Input
Observation:原本的外界信息
State:Observation的摘要
3.1 Reinforcement Learning
Actor、Env、Reward的意义
Trajectory = { s 1 , a 1 , s 2 , a 2 , . . . , s T , a T } \{s_1,a_1,s_2,a_2,...,s_T,a_T\} {s1,a1,s2,a2,...,sT,aT}
R = ∑ t = 1 T r t R = \sum_{t=1}^T{r_t} R=∑t=1Trt
3.1.1 Actor
Input: pixels
Output: action
Self: Neural network
如果发现不能微分,就用policy gradient 硬train一发
3.1.2 Critic
State value function V π ( s ) V^{\pi}(s) Vπ(s):给出一个actor π \pi π,在这个前提下看到一个state s,接下来一直到游戏结束所能获得的reward的总和的期望值。
How to estimate V π ( s ) V^{\pi}(s) Vπ(s)
Monte-Carlo based approach
Monte-Carlo based approach 蒙特卡洛法,相当于看着actor π \pi π玩游戏。
通俗而言就是,在actor π \pi π 的基础上,如果看到 s t a t e a state_a statea可以计算得到统计的reward值为 G a G_a Ga,目标就是根据 s t a t e a state_a statea预测reward值的回归预测,希望这个预测值和统计值 G a G_a Ga越接近越好。
Temporal-difference approach
Temporal-difference approach,通过预测 s t 和 s t + 1 s_t和s_{t+1} st和st+1的 V π ( s ) V^{\pi}(s) Vπ(s),虽然并不知道这个 V π ( s ) V^{\pi}(s) Vπ(s)具体是多少,但是知道两者之差是 r t + 1 r_{t+1} rt+1,期望两者差异越接近 r t + 1 r_{t+1} rt+1越好
对于这样的一段
. . . , s t , a t , r t , s t + 1 ...,s_t,a_t,r_t,s_{t+1} ...,st,at,rt,st+1
有
V π ( s t ) = V π ( s t + 1 ) + r t V^{\pi}(s_t) = V^{\pi}(s_{t+1}) + r_t Vπ(st)=Vπ(st+1)+rt
这样就可以一边玩一边优化参数了
Another Critic
State value function Q π ( s , a ) Q^{\pi}(s,a) Qπ(s,a):在给出actor π \pi π的基础上,在看到observation s 和 采取action a之后能获得的Reward
可以用function Q π ( s , a ) Q^{\pi}(s,a) Qπ(s,a) 找出一个比较好的Actor,这一招就叫Q-Learning
π ′ ( s ) = a r g m a x a Q π ( s , a ) \pi'(s) = argmax_{a}Q^{\pi}(s,a) π′(s)=argmaxaQπ(s,a)
DQN
DQN的tip:见论文Rainbow,七种方法
3.1.3 Actor + Critic
Actor-Critic : Actor不再跟环境的Reward学,因为环境Reward的随机性和变化太大,只跟Critic学。这个方法就叫 Actor-Critic。
其中效果比较好的一种就叫 Advantage Actor-Critic,这也就是A3C中前两个A
第三个A就是Asynchronous:类似于分布式训练
Pathwise Derivative Policy Gradient
当action a无法穷举时,可以考虑训练一个Actor,给它一个state s,输出的a就是让function Q π ( s , a ) Q^{\pi}(s,a) Qπ(s,a)的值最大的a
3.2 Inverse Reinforcement Learning
Inverse Reinforcement Learning 是 Imitation Learning的一种,只有Env和Actor,没有Reward。有的是 τ 1 ^ , τ 2 ^ , . . . . , τ N ^ {\hat{\tau_1},\hat{\tau_2},....,\hat{\tau_N}} τ1^,τ2^,....,τN^,如果是游戏这个就是”一个专家“把这个游戏玩了N遍得到的。
这种技术就是为了解决现实场景中没有Reward的任务。
原则:老师永远是对的
通俗而言(本质):
1有个Expert π ^ \hat{\pi} π^它有N笔游戏记录 τ 1 ^ , τ 2 ^ , . . . . , τ N ^ {\hat{\tau_1},\hat{\tau_2},....,\hat{\tau_N}} τ1^,τ2^,....,τN^
2初始化一个actor π \pi π,它也有N笔游戏记录 τ 1 , τ 2 , . . . . , τ N {{\tau_1},{\tau_2},....,{\tau_N}} τ1,τ2,....,τN
3定义一个Reward Function,让Expert的N笔游戏记录永远赢过actor
4让actor去学,使得根据当前这个Reward Function,可以得到最好的分数
5当actor做的比较好之后,这个Reward Function又变了,但Expert分数永远大于actor分数
重复上述过程3、4、5
这个过程其实和GAN是一模一样的。
4 Proximal Policy Optimization(PPO)defalut reinforcement learning algorithm at OpenAI
Policy Gradient的进阶版:PPO
4.1 Policy Gradient
Basic Components: Actor + Env + Reward Function
其中Env、Reward是不能被控制,是事先给定的;能调的只有Actor
Policy π \pi π 就是带有参数 θ \theta θ 的神经网络,它的输入是机器现在看到的东西通常用vector或matrix代替即observation,输出就是当前机器要采取什么行为,actor。
4.1.1 p θ ( τ ) p_{\theta}(\tau) pθ(τ)
上式 p θ ( a t ∣ s t ) p_{\theta}(a_t|s_t) pθ(at∣st)代表的就是Actor,会取决于Policy π \pi π 就是带有参数 θ \theta θ 的神经网络,是我们能够控制的;
而 p ( s t + 1 ∣ s t , a t ) p(s_{t+1}|s_t,a_t) p(st+1∣st,at)代表的就是Env,是我们无法控制的,通常是写定好的规则等
4.1.2 R τ ‾ \overline{R_{\tau}} Rτ
上图的Actor和Reward都是带有概率的,因此往往用 R ( τ ) R(\tau) R(τ)的期望值 R τ ‾ \overline{R_{\tau}} Rτ代替 R ( τ ) R(\tau) R(τ),这个期望就是穷举所有的Trajectory τ \tau τ,并对每个 τ \tau τ出现的几率乘以获得的Reward作为这个 τ \tau τ的 R ( τ ) R(\tau) R(τ)
4.1.3 Policy Gradient
而我们要做的就是最大化 R τ ‾ \overline{R_{\tau}} Rτ,该怎么做呢?用Policy Gradient
上图的数学推导式并不困难,请仔细心中推导一遍。结合这里的 p θ ( τ ) p_{\theta}(\tau) pθ(τ)就是4.1.1讲过的,在 p θ ( τ ) p_{\theta}(\tau) pθ(τ)中 p ( s t + 1 ∣ s t , a t ) p(s_{t+1}|s_t,a_t) p(st+1∣st,at)是不可微的,当成常量即可,故仅剩 p ( a t n ∣ s t n ) p(a_t^n|s_t^n) p(atn∣stn)
也就是说,如果在Sample的样本中,在 s t i − > a t i s_t^i->a_t^i sti−>ati的情况下过的的 R ( τ ) R(\tau) R(τ)是正的,就要增大 s t i − > a t i s_t^i->a_t^i sti−>ati出现的几率;反之如果 R ( τ ) R(\tau) R(τ)是负的,就要减小 s t i − > a t i s_t^i->a_t^i sti−>ati出现的几率
在实作中,就是通过上图右侧的公式进行模型训练,不过需要先收集左侧的数据才能进行右侧公式的参数更新。在参数更新可以获得更好的Reward时,再更新模型,此时又要收集左侧新情况的数据,再进行右侧的更新,重复这个过程。
上述过程可以被简化为下图
假如我们实作目标的Action就是left、right、fire,那么对于state s t n s_{t}^n stn可以训练一个三分类器。假设我们Sample的数据中有在state s t n s_{t}^n stn出现的情况下fire的数据,那么就希望这个分类器可以在输入 s t n s_{t}^n stn的情况预测fire。与普通的分类任务不同的是,还要考虑 R ( τ n ) R(\tau^n) R(τn)即 s t n , a t n s_{t}^n,a_t^n stn,atn的情况下整场游戏的Reward作为分类器的权重。
下述tip都是为了解决Sample次数不够多,不足以代替整体时实际用到的技巧。
tip1: Add a Baseline
∂ R ‾ θ ≈ 1 N ∑ n = 1 N ∑ t = 1 T n ( R ( τ n ) − b ) ∗ ∂ log p θ ( a t n ∣ s t n ) \partial \overline{R}_{\theta} \approx \frac{1}{N}\sum_{n=1}^N\sum_{t=1}^{T_n}(R(\tau^{n})-b) * \partial \log p_{\theta}(a_{t}^n|s_t^n) ∂Rθ≈N1n=1∑Nt=1∑Tn(R(τn)−b)∗∂logpθ(atn∣stn)
其中b就叫做baseline,通过不断计算 R ( τ ) R(\tau) R(τ)的平均值当作b来用,这样就能保证代表Reward的部分是有正有负的
b ≈ E [ R ( τ ) ] b \approx E[R(\tau)] b≈E[R(τ)]
tip2:Assign Suitable Credit
将每个 ( s , a ) (s,a) (s,a)的情况下获得Reward R ( τ n ) R(\tau^n) R(τn)不再是整场游戏的Reward,而是在 ( s , a ) (s,a) (s,a)之后到游戏结束获得的Reward
更进一步,把比较未来的做discount,因为在实际情况下时间拖得越长,影响力就越小。故还可以将上述Reward再考虑时间
其中 γ < 1 \gamma<1 γ<1,如果这个 t ′ t' t′是越之后的timestamp,它前面就乘上越多次的 γ \gamma γ。
通俗而言,比如我们在第一、二、三、四回合依次获得了1,2,3,4分。
那么在第二回合到结束的Reward就是 2 ∗ γ ( 2 − 2 ) + 3 ∗ γ ( 3 − 2 ) + 4 ∗ γ ( 4 − 2 ) 2 * \gamma^{(2-2)} + 3 * \gamma^{(3-2)} + 4 * \gamma^{(4-2)} 2∗γ(2−2)+3∗γ(3−2)+4∗γ(4−2)
影响力衰减,虽然第二回合的Reward是之后所有Reward的总和,但是离它越远跟它的关系就越小。
这就是Advantage Function,它表示了假设我们在某一个state s t s_t st执行某一个action a t a_t at相较于其他可能的action,它有多好,是一种相对的好。
这个 a t a_t at可以是被critic神经网络得到。
5 From on-policy to off-policy上述讲的都是on-policy 的,其实还有一种更实际的方法off-policy
Off-policy的方法是希望我们能通过来自 θ ′ \theta' θ′的样本去训练 θ \theta θ。在此引入一个重要的概念:Importance Sampling,它的要求就是
E x p [ f ( x ) ] = E x p [ f ( x ) p ( x ) q ( x ) ] E_{x~p}[f(x)] = E_{x~p}[f(x)\frac{p(x)}{q(x)}] Ex p[f(x)]=Ex p[f(x)q(x)p(x)]
在满足这个基础上,就可以用 θ ′ \theta' θ′的样本去训练 θ \theta θ,其目标函数的变化如下
PPO和TRPO的区别在于,TRPO将 K L ( θ , θ ′ ) KL(\theta,\theta') KL(θ,θ′)作为限制进行训练,而PPO是将 K L ( θ , θ ′ ) KL(\theta,\theta') KL(θ,θ′)加入到目标函数进行训练,PPO的训练更简单。
这里的KL表示同一个state时两个参数下action的distribution的差异,不是参数上的距离,而是action上的距离。
PPO算法如下
第二种PPO的算法相当于设置了上下限: 1 − ϵ 到 1 + ϵ 1-\epsilon到1+\epsilon 1−ϵ到1+ϵ,在A期望函数是正值时,我们是希望 P θ ( a t ∣ s t ) P_{\theta}(a_t|s_t) Pθ(at∣st)出现的几率越大越好,但是也不能太大,因为我们是有前提假设的,那就是 θ 和 θ k \theta和\theta_{k} θ和θk的行为差异差太多。因此当 P θ ( a t ∣ s t ) P_{\theta}(a_t|s_t) Pθ(at∣st)已经增长到 1 + ϵ 1+\epsilon 1+ϵ倍的 P θ k ( a t ∣ s t ) P_{\theta^k}(a_t|s_t) Pθk(at∣st)时就不能再增长了。同理,在A为负值时, P θ ( a t ∣ s t ) P_{\theta}(a_t|s_t) Pθ(at∣st)也不能减小到 1 − ϵ 1-\epsilon 1−ϵ倍的 P θ k ( a t ∣ s t ) P_{\theta^k}(a_t|s_t) Pθk(at∣st)