DQN学习——paddle(百度飞桨训练营)

1.值函数Q的近似

Q表格的作用就是输入(s,a),通过查询Q表格,输出Q值。希望用带参数的函数代替Q表格
在这里插入图片描述
输入一个状态,有多少个动作A就输出多少个Q值。有点觉得像Q-learning
在这里插入图片描述

Q-learning

从环境中获取到状态State
查表找到对应的所有动作的Q值
找到最大的Q值,输出其对应的动作给环境
做出动作从环境中拿到下一步的奖励r
当前Q值逼近target-q
在这里插入图片描述

DQN

在这里插入图片描述
就是用神经网络代替Q表格

更新和训练

输入一个状态,输出对应的Q值,Q值是一个向量,比如[1,2,3,4]这种
在这里插入图片描述

经验回放——解决样本利用率低

存储一批经验,然后打乱顺序从中选取一些小的batch去更新网络。
在这里插入图片描述

###rpm.append((obs, action, reward, next_obs, done))往经验池中增加经验

class ReplayMemory(object):
    def __init__(self, max_size):
        self.buffer = collections.deque(maxlen=max_size)

    def append(self, exp):
        self.buffer.append(exp)

    def sample(self, batch_size):
        mini_batch = random.sample(self.buffer, batch_size) ##在经验池(obs, action, reward, next_obs, done)中随机取样
        obs_batch, action_batch, reward_batch, next_obs_batch, done_batch = [], [], [], [], []

        for experience in mini_batch:##将取样的经验条进行分解
            s, a, r, s_p, done = experience
            obs_batch.append(s)
            action_batch.append(a)
            reward_batch.append(r)
            next_obs_batch.append(s_p)
            done_batch.append(done)

        return np.array(obs_batch).astype('float32'), \
               np.array(action_batch).astype('float32'), np.array(reward_batch).astype('float32'), \
               np.array(next_obs_batch).astype('float32'), np.array(done_batch).astype('float32')

    def __len__(self):
        return len(self.buffer)

固定Q目标——解决算法不稳定

在这里插入图片描述
需要定期的去拷贝网络,把target_Q中的maxQ内容固定住

DQN流程图

learn函数就是实现了红色的部分(Q预测与Q目标结合求解LOSS,再去更新Q网络)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值