Lee Hung-yi强化学习专栏系列博客主要转载自CSDN博主 qqqeeevvv原专栏地址
课程视频
课件

1. 回顾

Lee Hung-yi强化学习 | (1) Policy Gradient
在强化学习中,主要有三个部件(components):actor、environment、reward function。其中env和reward function是事先就定好的,你不能控制。唯一能调整的是actor的policy,使actor能获得最大的reward。
Lee Hung-yi强化学习 | (1) Policy Gradient
policy是actor中起决策作用的一个东西,决定了actor的行为。可以理解为是一个函数,输入是状态(state,对环境的观察),输出是动作(action)即,输入一个状态,决定输出什么动作。

这里以π\pi来代表policy。在深度强化学习中,policy是通常使用network来实现,network中会包含很多参数,这里就用\theta来统一代表这些参数。
Lee Hung-yi强化学习 | (1) Policy Gradient
这里以游戏画面(state, 对环境的观察)作为输入,经过红框的网络(policy)决策后,得出采取各种动作的几率(在动作空间上的概率分布),所以最终得出做left这个动作。

类似于图像分类,这里的类别是动作。

2. 例子

Lee Hung-yi强化学习 | (1) Policy Gradient
初始的游戏画面作为s1s_1 ,针对s1s_1采取的动作为 a1a_1 ,行动后会得到一个reward记为r1r_1。之后会看到下一个游戏画面s2s_2
Lee Hung-yi强化学习 | (1) Policy Gradient
经过很多轮 (s,a,r) 后游戏结束(消灭了所有敌人或者被消灭)了,一次游戏开始到结束称为一个episode,将每一个episode的 reward 相加就能得到Total reward:R=t=1TrtR=\sum_{t=1}^Tr^t。actor 的目标就是将 Total reward R 最大化。
Lee Hung-yi强化学习 | (1) Policy Gradient
把每一个episode的所有s和a的序列,叫做Trajectory

在给定policy的参数 θ\theta的情况下,可以计算每一个 Trajectory τ\tau存在的概率pθ(τ)p_{\theta}(\tau)
Lee Hung-yi强化学习 | (1) Policy Gradient
其中, p(st+1st,at)p(s_{t+1} | s_t,a_t)代表的是environment,一般我们没办法控制这一部分。我们能控制的是采取不同的θ\theta(policy网络的参数),进而影响 pθ(atst)p_\theta(a_t|s_t),最终对pθ(τ)p_\theta(\tau)产生影响。
Lee Hung-yi强化学习 | (1) Policy Gradient
给定一个 τ\tau 可以得到一局游戏的 R(τ)R(\tau),我们要做的就是调整actor中的参数,使得 R(τ)R(\tau) 最大化。但是注意 R(τ)R(\tau) 不是常量 scalable,而是随机变量 random variable,因为采取哪个action是有随机性的,而环境给出哪个state也是有随机性的。

所以对于 R 我们要算它的期望Rθˉ\bar{R_\theta}。穷举所有的trajectory τ\tau 并计算每个 τ\tau 出现的概率,最后算 τR(τ)pθ(τ)\sum_\tau{R(\tau)p_\theta(\tau)} 。或者这样理解:pθ(τ)p_\theta(\tau) 的分布中采样(sample)τ\tau ,然后计算 R(τ)R(\tau) 的期望。

那很明显我们要做的就是最大化Expected Reward,所以可以采用policy gradient来做。

3. Policy Gradient

Lee Hung-yi强化学习 | (1) Policy Gradient
为了使 Rθˉ\bar{R_\theta} 最大化,我们需要做gradient ascent(注意不是gradient descent!),即对 Rθˉ\bar{R_\theta} 求梯度。注意 Rθˉ\bar{R_\theta}R(τ)R(\tau) 是不可微的,但不影响。

Eτpθ(τ)[R(τ)logpθ(τ)]E_{\tau \sim p_\theta(\tau)}[R(\tau)\nabla log p_\theta(\tau)] 是无法计算的,所以可以sample出N个 τ\tau(近似表示) ,对每个 τ\tauR(τn)logpθ(τn)R(\tau^n)\nabla log p_\theta(\tau^n) 再求和取平均。

上面提到,而 p(st+1st,at)p(s_{t+1}|s_t,a_t) 由环境决定,我们无法知道,而且这一项本来也和θ\theta没关系,只能对 logpθ(τn)log p_\theta(\tau^n)计算梯度,本质上就是对pθ(atst)p_\theta(a_t|s_t)计算梯度。所以最后 R(τn)logpθ(τn)R(\tau^n)\nabla log p_\theta(\tau^n) 改写为 t=1TnR(τn)logpθ(atnstn)\sum_{t=1}^{T_n} R(\tau^n)\nabla log p_\theta(a_t^n|s_t^n)

最后变为 1Nn=1Nt=1TnR(τn)logpθ(atnstn)\frac{1}{N} \sum_{n=1}^N \sum_{t=1}^{T_n} R(\tau^n)\nabla log p_\theta(a_t^n|s_t^n):若在 stns_t^n 下执行 atna_t^n 使得 R(τn)R(\tau^n) 为正,则增加概率 pθ(atst)p_\theta(a_t|s_t) ;为负则减少概率。
Lee Hung-yi强化学习 | (1) Policy Gradient
在实际实验中,我们会让actor去和environment做互动,产生左边的数据。左边的方框是做sample,获得很多 (s, a) 的pair(代表在s下采取a,得到 R(τ)R(\tau) )。然后将这些数据送入训练过程中计算 logpθ(atnstn)\nabla log p_\theta(a_t^n|s_t^n) 。然后更新模型的参数θ\theta

注意数据只用一次,就是说更新一次参数后前面收集的所有数据就不能再用了(再利用更新后的参数 继续收集数据,以此循环),效率比较低。因此,Policy Gradient是on-policy的算法。
Lee Hung-yi强化学习 | (1) Policy Gradient
强化学习和有监督的分类问题有点相似,只不过监督分类问题的标签是人工标记的,而强化学习没有label,或者它的label是自己探索得到的,因此不是最优的选择,所以需要对每一步(样本)的损失进行加权。

4. Tricks

  • add a baseline
    Lee Hung-yi强化学习 | (1) Policy Gradient
    蓝色柱子的代表在某一state下,采取三种动作的概率pθ(atst)p_\theta(a_t|s_t),绿色箭头则代表每种动作的Reward,长的表示Reward比较大。

之前约定的做法:假如执行 action a 后 R 为正,则提高 action a 出现的概率;R 为负,则降低 action a 出现的概率。

但是可能某个游戏不管什么执行动作得到的 reward 都是正的(比如0-20),则若执行 action a 后 R 的增加量大,则 action a 出现概率增加得大;执行 action b 后R的增加量小,则 action b 出现概率增加得小。(注意在reward恒为正的情况下,看起来无论如何执行哪个 action ,概率都会增加,只是增加多少的问题) 因为所有action出现的概率和为1,那么在理想情况下,在归一化后相当于 action a 出现概率上升而 action b 出现概率下降。(即增加得少的归一化后相当于下降,增加得多的归一化后才上升)。因此,理想状态下, reward恒正问题不大。

问题是我们无法做到理想状态,实际上我们要进行sample操作。在sample中可能有些动作没有sample到,比如 action a(我们不知道这个action得到的reward是大是小),但归一化后 action a 出现的概率会必然下降(因为 action b/c 出现的概率无论如何都会上升,这样就把 action a 出现的概率给压下去了),这显然是不妥的。
Lee Hung-yi强化学习 | (1) Policy Gradient
为了解决这个问题,我们希望reward不要总是正的,将所以 R(τn)bR(\tau^n)-b ,b是一个baseline,这样如果一个 reward 是一个很小的正值,减掉b后就会变负(reward恒正时,只要一个动作被sample到,那么它对应的概率就可能上升;当他的reward比较小时,减掉b之后,就很有可能变为负的,此时就算被采样到,该动作出现的概率也会下降)。bE[R(τ)]b \approx E[R(\tau)] 可以用 R(τ)R(\tau) 的平均值代替。(当某个action被采样到且reward比较高时,才会增加该action的概率)
Lee Hung-yi强化学习 | (1) Policy Gradient

  • assign suitable credit
    Lee Hung-yi强化学习 | (1) Policy Gradient
    由上图可知,在同一场游戏中,不管其中的某个 action 是好是坏,总会乘上相同的权重 R,这显然也是不公平的。

比如上图左边部分,整场游戏的 reward 是+3,按规定其中三个 logpθ(atnstn)\nabla log p_\theta(a_t^n|s_t^n) 都要被乘上 3 的权重,但是 a3a_3 未必见得好,因为执行 a3a_3 后的即时得分是 -2。如果我们sample的次数够多,可能会看出 a3a_3 不够好,这个问题能够得到解决。但是实际中可能没办法搜集足够多的数据,所以在sample次数不够多的情况下,我们希望每个action的权重不同。
Lee Hung-yi强化学习 | (1) Policy Gradient
解决的方法是,不把整场游戏的 R(+5+0±2=+3)作为统一权重,而将执行该动作后剩下序列的【reward之和】作为该动作的权重。比如对于 (sb,a2)(s_b,a_2) ,它的权重应该为(+0-2=-2)。即执行某个 action 前得到多少 reward 都跟该 action 无关,该 action 只影响之后的游戏过程。

所以把权重中的 R(τn)R(\tau^n) 换成 t=tTnrtn\sum_{t'=t}^{T_n}r_{t'}^n ,其中 t 代表该 action 执行的时刻,T_n 代表游戏结束的时刻,即把当前的 r 以及之后每一步的 r 做一个求和。
Lee Hung-yi强化学习 | (1) Policy Gradient
还需要考虑的一点是,当前的 action 对之后游戏的影响会随之时间推移而减弱,所以我们要有 discount,在求和的每一步都乘上一个小于1的 γ\gamma(比如0.9),这样 action 之后的动作越多,即时分数乘上的 \gamma 越多,越往后得到reward就会打上更大的折扣。

R(τn)bR(\tau^n)-b 这一项称作Advantage Function,也叫优势函数。它表示在actor在sts_t下采取ata_t,相较于其它action(同样对于s_t)有多好。

上标 θ\theta 代表 actor 策略网络的参数。

5. 总结

  1. 介绍了actor、environment、reward function
  2. 在深度强化学习中,policy可以看成是参数为θ\theta的网络,输入state,输出采取各种action的概率
  3. 一轮游戏叫做episode
  4. trajectory={s1,a1,s2,a2,……},在给定policy的参数 θ\theta 的情况下,可以计算每一个 τ\tau 存在的概率 pθ(τ)p_\theta(\tau)
  5. 总的expected reward=τR(τ)pθ(τ)\sum_\tau{R(\tau)p_\theta(\tau)}
  6. 使用policy gradient ascend求 expected reward的最大值
    Lee Hung-yi强化学习 | (1) Policy Gradient
  7. 采集一次数据,更新一次参数后,要重新采集一次数据。

相关文章:

  • 2021-06-26
  • 2021-12-14
  • 2021-04-01
  • 2021-07-22
  • 2022-01-22
  • 2021-08-27
  • 2021-04-10
  • 2021-04-23
猜你喜欢
  • 2021-09-29
  • 2021-12-04
  • 2021-07-14
  • 2021-05-25
  • 2021-06-17
  • 2021-12-02
  • 2021-04-12
相关资源
相似解决方案