文章目录
DQN
前言
DQN 作为 value-based 的强化学习方法,擅长处理离散情境下的强化学习问题。其本质是 deep learning 版本的 Q-learning,所以其基本模型和 Q-learning 类似,基于TD时间差分设置目标函数,并 ϵ − g r e e d y \epsilon-greedy ϵ−greedy 的贪心策略进行探索和学习。在此基础上利用深度学习的优势,将难以维护的Q值表用一个神经网络来维护,形成了 Deep Q-Learning(NIPS 2013)。事实上,我们可以认为 deep learning 在其中的主要作用只是替换了 Q 值表,而算法的核心思想仍然可以认为是一种启发式搜索。
在此基础上,Nature DQN (NIPS 2015) 通过解耦目标Q值动作的选择和目标Q值的计算,提高了算法效率。此后又在 Nature DQN 的基础上产生了三种独立的优化策略: Deep Reinforcement Learning with Double Q-learning (AAAI 2016) 在计算 TD 值中的目标 Q值时,先从当前网络中获取动作,再从目标网络中计算;Dueling Network Architectures for Deep Reinforcement Learning (ICML 2016) 将 Q 值拆分成状态值 V 和动作的优势值 A;Prioritized Experience Replay (ICLR 2016) 认为 TD 值越大的样本对训练越有利,所以在经验池中,有更大概率选取那些 TD 值更大的样本进行训练;以上三种方法都优化了原始 DQN ,并且这几种方法可以被组合起来使用,后续的一些工作主要就做了融合的尝试,但是因为这种融合怪工作本身没有其他的创新点,所以这里暂且忽略不表。
基本模型
DQN
DQN 是深度版本的 Q-learning,主要基于 TD 时间差分方法,如果不熟悉时间差分,可以异步本人对强化学习数学模型的介绍 Breif Introduction for Reinforcement Learning (Background Info) 中 Temporal-Difference 一节。
数学记号
为了方便介绍,这里先重新给出接下来要用到的数学记号:
符号 | 含义 |
---|---|
S S S | 状态集合 |
s s s | 某状态 |
A A A | 动作集合 |
a a a | 某动作 |
R ( s ) R(s) R(s) | s s s 状态的回报值 |
Q ( s , a ) Q(s,a) Q(s,a) | s s s 状态采取动作 a a a 产生的 Q Q Q 值 |
π : s → a \pi:s\rightarrow a π:s→a | 某策略 |
公式推导
根据 TD 时间差分方法,我们要最小化当前状态值和目标状态值之间的差,假设当前状态为 s t s_t st,选取动作为 a t a_t at,次状态 s t + 1 s_{t+1} st+1, 那么我们容易得到当前值 y i ′ = Q ( s t , a t ) y_i'=Q(s_t, a_t) yi′=Q(st,at) 和目标值 y i = R ( s t + 1 ) + Q ( s t + 1 , π ( s t + 1 ) ) y_i=R(s_{t+1})+Q(s_{t+1},\pi(s_{t+1})) yi=R(st+1)+Q(st+1,π(st+1)) 其中 π ( s ) = arg max a Q ( s , a ) \pi(s)=\arg\max_a Q(s,a) π(s)=argamaxQ(s,a) 由此我们得到优化目标 td_error l o s s = M S E ( y i , y i ′ ) loss=MSE(y_i,y_i') loss=MSE(yi,yi′) 用该损失函数对 Q Q Q 进行梯度下降即可。
算法流程
- S1:初始化 Q Q Q 的网络参数,清空经验集合 D D D ,初始化 s s s 为初始状态
- S2:计算 Q ( s )