DQN_Human-level_control_through_deep_reinforcement_learning

  1. Q-learning回顾
  2. DQN解决的问题
  3. 具体算法
  4. 一些trick和说明

DQN可以说是深度强化学习方向的一个重要里程碑,由google于2015年发表,代表了一系列利用神经网络作为价值函数来拟合算法的开端,学习强化学习这么久,重新学习DQN,并阅读这篇发表在Nature上的论文还是非常重要的。在这个毕业之际,重新梳理我的知识体系的过程中,DQN被我作为首要目标,也是第一篇的RL学习论文来做。

Q-learning回顾

Q-learning的本质比较简单,即利用不断的经验试错来更新价值表格,从而作为下次动作价值判断的依据,以便使得长期的累积奖励值最大:

$$ Q^*(s,a) = \max\limits_{\pi}{\mathbb{E}[r_t + \gamma t_{t+1} + \gamma^2 t_{t+2} + …|s_t = s,a_t = a,\pi]} $$

根据此,也可以得到Q值的更新公式:

$$ Q(s,a) = Q(s,a) + \alpha(R(s) + \gamma \max\limits_{a’}Q(s’,a’) - Q(s,a)) $$

经过不断迭代,Q收敛之后,就可以得到近似最大和最准确的Q值表,根据这个表格,可以得到相应的策略

$$\pi(s)= \text{arg}\max\limits_{a}\,Q(s,a)$$

关于Q-learning就大概如此。

DQN解决的问题

造成Reinforcement Learning的训练不稳定甚至难以收敛的原因大概是:

  • 观测序列的相关性
  • Q值的微小改变可能会引发策略的急剧改变,同时导致数据分布重大变化
  • 当前动作价值Q和目标价值$R(s) + \gamma \max\limits_{a’}Q(s’,a’)$的相关性

DQN则利用两个关键思想解决了RL训练不稳定的问题:

  • 第一,利用生物学激励机制——经验重放来随机化数据,因此排除了数据序列的相关性,使得数据分布变化更加平缓。

  • 第二,使用迭代更新的方法来更新动作价值Q,仅定期地更新Q逼近目标价值,以此消除动作价值和目标价值的相关性。

相比于强化学习中其他的稳定算法,例如Q-iteration,重复迭代训练几百次网络,DQN的方法更加高效,并且更加适合深度网络使用。

具体算法

DQN主要利用了两个设计:一是经验重放(Experience play),二是分别使用Q网络和目标Q网络来保存动作价值,并且用于交互更新。这一部分,我将首先介绍DQN的整个流程,再分析这两个主要设计分别有何优势。

DQN_algorithm

上图即为DQN的整个算法流程,首先从历史数据D中提取N(经验池大小)条记录到经验池中保存,并初始化Q和target-Q网络。然后是内外两层循环,外层循环表示强化学习的episode的过程,即每次环境交互次数达到T(交互次数上限)或者进入终止状态后,就需要重新随机一个初始化状态,重新交互,并在交互过程中更新网络;内层循环表示Agent和Environment的一次交互,同时也是网络的一次更新,针对当前状态$s_t$,利用$\epsilon-greedy$策略产生相应的动作$a_t$,经过环境交互之后得到当前奖励值$r_t$、环境下一状态$s_{t+1}$,之后将这次交互的信息保存$e_t=\{s_t,a_t,r_t,s_{t+1}\}$,并存入经验池$D$中,然后再从$D$中采样一个批次的数据(预先设定batch_size)用于网络更新,内层循环每次都更新Q网络,循环C次更新一次target-Q网络。

其中Q网络更新的损失函数是:

$$
\begin{aligned}
L_i(\theta)&=\mathbb{E}_{s,a,r}[(\mathbb{E}_{s’}(y|s,a)-Q(s,a|\theta_i))^2] \\
&=\mathbb{E}_{s,a,r,s’}[(y-Q(s,a|\theta_i))^2]+\mathbb{E}_{s,a,r}[\mathbb{V}_{s’}[y]]
\end{aligned}
$$

最后一项为目标的方差,与更新的参数$\theta_i$无关,可以忽略。

一些trick和说明

经验重放机制的优点:

  • 第一,每一步的交互结果都被潜在地用于权重更新,因此数据的利用效率特别高

  • 第二,如果从连续采样得到的数据中学习,会导致采样数据的强相关性,而DQN从数据分布D中随机采样打破了这种时序上的相关性,可以减小更新的方差。

  • 第三,具有off-policy的好处,因为当采用on-policy的方式,当前的参数会决定下一步的采样数据,如果策略在更新,那么采样得到数据的分布也会迅速变化,如果二者构成循环(本次策略选择向右,上次策略向左,导致采样数据会向右,和之前的数据分布相反)可能会使参数陷入局部最小值,甚至导致灾难性的发散。经验重放决定了数据分布是很多次历史数据的平均,因此可以使学习过程平滑,从而避免参数的震荡和发散的问题。

使用两个网络(Q和target-Q)的优点:

  • 相比于普通Q-learning只有一个Q值表的情况,DQN的两个网络更加稳定。因为传统Q-learning的更新可能会出现$Q(s_t,a_t)$增大导致$Q(s_{t+1},a)$同样增大,因此会增大相应的策略$y_j$,就可能会导致策略的震荡和发散,而DQN通过使用较早参数的traget-Q网络作为策略,因此Q的更新和策略更新就会有一个时间差,使得策略震荡和发散的概率非常小。

除了这两个最终要的改变之外,DQN还有两个Trick:

  • 不使用单帧图像作为输入,而是使用相邻的4帧图像作为输入,保证了输入信息足够agent做出动作判断,其中,这四帧的动作沿用上次决策的动作不变。算法中的函数$\phi$描述的就是将连续四帧动画形成输入的过程。

  • 奖励值采取截断的办法,截断在区间$(-1,1)$内,这样设置可以控制loss函数的误差也在区间$(-1,1)$内,这种办法可以有效提升算法的稳定性。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以其他方式联系。

💰

×

Help us with donation