美文网首页
Policy Gradient

Policy Gradient

作者: 六回彬 | 来源:发表于2020-04-29 18:38 被阅读0次

    Basic Components


    在强化学习中,主要有三个部件(components):actor、environment、reward function。其中env和reward function是事先就定好的,你不能控制的。唯一能调整的是actor的policy,使actor能获得最大的reward。

    Policy of Actor

    • Policy \pi 是一个参数为\theta的网络
      • input:以向量或矩阵表示的机器的observation
      • output:对应于输出层中的神经元的每个动作


    Example: Playing Video Game

    -------------------------------------------------------------------


    actor 的目标就是将 Total reward R 最大化。

    Actor, Environment, Reward


    其中 代表的是environment,一般我们没办法控制这一部分。我们能控制的是采取不同的(policy网络的参数),进而影响,最终对产生影响。

    给定一个可以得到一局游戏的R,我们要做的就是调整actor中的参数,使得最大化。但是注意不是常量scalable,而是随机变量random variable,因为采取哪个action是有随机性的,而环境给出哪个state也是有随机性的。

    所以对于R我们要计算他的期望\overline R_\theta。穷举所有的trajectory\tau并计算每个\tau出现的概率,最后计算\sum_\tau R(\tau)p_\theta(\tau)。或者可以这样理解,从p_\theta(\tau)的分布中采样出一个\tau,然后计算R(\tau)的期望。

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

    Policy Gradient


    为了使得最大化,我们需要做gradient ascent,即对求梯度,注意中没有必要是可微的,但不影响。是无法计算的,所以sample出N个,对每个求在求和求平均。

    如下:因为


    由环境决定,我们无法知道,并且该项本来和没有关系,只能对计算梯度,本质上就是对计算梯度,最后课改写为

    若在下执行使得为正,则增加概率,为负责减少在执行的几率。

    在实际实验中,我们会让actor去和environment做互动,产生左边的数据。左边的方框是做sample,获得很多 (s, a) 的pair(代表在s下采取a,得到)。然后将这些数据送入训练过程中计算 ,然后更新模型的参数

    注意数据只用一次,就是说更新一次参数后前面收集的所有数据就不能再用了,效率比较低。因为policy gradient ascend是on-policy的算法。

    采集一次数据,更新一次参数后,要重新采集一次数据。


    minimize cross entropy就是maximize likelyhood

    Tip 1: Add a Baseline

    蓝色柱子的代表在某一state下,采取三种动作的概率,绿色箭头则代表每种动作的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 出现概率下降。(即增加得少的归一化后相当于下降,增加得多的归一化后才上升)


    问题是在sample中可能有些动作没有sample到,比如 action a(我们不知道这个action得到的reward是大是小),但归一化后 action a 出现的概率会必然下降(因为 action b/c 出现的概率无论如何都会上升,这样就把 action a 出现的概率给压下去了),这显然是不妥的。

    为了解决这个问题,我们希望reward不要总是正的,所以将R(\tau^n)-b,
    ,b是一个baseline,这样如果一个 reward 是一个很小的正值,减掉b后就会变负。b\approx E[R(\tau)]可以用R(\tau^n)的平均值代替。

    Tip 2: Assign Suitable Credit


    由上图可知,在同一场游戏中,不管其中的某个 action 是好是坏,总会乘上相同的权重 R,这显然也是不公平的。

    比如上图左边部分,整场游戏的 reward 是+3,按规定其中三个\nabla\log p_\theta(a_t^n|s_t^n)都要被乘上 3 的权重,但是a_3未必见得好,因为执行a_3后的即时得分是 -2。如果我们sample的次数够多,可能会看出a_3不够好,这个问题能够得到解决。但是实际中可能没办法搜集足够多的数据,所以在sample次数不够多的情况下,我们希望每个action的权重不同。

    解决的方法是,不把整场游戏的 R(+5+0+-2=+3)作为统一权重,而将执行该动作后剩下序列的【reward之和】作为该动作的权重。比如对于(s_b,a_2) ,它的权重应该为(+0-2=-2)。即执行某个 action 前得到多少 reward 都跟该 action 无关,该 action 只影响之后的游戏过程。


    还需要考虑的一点是,当前的 action 对之后游戏的影响会随之时间推移而减弱,所以我们要有 discount,在求和的每一步都乘上一个小于1的(比如0.9),这样 action 之后的动作越多,即时分数乘上的 越多,越往后得到reward就会打上更大的折扣。

    \ R(\tau)-b 这一项称作Advantage Function,也叫优势函数。它表示在actor在s_t下采取a_t,相较于其它action有多好。

    上标 \theta代表采用参数为\theta的policy 的 actor 。

    相关文章

      网友评论

          本文标题:Policy Gradient

          本文链接:https://www.haomeiwen.com/subject/ftjgwhtx.html