策略梯度说明

如有错误,欢迎指正。

说明策略梯度

 

∇θEx[f(x)]=∇θ ∑xp(x) f(x)

=∑x ∇θp(x) f(x)

=∑xp(x)【∇θp(x)/p(x)】f(x)

=∑xp(x)  ∇θlogp(x)  f(x)

=Ex[f(x) ∇θlogp(x)]

策略梯度的损失函数是

neg_log_prob =tf.reduce_sum(-tf.log(self.all_act_prob)*tf.one_hot(self.tf_acts,self.n_actions), axis=1)
loss = tf.reduce_mean(neg_log_prob *self.tf_vt)

其实重点是self.all_act_prob,也就是logp(x),它代表的是action的概率分布,在神经网络的正向传播中,是选择出来的action的概率,由于在Policy Gradients中,神经网络的输入是states,输出是经过softmax层的概率值,所以是连续的值,没有传统意义的误差,它的误差来自梯度的下降预测,也就是logp(x),但是一个回合中,每个动作的产生的效果是不一样的,  在达到最终结果的方向上作用也是不一样的,就是左图的表示,但其实左图也是总体下降的部分图片,中间图和右图是加了Vt值的图片,vt的作用是通过每次的reward值,选择了下降的方向,至于哪条是最优的下降方向,在这里交给了神经网络计算的概率去选择,(一般优化是用梯度),通过这样的循环,去找到最好的策略。

如何去找到下降方向vt,通过是奖励值,不过是个衰减的奖励值,

        def _discount_and_norm_rewards(self):
            discounted_ep_rs = np.zeros_like(self.ep_rs)
            running_add = 0
            for t in reversed(range(0,len(self.ep_rs))):
                running_add =running_add*self.gamma+self.ep_rs[t]
                discounted_ep_rs[t] = running_add

            
            discounted_ep_rs -= np.mean(discounted_ep_rs)
            discounted_ep_rs /=np.std(discounted_ep_rs)
            return discounted_ep_rs

看以上代码,在计算discounted_ep_rs[]时,是先从t时间开始计算的,说明这里的reward是目标导向的,以gamma值为学习速率,例如self.ep_rs[t]的第t步时负值为-13,通过上式的迭代,running_add到达正值时,这时是t-n步,说明在该正值(t-n步)前面的步数(1到t-n步)是这一回合的正确选择,是可以进行梯度下降来训练扩大的步骤。

再来看neg_log_prob =tf.reduce_sum(-tf.log(self.all_act_prob)*tf.one_hot(self.tf_acts,self.n_actions), axis=1)

loss = tf.reduce_mean(neg_log_prob *self.tf_vt)

self.train_op = tf.train.AdamOptimizer(self.lr).minimize(loss)

由于tensorflow只有minimize,所以选择  (这里有负号)- tf.log(self.all_act_prob),

所以问题的最后要反应出输赢好坏,通过输赢好坏来判断reword值。

 

以下是知乎上看来的Actor-Critic的通俗讲解


链接:https://www.zhihu.com/question/56692640/answer/356076696

 

要想深入理解还得系统地看书看公式。下面提供两个不同的视角,看看能不能帮助你理解。

视角一:从Q-Learning过渡到Actor-Critic

经典的Q-learning可以拆成两部分:一部分是Q(s,a)存储了在状态s下执行a动作后,执行greedy策略的期望收益,另外一部分是在决定执行哪一个动作的时候,把每个候选的a代入到Q(s,a),求出具体的值后,根据e-greedy策略来选择其中一个a作为真正执行的动作。这里用到的e-greedy策略是非参数化(因为e是一个固定值)的,是个固定的策略,所以通常被我们忽略掉这部分,注意力都放在Q值更新上;但如果把这个e-greedy策略替换成参数化的策略,那么就变成了actor-critic。上述所谓的第一部分就是critic,第二部分就是actor。从这个角度看,Q-learning可以视为actor为固定策略的特殊的actor-critic。

视角二:从Policy Gradient过渡到Actor-Critic

Policy Gradient经典算法REINFORCE的基本思路是,用pi(s,a)来直接决定在s状态下,选择动作a的概率。每次学习的时候,在s状态采取动作a,然后follow当前policy一条路走到黑,看看最后的return是多少。如果return不错,那么把pi(s,a)的值稍微加大一点,鼓励下次继续选择动作a。但是每当现有policy稍微一迭代更新,在s状态采取动作a后,依照这个policy开始一条路走到黑最后的return就变化,那么就会导致我们一下子鼓励a,一下子不鼓励a,不利于训练(尤其是用神经网络等非线性模型作为Function Approximator的时候)。一个改进思路是干脆我们把return的平均值记下来,取代之前用的单次simulation的return,作为s状态采取动作a到底好不好的度量。好处是return的平均值(近似Q(s,a))变化就慢多了,起码正负号稳定多了。这里用return平均值近似的Q(s,a)就是Critic。前面的pi(s,a)就是actor。

 

其实还有一个有点邪门的视角:actor就好比是你,critic就好比你妈。你做一件事情,比如抓蜜蜂,结果被蜇疼了,下次你再抓蜜蜂的概率就减小了,这个就是policy gradient。你刚手伸出去要去抓蜜蜂,你妈就说,别抓,十有八九会被蜇疼。你听了后停止了抓蜜蜂,并且下次抓蜜蜂的概率减小了,这个就是actor-critic。你每次看见蜜蜂的时候都问你妈,抓蜜蜂好还是不抓蜜蜂好?你妈说不抓蜜蜂好,通常你听你妈的话就不抓蜜蜂了,偶尔心情不好的时候(以e的概率)还要去抓蜜蜂,这个就是Q-learning。那么妈妈是怎么知道抓蜜蜂会疼的?当然她也是抓过蜜蜂的(Q-value update)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值