DDPG核心思想

        最近看了莫烦python的DDPG-update2,这个代码很经典,本人新手读了很久才读懂记录一下。

        DDPG的核心是Actor-Critic算法,相当于是后者的升级版。顾名思义,Actor就是用来决策的神经网络,Critic就是用来对Actor的行动进行评分的,因此,在更新神经网络的参数时,Actor靠的是给出的行动在Critic上的得分来更新的

self.a = self._build_a(self.S,)
# Actor神经网络根据状态S,给出决策
q = self._build_c(self.S, self.a, )
# Critic神经网络根据状态S和决策a,给出评分q
a_loss = - tf.reduce_mean(q)
# 这个函数就是求平均值,注意负号
self.atrain = tf.train.AdamOptimizer(LR_A).minimize(a_loss, var_list=a_params)
# 训练Actor神经网络使得a_loss最大

        和Actor-Critic算法不同的是,DDPG和DQN一样,Actor和Critic都有两套神经网络:估计神经网络和现实神经网络,上面提到的都是估计神经网络,在代码中,占主导作用的是估计神经网络,现实神经网络是可以通过估计神经网络进行软更新实现

ema = tf.train.ExponentialMovingAverage(decay=1 - TAU) 
def ema_getter(getter, name, *args, **kwargs):
    return ema.average(getter(name, *args, **kwargs))
target_update = [ema.apply(a_params), ema.apply(c_params)] 

        这个什么功能可以看(4条消息) Tensorflow中tf.train.ExponentialMovingAverage()函数_冯爽朗的博客-CSDN博客

        至于Critic网络怎么更新的呢?就是用的这个现实网络和估计网络之间的差异来更新的:

a_ = self._build_a(self.S_, reuse=True, custom_getter=ema_getter)
q_ = self._build_c(self.S_, a_, reuse=True, custom_getter=ema_getter)
# 用两个现实网络算出现实的决策和q
q_target = self.R + GAMMA * q_
# R是达到目标时的奖励,这个就是相当于DQN里面的Q现实,可以就想为一个得分而已
td_error = tf.losses.mean_squared_error(labels=q_target, predictions=q)
# 估计和现实得分差异的平方,再求平均
self.ctrain = tf.train.AdamOptimizer(LR_C).minimize(td_error, var_list=c_params)
# 训练

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值