[强化学习笔记专题(二)]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对比