1. RL几个应用
Learning to play AlphaGo
- Supervised(监督学习的方式)
- 从老师那里学习,即通过打标签的方式学习
- 比如看棋谱学,但棋谱是人下的,人下的那一步就是最优的吗?
- Reinforement Learning
- 从经验中学习,其实人可能都不知道哪一步是最优的
- AlphaGo的学习方式
- 先做Supervised Learning,从高手棋谱中学习
- 通过Supervised Learning训练出两个模型,他们互相博弈
Learning a Chat-Bot
- 如何评判生成句子的好坏是关键问题,总不能一直“See you”循环下去。
- 预测将来可能出现的做法
- 在RL中引入生成对抗网络
- 判别生成的句子是否符合真实数据的分布
Playing Video Game
- 两个常用的游戏平台
- Gym
- Universe
- episode,一局游戏,从开始到结束
2. RL的概念
RL的难点
-
Reward Delay 奖励延迟
比如,打飞机游戏中,只有开火才会拿到Reward,但左右操作不会。但左右操作又会影响最后得分的高低,毕竟就算一直开火而不躲避也会导致被子弹击中从而导致游戏结束。所以,这就需要机器能够合理规划以获得长期的利益。
-
Agent采取的行为会影响之后的行为
Agent需要充分的探索它所处的环境。还是以打飞机游戏为例,若是Agent从来都没有尝试过开火,那么它永远无法得到高分。
RL常用的做法
- Policy-Based,主要目的是学习一个Actor
- Value-Based,主要目的是学习一个Critic
- 那现在比较流行的做法是:Actor + Critic
3. RL三个步骤
Neural Network as Actor
- Input:机器的观察,Vector或者是Matrix
- OutPut:输出层每一个神经元代表一个动作
Goodness of Actor 1
-
给定一个Actor π θ ( s ) \pi_\theta(s) πθ(s),神经网络就是Actor,参数为 θ \theta θ 。使用 π θ ( t ) \pi_\theta(t) πθ(t)来玩游戏,那么总体的Reward如下:
T o t a l R e w a r d : R θ = ∑ t = 1 T r t Total~Reward : R_\theta = \sum_{t=1}^Tr_t Total Reward:Rθ=t=1∑Trt
-
由于环境是一直在变化的(输入会变),比如打游戏玩家不同的位置、画面等,所以就算是同一个Actor玩千百次游戏最后得到的 R θ R_\theta Rθ也会不一样。而强化学习的目的是最大化Reward从而选择出最佳的Actor,那么直接最大化 R θ R_\theta Rθ是没有意义的,而应该最大化所有 R θ R_\theta Rθ的期望。
-
定义 R ˉ θ \bar{R}_\theta Rˉθ为 R θ R_\theta Rθ的期望值,所以最终的目的应该是最大化 R ˉ θ \bar{R}_\theta Rˉθ。当玩的所有局获得的Reward期望最大时,就说明这个Actor整体上达到了较好的能力。(可用随机放回采样钞票来类比,若是整体期望很大,那么盒子里钞票值普遍都比较大,即Reward普遍比较大)。
Goodness of Actor 2
-
将一个episode考虑为一个 τ \tau τ,即一场游戏的开始到结束这个过程。这个过程有千百种,有些经常出现,有些不太出现。 τ \tau τ的定义如下:
τ = { s 1 , a 1 , r 1 , s 2 , a 2 , r 2 , . . . , s T , a T , r T } \tau = \{s_1, a_1, r_1, s_2, a_2, r_2, ..., s_T, a_T, r_T\} τ={s1,a1,r1,s2,a2,r2,...,sT,aT,rT}
其中 s i s_i si代表当前的状态, a i a_i ai代表采取的动作, r i r_i ri代表收获的Reward。
-
当一个Actor开始玩游戏的时候,每一个 τ \tau τ都有一定的概率出现,我们用 P ( τ ∣ θ ) P(\tau|\theta) P(τ∣θ)来代表不同的 τ \tau τ出现的概率。那么所有 R θ R_\theta Rθ的期望为:
R ˉ θ = ∑ τ R ( τ ) P ( τ ∣ θ ) \bar{R}_\theta = \sum_{\tau}R(\tau)P(\tau|\theta) Rˉθ=τ∑R(τ)P(τ∣θ)
这个公式的理解方式类比于离散随机变量求期望:假设可以穷举所有的 τ \tau τ,那么 R ˉ θ \bar{R}_\theta Rˉθ应该为每种 τ \tau τ出现的机率乘上该 τ \tau τ能够获取的总体Reward的总值。
-
对 R ˉ θ \bar{R}_\theta Rˉθ的进一步思考:由于总体的目标是希望选择的Actor在不同的 τ \tau τ下都能够获得尽可能高的 R e w a r d Reward Reward,那么使得 R ˉ θ \bar{R}_\theta Rˉθ最大的那个Actor就是我们所需要的。
-
由于前穷举所有的 τ \tau τ可能性很低,那么只能用一个Actor玩N场游戏得到 { τ 1 , τ 2 , . . . , τ 3 } \{\tau^1, \tau^2, ..., \tau^3\} {τ1,τ2,...,τ3}来类比所有的 τ \tau τ。也就相当于从 P ( τ ∣ θ ) P(\tau|\theta) P(τ∣θ)中采样N次,那么每个 τ \tau τ出现的概率应该为 1 N \frac{1}{N} N1,所以 R ˉ θ \bar{R}_\theta Rˉθ近似为:
R ˉ θ = ∑ t R ( τ ) P ( τ ∣ θ ) ≈ 1 N ∑ 1 N R ( τ n ) \bar{R}_\theta = \sum_tR(\tau)P(\tau|\theta) \approx \frac{1}{N}\sum_1^NR(\tau^n) Rˉθ=t∑R(τ)P(τ∣θ)≈N11∑NR(τn)
相当于把N个 τ \tau τ的 R ( τ ) R(\tau) R(τ)求和并取平均。
Pick the best Actor 1
-
根据前文,已将问题转化为:
θ ∗ = a r g m a x θ R ˉ θ = a r g m a x θ ∑ τ R ( τ ) P ( τ ∣ θ ) \theta^* = arg~\underset{\theta}{max}\bar{R}_\theta = arg~\underset{\theta}{max}~\sum_{\tau}R(\tau)P(\tau|\theta) θ∗=arg θmaxRˉθ=arg θmax τ∑R(τ)P(τ∣θ)
-
那么就可以采用梯度上升来更新模型的参数
- Start with θ 0 \theta^0 θ0
- θ 1 = θ 0 + η ∇ R ˉ θ 0 \theta^1 = \theta^0 + \eta\nabla\bar{R}_{\theta^0} θ1=θ0+η∇Rˉθ0
- θ 2 = θ 1 + η ∇ R ˉ θ 1 \theta^2 = \theta^1 + \eta\nabla\bar{R}_{\theta^1} θ2=θ1+η∇Rˉθ1
- …
Pick the best Actor 2
那么 ∇ R ˉ θ \nabla\bar{R}_\theta ∇Rˉθ到底该怎么求呢?
-
根据 R ˉ θ \bar{R}_\theta Rˉθ的公式,可以得到:
∇ R ˉ θ = ∑ τ R ( τ ) ∇ P ( τ ∣ θ ) \nabla\bar{R}_\theta = \sum_\tau R(\tau)\nabla P(\tau|\theta) ∇Rˉθ=τ∑R(τ)∇P(τ∣θ)
- 其中, R ( τ ) R(\tau) R(τ)和 θ \theta θ并没有关系,所以不需要求梯度。因为Reward是环境给的,比如游戏中的计分板,我们不需要计分的具体过程和规则,只要拿到值就可以了。
- 所以即使 R ( τ ) R(\tau) R(τ)不可微,不知道其具体的 f u n c t i o n function function也没有关系,只要给了输入能够给输出就行。
-
再进一步看上面的式子,可以推导出:
∇ R ˉ θ = ∑ τ R ( τ ) ∇ P ( τ ∣ θ ) = ∑ τ R ( τ ) P ( τ ∣ θ ) ∇ P ( τ ∣ θ ) P ( τ ∣ θ ) ≈ 1 N ∑ n = 1 N R ( τ n ) ∇ log P ( τ n ∣ θ ) \nabla\bar{R}_\theta = \sum_\tau R(\tau)\nabla P(\tau|\theta) \\ = \sum_\tau R(\tau)P(\tau|\theta)\frac{\nabla P(\tau|\theta)}{P(\tau|\theta)} \\ \approx \frac{1}{N}\sum_{n=1}^N R(\tau^n) \nabla\log P(\tau^n|\theta) ∇Rˉθ=τ∑R(τ)∇P(τ∣θ)=τ∑R(τ)P(τ∣θ)P(τ∣θ)∇P(τ∣θ)≈N1n=1∑NR(τn)∇logP(τn∣θ)
约等于已在上文解释,因为无法穷取所有的 τ \tau τ,故只能采样类比。那么每个 τ \tau τ出现的概率应该为 1 N \frac{1}{N} N1,可以提到求和前面。
Pick the best Actor 3
根据上文的推导,问题就转化为了 ∇ log P ( τ n ∣ θ ) = ? \nabla\log P(\tau^n|\theta) = ? ∇logP(τn∣θ)=?,那么该怎么求呢?
-
前文定义 τ = { s 1 , a 1 , r 1 , s 2 , a 2 , r 2 , . . . , s T , a T , r T } \tau = \{s_1, a_1, r_1, s_2, a_2, r_2, ..., s_T, a_T, r_T\} τ={s1,a1,r1,s2,a2,r2,...,sT,aT,rT},故可以得到:
P ( τ ∣ θ ) = P ( s 1 ) P ( a 1 ∣ s 1 , θ ) P ( r 1 , s 2 ∣ s 1 , a 1 ) P ( a 2 ∣ s 2 , θ ) . . . 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(τ∣θ)=P(s1)P(a1∣s1,θ)P(r1,s2∣s1,a1)P(a2∣s2,θ)...
- P ( s 1 ) P(s_1) P(s1)代表游戏开始画面出现的几率
- P ( a 1 ∣ s 1 , θ ) P(a_1|s_1, \theta) P(a1∣s1,θ)代表 θ 1 \theta_1 θ1下的Actor,在 s 1 s_1 s1状态下,取动作 a 1 a_1 a1的机率
- P ( r 1 , s 2 ∣ s 1 , a 1 ) P(r_1,s_2|s_1, a_1) P(r1,s2∣s1,a1)代表,在 s 1 s_1 s1状态下采取动作 a 1 a_1 a1,获取 r 1 r_1 r1并指向状态 s 2 s_2 s2的概率
-
那么,上面的式子可以进一步写为:
P ( τ ∣ θ ) = P ( s 1 ) ∏ t = 1 T P ( a t ∣ s t , θ ) P ( r t , s t + 1 ∣ s t , a t ) = log P ( s 1 ) + ∑ t = 1 T log P ( a t ∣ s t , θ ) + log P ( r t , s t + 1 ∣ s t , a t ) P(\tau|\theta) = P(s_1)\prod_{t=1}^TP(a_t|s_t, \theta)P(r_t, s_{t+1}|s_t, a_t) \\ = \log P(s_1) + \sum_{t=1}^T \log P(a_t|s_t,\theta) + \log P(r_t, s_{t+1}|s_t, a_t) P(τ∣θ)=P(s1)t=1∏TP(at∣st,θ)P(rt,st+1∣st,at)=logP(s1)+t=1∑TlogP(at∣st,θ)+logP(rt,st+1∣st,at)
其中 log P ( s 1 ) \log P(s_1) logP(s1)和 log P ( r t , s t + 1 ∣ s t , a t ) \log P(r_t, s_{t+1}|s_t, a_t) logP(rt,st+1∣st,at)都是与 θ \theta θ无关的项,与游戏环境相关。
-
于是,可以得到:
∇ log P ( τ ∣ θ ) = ∑ t = 1 T ∇ log P ( a t ∣ s t , θ ) \nabla \log P(\tau|\theta) = \sum_{t=1}^T \nabla \log P(a_t|s_t, \theta) ∇logP(τ∣θ)=t=1∑T∇logP(at∣st,θ)
Pick the best Actor 4
根据上文的推导,最终的问题可以转化为如下式子:
∇ R ˉ θ ≈ 1 N ∑ n = 1 N R ( τ n ) ∇ log P ( τ n ∣ θ ) = 1 N ∑ n = 1 N R ( τ n ) ∑ t = 1 T n ∇ log P ( a t n ∣ s t n , θ ) = 1 N ∑ n = 1 N ∑ t = 1 T n R ( τ n ) ∇ log P ( a t n ∣ s t n , θ ) \nabla \bar{R}_\theta \approx \frac{1}{N}\sum_{n=1}^N R(\tau^n) \nabla\log P(\tau^n|\theta) \\ = \frac{1}{N}\sum_{n=1}^N R(\tau^n) \sum_{t=1}^{T_n} \nabla \log P(a_t^n|s_t^n, \theta) \\ = \frac{1}{N}\sum_{n=1}^N \sum_{t=1}^{T_n} R(\tau^n)\nabla \log P(a_t^n|s_t^n, \theta) ∇Rˉθ≈N1n=1∑NR(τn)∇logP(τn∣θ)=N1n=1∑NR(τn)t=1∑Tn∇logP(atn∣stn,θ)=N1n=1∑Nt=1∑TnR(τn)∇logP(atn∣stn,θ)
最后得到的一项式子是非常直觉的,可以体现学习过程中很多重要的信息,将在下面一一列出。
-
机器在 τ n \tau^n τn过程中,在 s t n s_t^n stn的状态下采取行动 a t n a_t^n atn导致
- R ( τ n ) R(\tau^n) R(τn)为正,则希望这个 a t n a_t^n atn出现的机率越大越好,需调整 θ \theta θ来增加 P ( a t n ∣ s t n ) P(a_t^n|s_t^n) P(atn∣stn)
- R ( τ n ) R(\tau^n) R(τn)为负,则希望这个 a t n a_t^n atn出现的机率越小越好,需调整 θ \theta θ来降低 P ( a t n ∣ s t n ) P(a_t^n|s_t^n) P(atn∣stn)
-
P ( a t n ∣ s t n , θ ) P(a_t^n|s_t^n, \theta) P(atn∣stn,θ)的意思是:在某一 τ \tau τ过程中,在 t t t时刻的所观测的状态 s t n s_t^n stn,采取动作 a t n a_t^n atn的概率。
- 但 P ( a t n ∣ s t n , θ ) P(a_t^n|s_t^n, \theta) P(atn∣stn,θ)乘以的是该 τ \tau τ整体的Reward R ( τ n ) R(\tau^n) R(τn),而不是当前时刻 t t t采取行动后的Reward R ( τ t n ) R(\tau^n_t) R(τtn)
- 所以,训练完毕后的Actor每次采取的动作往往是为了最大化整体的利益,而不是局部的利益。这就可以避免前文提到的问题:打飞机只有开火才能获得Reward,而左移、右移不会有任何Reward,但会对最大化Reward有帮助,所以机器每次做的决策要考虑全局而不是一直开火。
-
∇ log P ( a t n ∣ s t n , θ ) \nabla \log P(a_t^n|s_t^n, \theta) ∇logP(atn∣stn,θ)为什么要取 log \log log?分母 P ( a t n ∣ s t n , θ ) P(a_t^n|s_t^n, \theta) P(atn∣stn,θ)的作用是什么呢?
∇ log P ( a t n ∣ s t n , θ ) = ∇ P ( a t n ∣ s t n , θ ) P ( a t n ∣ s t n , θ ) \nabla \log P(a_t^n|s_t^n, \theta) = \frac{\nabla P(a_t^n|s_t^n, \theta)}{P(a_t^n|s_t^n, \theta)} ∇logP(atn∣stn,θ)=P(atn∣stn,θ)∇P(atn∣stn,θ)
- 举个例子,如有以下的
τ
\tau
τ过程
- τ 13 \tau^{13} τ13,采取行动a, R ( τ 13 ) = 2 R(\tau^{13}) = 2 R(τ13)=2
- τ 15 \tau^{15} τ15,采取行动b, R ( τ 15 ) = 1 R(\tau^{15}) = 1 R(τ15)=1
- τ 17 \tau^{17} τ17,采取行动b, R ( τ 17 ) = 1 R(\tau^{17}) = 1 R(τ17)=1
- τ 33 \tau^{33} τ33,采取行动b, R ( τ 33 ) = 1 R(\tau^{33}) = 1 R(τ33)=1
- 虽然动作a会有更高的Reward,但由于动作b出现次数很多,在求和所有R之后,b动作带来的总Reward会更高;这就导致机器将b出现的机率调高,以获得总体的Reward更高。故虽然a可以获取更高的Reward,机器也会限制它的发生机率。
- 举个例子,如有以下的
τ
\tau
τ过程
-
在看了上述例子之后,我们再回头解释分母 P ( a t n ∣ s t n , θ ) P(a_t^n|s_t^n, \theta) P(atn∣stn,θ)存在的意义,其实 ∇ P ( a t n ∣ s t n , θ ) P ( a t n ∣ s t n , θ ) \frac{\nabla P(a_t^n|s_t^n, \theta)}{P(a_t^n|s_t^n, \theta)} P(atn∣stn,θ)∇P(atn∣stn,θ)相当于对各种action出现的次数做了normalize,从而使得机器不会偏好出现次数过高的action,而是综合评价出现次数和单次行动获得的Reward。
通过上述对目标函数直观的解释和理解,我们可以发现目标函数不仅保证了全局利益,也能保证得到做出合理决策的Actor。
Add a Baseline 1
若是 R ( τ ) n R(\tau)^n R(τ)n一直为正,会发生什么事情?
-
理想状态下,不会有什么问题。若有三个动作a、b、c,通过充分的采样,三个动作都发生了,那么三个动作在进行梯度下降的时候都会有相应的提升。
-
但若采样不充分,导致某个动作没有发生如动作a没有发生,就会使得动作b、c的机率增加,而a的机率减小。所以,我们希望 R ( τ n ) R(\tau^n) R(τn)有正有负,那么可以添加一项 b ≈ E ( R ( τ n ) ) b \approx E(R(\tau^n)) b≈E(R(τn))。
∇ 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 = \frac{1}{N}\sum_{n=1}^N \sum_{t=1}^{T_n} (R(\tau^n) - b)\nabla \log P(a_t^n|s_t^n, \theta) ∇Rˉθ=N1n=1∑Nt=1∑Tn(R(τn)−b)∇logP(atn∣stn,θ)
Add a BaseLine 2
-
假设有两个 τ \tau τ的片段如下:
- ( s a , a 1 , r = 5 ) , ( s b , a 2 , r = 0 ) , ( s c , a 3 , r = − 2 ) , R = 3 (s_a, a_1, r=5),~(s_b, a_2, r=0),~(s_c, a_3, r=-2), ~ R=3 (sa,a1,r=5), (sb,a2,r=0), (sc,a3,r=−2), R=3
- ( s a , a 1 , r = − 5 ) , ( s b , a 2 , r = 0 ) , ( s c , a 3 , r = − 2 ) , R = − 7 (s_a, a_1, r=-5),~(s_b, a_2, r=0),~(s_c, a_3, r=-2), R=-7 (sa,a1,r=−5), (sb,a2,r=0), (sc,a3,r=−2),R=−7
-
在上面两个例子中,执行 a 2 a_2 a2并不会获得太差的Reward。但在原始的Policy Gradient中,乘上的权重为 R ( τ n ) R(\tau^n) R(τn),即一场游戏的总Reward,这虽然能考虑全局收益,但同时拉低了某些好的action出现的概率,从而使得当前Actor出现偏好。
-
如在上述的例子中, a 2 a_2 a2之前采取的动作其实和 a 2 a_2 a2将产生的结果并没有任何关系, a 2 a_2 a2之后产生的结果只和 a 2 a_2 a2之后的动作相关。故可以修改Policy Gradient为:
∇ R θ ˉ ≈ 1 N ∑ n = 1 N ∑ t = 1 T n [ ∑ t ′ = t T n r t ′ n − b ] ∇ l o g 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}r_{t^{'}}^n - b]\nabla logP_\theta(a_t^n|s_t^n) ∇Rθˉ≈N1n=1∑Nt=1∑Tn[t′=t∑Tnrt′n−b]∇logPθ(atn∣stn)
即将权重从全局的Reward修改为,采取动作 a t a_t at之后所有Reward的总和
-
再进一步,由于当前的action对后续动作的影响会随着时间的推移而逐渐减弱,故需要乘上一个衰减因子 γ < 1 \gamma < 1 γ<1,于是式子更新为:
∇ R θ ˉ ≈ 1 N ∑ n = 1 N ∑ t = 1 T n [ ∑ t ′ = t T n γ t ′ − t r t ′ n − b ] ∇ l o g 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} r_{t^{'}}^n - b]\nabla logP_\theta(a_t^n|s_t^n) ∇Rθˉ≈N1n=1∑Nt=1∑Tn[t′=t∑Tnγt′−trt′n−b]∇logPθ(atn∣stn)
-
中间的那一项称之为Advantage Function,即
A θ ( s t , a t ) = ∑ t ′ = t T n γ t ′ − t r t ′ n − b A^\theta(s_t, a_t) = \sum_{t^{'}=t}^{T_n}\gamma^{t^{'}-t} r_{t^{'}}^n - b Aθ(st,at)=t′=t∑Tnγt′−trt′n−b
参考资料:台大李宏毅强化学习。推荐本文和宝可梦大师的现场教学一起食用,效果更佳~
本文为作者原创,转载需注明出处!