dqn

  1. DL与RL结合的问题
    DL需要大量带标签的样本进行监督学习;RL只有reward返回值,而且伴随着噪声,延迟(过了几十毫秒才返回),稀疏(很多State的reward是0)等问题;
    DL的样本独立;RL前后state状态相关;
    DL目标分布固定;RL的分布一直变化,比如你玩一个游戏,一个关卡和下一个关卡的状态分布是不同的,所以训练好了前一个关卡,下一个关卡又要重新训练;
    过往的研究表明,使用非线性网络表示值函数时出现不稳定等问题。
  2. DQN解决问题方法
    通过Q-Learning使用reward来构造标签(对应问题1)
    通过experience replay(经验池)的方法来解决相关性及非静态分布问题(对应问题2、3)
    使用一个CNN(MainNet)产生当前Q值,使用另外一个CNN(Target)产生Target Q值(对应问题4)
    1.构造标签
    前面提到DQN中的CNN作用是对在高维且连续状态下的Q-Table做函数拟合,而对于函数优化问题,监督学习的一般方法是先确定Loss Function,然后求梯度,使用随机梯度下降等方法更新参数。DQN则基于Q-Learning来确定Loss Function。

Q-Learning
有关RL的基础知识不再啰嗦,直接看Q-Learning的更新公式:
Q∗(s,a)=Q(s,a)+α(r+γmaxa′Q(s′,a′)−Q(s,a))

而DQN的Loss Function为
L(θ)=E[(TargetQ−Q(s,a;θ))2]

其中 θ 是网络参数,目标为
TargetQ=r+γmaxa′Q(s′,a′;θ)
显然Loss Function是基于Q-Learning更新公式的第二项确定的,两个公式意义相同,都是使当前的Q值逼近Target Q值。

接下来,求 L(θ) 关于 θ 的梯度,使用SGD等方法更新网络参数 θ。

2.经验池(experience replay)
经验池的功能主要是解决相关性及非静态分布问题。具体做法是把每个时间步agent与环境交互得到的转移样本 (st,at,rt,st+1) 储存到回放记忆单元,要训练时就随机拿出一些(minibatch)来训练。(其实就是将游戏的过程打成碎片存储,训练时随机抽取就避免了相关性问题)

3.目标网络
在Nature 2015版本的DQN中提出了这个改进,使用另一个网络(这里称为TargetNet)产生Target Q值。具体地,Q(s,a;θi) 表示当前网络MainNet的输出,用来评估当前状态动作对的值函数;Q(s,a;θ−i) 表示TargetNet的输出,代入上面求 TargetQ 值的公式中得到目标Q值。根据上面的Loss Function更新MainNet的参数,每经过N轮迭代,将MainNet的参数复制给TargetNet。

引入TargetNet后,再一段时间里目标Q值使保持不变的,一定程度降低了当前Q值和目标Q值的相关性,提高了算法稳定性。

MainNet TargetNet 是2个神经网络,TargetNet相当于某段时间的更新锚点,以此锚点为基准更新MainNet。更新一定次数后,将MainNet复制到TargetNet

可以这样理解:某只青蛙从-y轴跳到0轴,如果没有TargetNet这个分身作为锚点,可能跳到+y轴,再跳到更远的-y轴,发生振荡行为。如果有了TargetNet,可以保证不跳到更远的-y轴,离0轴越来越近。

你可能感兴趣的:(强化学习)