- bootstrapping:左脚踩右脚上升。用一个估算去更新同类的估算。
- DQN的高估问题:TD算法导致DQN高估真实的动作价值。以下两个原因导致DQN出现高估:
- TD target:\(y_t = r_t + \gamma \cdot \mathop {max}\limits_aQ^*(s_{t+1},a;w)\),其中的最大化操作会使得\(y_t\)被高估;
- 数学理解:给一个均值为0的样本集加上均值为0的随机噪音,新样本集的均值仍是零,但样本集的最大值回比原来的样本集的最大值大,最小值会比原来的最小值小。因为DQN网络是估计值,相当于给真实值添加了噪声。
- bootstrapping的策略使得在训练过程中高估情况叠加。
- DQN的输出是一个向量代表各个动作的价值。如果高估是均匀的,那么所有动作价值的大小顺序是不变的,此时高估问题并不影响,但实际DQN的高估是非均匀的,此时会造成错误的结果。
- 解决方法一:不使用DQN计算出来的TD target,而是使用另一个网络target network计算(减轻bootstrapping)。
- target network\(Q(s,a;w^-)\)结构和DQN一样,但参数不同。
- target network的参数不是每次收集经验时都更新,而是隔一段时间更新一次。有两种更新方式:(1 直接将DQN的参数赋值给target network,(2 将DQN和target network的参数做加权平均赋值给target network。
- target network是避免使用bootstrapping,但不能避免最大化带来的高估。此外,target network无法独立于DQN,所以不能完全消除bootstrapping。
- 解决方法二:使用doubleDQN计算TD target。
- double DQN在计算TD target时首先使用DQN来计算\(s_{t+1}\)下动作价值最高的动作,再用另一个DQN获取这个动作的动作价值,用以计算TDtarget。
- double DQN比原始、target network方式的效果都好,原因是它同时环节了造成高估的两个成因。
- TD target:\(y_t = r_t + \gamma \cdot \mathop {max}\limits_aQ^*(s_{t+1},a;w)\),其中的最大化操作会使得\(y_t\)被高估;
相关文章
- 02-15光速联提速脚本使用技巧
- 02-15演讲小技巧iPhone+Keynote
- 02-15不可不学!一些webshell免杀的技巧
- 02-15章致宇讲解bjl八路重生打法技巧心得
- 02-15BJL龙虎游戏技巧规律和下三路同三株路法则的心得分享
- 02-15PCB Layout 中的高频电路布线技巧
- 02-15angular小技巧随笔
- 02-15reduce内置高阶函数求和
- 02-15python字符串反转 高阶函数 @property与sorted(八)
- 02-15python(内置高阶函数)