zoukankan      html  css  js  c++  java
  • Policy Gradient

    策略梯度(Policy Gradient)

    在一个包含Actor、Env、Reward Function的强化学习的情景中,Env和Reward Function是你所不能控制的。

    Actor的策略 π pi π是一个参数为 θ heta θ的网络

    • 输入:以向量或者矩阵表示的机器观察
    • 输出:关联到输出层某个神经元的一个动作
      在这里插入图片描述
      在这里插入图片描述
      策略执行的过程可以表示为一个迹(Trajectory) τ = { s 1 , a 1 , s 2 , a 2 , . . . , s T , a T } au={s_1,a_1,s_2,a_2,...,s_T,a_T} τ={s1,a1,s2,a2,...,sT,aT}

    在这里插入图片描述
    p θ ( τ ) = p ( s 1 ) p θ ( a 1 ∣ s 1 ) p ( s 2 ∣ s 1 , a 1 ) p θ ( a 2 ∣ s 2 ) . . . = p ( s 1 ) ∏ p θ ( a t ∣ s t ) p ( s t + 1 ∣ s t , a t ) p_{ heta}( au)=p(s_1)p_ heta(a_1|s_1)p(s_2|s_1,a_1)p_ heta(a_2|s_2)...=p(s_1)prod p_ heta(a_t|s_t)p(s_{t+1}|s_t,a_t) pθ(τ)=p(s1)pθ(a1s1)p(s2s1,a1)pθ(a2s2)...=p(s1)pθ(atst)p(st+1st,at)

    引入奖励机制的话:
    在这里插入图片描述
    策略 π pi π的奖励期望:
    R ‾ θ = ∑ R ( τ ) p θ ( τ ) = E τ ∼ p θ ( τ ) [ R ( τ ) ] overline{R}_ heta=sum R( au)p_ heta( au)=E_{ au sim p_ heta( au)}[R( au)] Rθ=R(τ)pθ(τ)=Eτpθ(τ)[R(τ)]

    策略 π pi π的总奖励:
    R ( τ ) = ∑ t = 1 T r t R( au)=sum_{t=1}^Tr_t R(τ)=t=1Trt

    策略梯度的计算方法:
    ∇ R ‾ θ = ∑ R ( τ ) ∇ p θ ( τ ) = ∑ R ( τ ) p θ ∇ p θ ( τ ) p θ ( τ ) abla overline{R}_ heta = sum R( au) abla p_ heta( au)=sum R( au)p_ heta frac{ abla p_ heta( au)}{p_ heta( au)} Rθ=R(τ)pθ(τ)=R(τ)pθpθ(τ)pθ(τ)

    由上式,计算策略梯度是, R ( τ ) R( au) R(τ)不需要必须是可微的,甚至可以是一个黑盒。因为不需要对它进行求导。

    借助 ∇ f ( x ) = f ( x ) ∇ l o g f ( x ) abla f(x)=f(x) abla logf(x) f(x)=f(x)logf(x),可得:

    ∇ R ‾ θ = ∑ R ( τ ) p θ ( τ ) ∇ l o g p θ ( τ ) = E τ ∼ p θ ( τ ) [ R ( τ ) ∇ l o g p θ ( τ ) ] abla overline{R}_ heta = sum R( au)p_ heta( au) abla logp_ heta( au)=E_{ ausim p_ heta( au)}[R( au) abla logp_ heta( au)] Rθ=R(τ)pθ(τ)logpθ(τ)=Eτpθ(τ)[R(τ)logpθ(τ)] ≈ 1 N ∑ n = 1 N R ( τ n ) ∇ l o g p θ ( τ n ) = 1 N ∑ n = 1 N ∑ t = 1 T n R ( τ n ) ∇ l o g p θ ( a t n ∣ s t n ) approx frac{1}{N}sum_{n=1}^{N}R( au^n) abla logp_ heta( au^n)=frac{1}{N}sum_{n=1}^Nsum_{t=1}^{T_n}R( au^n) abla logp_ heta(a_t^n|s_t^n) N1n=1NR(τn)logpθ(τn)=N1n=1Nt=1TnR(τn)logpθ(atnstn)

    也就是说,我们是以采样求和的方式来逼近概率分布 p θ ( τ ) p_ heta( au) pθ(τ)下的期望的。

    在给定策略 π θ pi_ heta πθ的条件下,我们采用梯度下降类似的策略梯度上升的方法来更新模型,注意每一个迹(Trajectory) 仅使用一次。
    在这里插入图片描述
    可以使用Tensorflow或者pyTorch来实现这个过程:
    在这里插入图片描述
    策略梯度在实现上有一些小技巧:
    技巧一:添加基准线
    在这里插入图片描述
    在这里插入图片描述
    在很多情况下,reward可能都只有正的,没有负的。因为实际计算是使用采样的方法来逼近期望的,所有概率的和应该等于1以保证概率有意义,那么上图中没有被采样到的动作a的概率会下降。

    梯度计算时,在奖励函数R的部分添加一个负的偏移量b,这个偏移量b可以简单取整个奖励函数在迹 τ au τ上的期望,这样就形成了一个基准线。高于基准线算出来的log概率是正的,低于基准线算出来log概率是负的。这会使得计算梯度的每一项有增有减,并且只有reward高于基准线,才让其action概率增加,从而解决了单纯因为没有采样导致某个action概率大规模下降的问题。

    技巧二:采取更恰当的奖励:
    在这里插入图片描述
    以左半部分为例,上图的意思是,计算action a 1 a_1 a1的reward,原本是只看 ( s a , a 1 ) (s_a,a_1) (sa,a1)这一个pair,但由于执行了 a 1 a_1 a1导致执行 a 3 a_3 a3时会被扣2分,所以 a 1 a_1 a1的reward应该是+3而不是+5。

    所以计算reward的更为恰当的方法是,计算执行该步action后的reward总和。

    更近一步还可以添加一个折扣因子 γ gamma γ
    在这里插入图片描述
    因为我们计算一个action的reward是采用对当前步及以后步求和方式进行的,所以前面步的action会对后面步的action的reward产生影响。引入 γ gamma γ是为了使得距离越远的action对当前action的reward影响越小。

    最后,b也可以是状态独立的,即每一个state都独有一个b。

    还有一种方法是采用基于Actor-Critic模式的优势函数(Advantage function) A θ ( s t , a t ) A^ heta(s_t,a_t) Aθ(st,at)来替代 R ( τ n ) − b R( au^n)-b R(τn)b。优势函数衡量了在观察 s t s_t st下采取动作 a t a_t at而不是其他动作的好坏程度,由critic给出。

  • 相关阅读:
    关于SVN出现 svn working copy locked的原因及解决方法
    安装SVN客户端重启电脑之后,右键未出现SVN选项的原因
    Django—工程创建以及models数据库易错点
    tornado之文件上传的几种形式form,伪ajax(iframe)
    python 收录集中实现线程池的方法
    python 多线程,进程的理解
    python之路 序列化 pickle,json
    collections模块方法详解
    python之路 socket,socketsever初探
    SQL- 约束
  • 原文地址:https://www.cnblogs.com/wanghongze95/p/13842468.html
Copyright © 2011-2022 走看看