DQN伪代码解析

DQN伪代码:

1. 在电脑中开辟内存,容量为N,记作D

2. 初始化动作价值函数Q,随机初始化,由于是DQN,使用了深度学习,所以随机初始化的是神经网络的权重参数θ  这个Q网络的输入是具体的“真实的status”,比如游戏里的一帧画面,输出的是一个Q值。

3.初始化目标动作价值函数Qhat,其参数和Q一样(即,神经网络权重参数一样)

4. 开始循环,外侧1~M是episode

5. 初始输入,假设我们输入的是一张游戏起始状态的截图,那么它就是x1,也就是status的第一幕s1,经过神经网络的处理变成Φ1

6. 目标是经过M轮循环后得到完美的Q表(当Q表完善后,相当于智能体训练完成)。

7. 由于要将status从第一幕一直延申到第T慕,所以开始第二轮循环:1~T

8. 设置一个参数ε,用于产生一定的几率去进行探索,如果没有被选中进行探索,则采用贪心算法选取最大Q值。注意!此处最大值选用的是Q表,不是Qhat(注意,虽然说是"Q表",其实它是一个神经网络)

9. 总之在一个选定的at的情况下,送入模拟器,可以得到一个rt,并且会得到第二张图片xt+1(也就是游戏在第二个状态下的截图)。

10. 将这个截图xt+1和之前的状态st,以及动作at进行整合,输入神经网络Φ做处理,得到Φt+1,也就是Φ也进行一遍更新。

* 截至此处请注意,之前相当于是用Q表来进行动作at的选择(Q表上哪个Q值高就选择哪个),但仅仅是进行动作选择,没有实际上利用Q表去计算价值函数. 

11. 将这一步的流程储存到内存D里面,可以用于后面的采样。

12. 定义一个批次的大小,然后按照这个大小在D中存储的所有SARS组合里进行采样,并算出对应的y值。注意,关键点在于,此处的y计算要用Qhat表上对应的值来计算。而且,yj是用j+1的数据计算出来的。

*此处是真正计算价值函数的过程,注意是对之前通过Q表更新的一群SARS组合进行采样,采出来的结果在计算价值函数时,使用的Q值不是来源于Q表而是来源于Qhat表, 

**这种“at的选择”和“价值函数更新”使用不同Q表(分别用Q表和Qhat表)的机制,体现了Q-learning离轨的计算思想。

13. 将求出来的yj作为标准去和Q表算2范数

*注意,这个2范数是整个网络的loss函数,通过把这个loss函数训练到接近于0,实现对网络的训练。

**Loss函数的表述里,yj是一个定值,相当于是标签,此时训练的是Q表(或者称之为Q网络)中的θ。

14. 规定的轮数更新Qhat:每隔C轮,把Q网络赋值给Qhat网络。

***所以整个DQN的流程是:

(1) 先在某一幕s下,用Q去选择行动a,得到一组SARS组合。录入存储空间D

(2) 在空间D中采样,对采样结果:用Qhat去计算价值函数,形成标签

(3) 用标签进行监督学习,优化Q网络

(4) 定期将Q的参数复制给Qhat

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值