[强化学习笔记专题(二)]Nature DQN

DQN (Nature)
一、 算法流程:
定义可配置参数
episode 数量 M
最大仿真时间 T,$\epsilon-greedy$参数$\epsilon_{low}$,$\epsilon_{high}$
batch size $N​$
折扣率 $\gamma$,学习率 $\alpha$等优化器参数
Soft update 频率 $C​$

初始化
初始化 replay buffer 大小N
初始化 Q 网络 $Q​$ ,使用随机权值 $\theta​$
初始化 TargetQ 网络 $\hat{Q}$ 权值 $\theta^-$,使用 Q 网络的权值 $\theta$

DQN 一个Episode的流程
使用 $\epsilon-greedy$ 策略 选择一个 action $a_t$
执行当前 action $a_t$, 获取下一个状态 $s_{t+1}$ 和 reward $r_{t}$
将当前状态$s_t$赋值为下一个状态 $s_{t+1}$
将五元组$\langle s_t,a_t,r_t,s_{t+1},done \rangle $存入 replay buffer $D$
训练Q网络$Q​$:
[Pre-condition]训练网络的前提是 replay buffer 的已有五元组数量大于 batch size $N$
从 replay buffer $D​$中随机选取 batch size $N​$条数据$\langle s_j,a_j,r_j,s_{j+1},done\rangle​$ $D_{selected}​$
计算目标Q值$y​$, $y​$是一个向量,${y_j \in y |j\in[0,N]} ​$,大小为 batch size $N​$
当 $D_{selected}​$[j] 中 $done=True​$ 时,即终局状态,此时 $y_j=r_j​$
当 $D_{selected}$[j] 中 $done=False$ 时,即非终局状态,此时$y_i=r_j+\gamma max_{a’}\hat{Q}(s_{j+1},a’;\theta^-)$, 注意这里是用的 TargetQ 网络进行的

使用优化器进行梯度下降,损失函数是(一个batch里面) $(y-Q(s,a;\theta))^2​$,注意这里使用的是Q网络进行,来让计算出来的目标Q值与当前Q网络输出的Q值进行MSE
每 $C$ 次 episode,soft update 一次 target net 参数,$\theta^- = \theta$

不断迭代Episode流程$M$次

二、对应代码完整代码地址:

初始化
初始化 replay buffer 大小N
初始化 Q 网络 $Q$ ,使用随机权值$\theta$
初始化 TargetQ 网络 $\hat{Q}$ 权值 $\theta^-$,使用 Q 网络的权值 $\theta$

$\epsilon-greedy$ 策略 定义,这里对$\epsilon$进行一个随时间步的迁移而减小的策略,使其动作选择的不确定性逐渐减小。

Replay buffer的定义

Q网络训练

Soft update

三、实验结果环境 cart-pole-v0 (期望回报是200)

四、DQN参考论文流程:
五、Double DQNDQN存在的问题是Q function容易过拟合,根据状态 $s_{t+1}$ 选择动作 $a_{t+1}$ 的过程,以及估计 $Q(s_{t+1},a_{t+1})​$ 使用的同一个Q net网络参数,这可能导致选择过高的估计值,从而导致过于乐观的值估计。为了避免这种情况的出现,可以对选择和衡量进行解耦,从而就有了使用 Double DQN 来解决这一问题。
Double DQN与DQN的区别仅在于$y$的求解方式不同,Double DQN根据Q网络参数来选择动作$a_{t+1}$,再用Target Q网络参数来衡量$Q(s_{t+1},a_{t+1})$的值。
反映在代码上,就是训练的时候选择Q的时候有点变动:

六、DQN,DDQN实验结果对比可以看到DoubleDQN的表现比 DQN稳定

七、 Dueling DDQN八、 Dueling DQN, DDQN, DQN对比