DQN高阶技巧

  • bootstrapping:左脚踩右脚上升。用一个估算去更新同类的估算。
  • DQN的高估问题:TD算法导致DQN高估真实的动作价值。以下两个原因导致DQN出现高估:
    1. TD target:\(y_t = r_t + \gamma \cdot \mathop {max}\limits_aQ^*(s_{t+1},a;w)\),其中的最大化操作会使得\(y_t\)被高估;
      • 数学理解:给一个均值为0的样本集加上均值为0的随机噪音,新样本集的均值仍是零,但样本集的最大值回比原来的样本集的最大值大,最小值会比原来的最小值小。因为DQN网络是估计值,相当于给真实值添加了噪声。
    2. bootstrapping的策略使得在训练过程中高估情况叠加。
    • DQN的输出是一个向量代表各个动作的价值。如果高估是均匀的,那么所有动作价值的大小顺序是不变的,此时高估问题并不影响,但实际DQN的高估是非均匀的,此时会造成错误的结果。
    • 解决方法一:不使用DQN计算出来的TD target,而是使用另一个网络target network计算(减轻bootstrapping)。
      1. target network\(Q(s,a;w^-)\)结构和DQN一样,但参数不同。
      2. target network的参数不是每次收集经验时都更新,而是隔一段时间更新一次。有两种更新方式:(1 直接将DQN的参数赋值给target network,(2 将DQN和target network的参数做加权平均赋值给target network。
      3. target network是避免使用bootstrapping,但不能避免最大化带来的高估。此外,target network无法独立于DQN,所以不能完全消除bootstrapping。
    • 解决方法二:使用doubleDQN计算TD target。
      1. double DQN在计算TD target时首先使用DQN来计算\(s_{t+1}\)下动作价值最高的动作,再用另一个DQN获取这个动作的动作价值,用以计算TDtarget。
      2. double DQN比原始、target network方式的效果都好,原因是它同时环节了造成高估的两个成因。
上一篇:强化学习笔记:DQN和DDQN


下一篇:MyCat 数据库读写分离