0%

深度强化学习-王树森

此笔记记录学习书本王树森,张志华,《深度强化学习(初稿》的学习与总结笔记,其中部分内容由AI生成。

Q学习产生高估(overestimation)的原因,主要源于其最大值操作(max operator)在引入噪声时的偏差。这种现象通常称为 最大值偏差(maximization bias)

原理解释

在 Q-learning 中,我们使用以下目标来更新 Q 值:

[ Q(s, a) Q(s, a) + ]

其中:

  • (_{a'} Q(s', a')):从下一个状态中选择估计值最大的动作作为更新目标。

⚠️ 问题在于:
如果 Q 值本身带有估计误差(例如由于采样、函数逼近、探索策略等),
那么取最大值操作会偏向选择被高估的值,从而使得目标值系统性偏高。


举个例子(简化)

假设在状态 (s') 下,我们有三个动作,真实 Q 值如下:

动作 (a') 真正的 Q 值 网络估计值(含误差)
(a_1) 1.0 1.1(+0.1)
(a_2) 0.8 1.0(+0.2)
(a_3) 0.6 0.9(+0.3)
  • 虽然 (a_1) 是最优动作(真实 Q 值最大),
  • 但由于随机估计误差,(Q(s', a') = 1.1),这个值偏高了。

这会导致我们在训练时错误地使用偏高的目标值去更新当前状态的 Q 值,从而 累计越来越大的高估偏差


高估有什么危害?

  • 策略不稳定:错误地偏向那些“看起来收益高”但其实不是的动作;
  • 训练发散:目标 Q 值越来越不准确,导致训练无法收敛;
  • 性能下降:测试表现可能远低于理论最优策略。

如何缓解高估?

  1. Double Q-Learning
    • 采用两个 Q 网络,分别用于选择和评估动作。
    • 更新目标变为: [ Q(s, a) r + Q_2(s', _{a'} Q_1(s', a')) ]
    • 显著降低高估。
  2. Averaged DQN / Ensemble 方法
    • 使用多个 Q 网络求平均,减少单个网络带来的噪声偏差。
  3. Regularization / Uncertainty penalty
    • 对 Q 值添加不确定性惩罚,抑制过高的估计。

行为策略和目标策略的区别

例1:Q-learning(离策略)

  • 行为策略:ε-greedy(偶尔探索)
  • 目标策略:贪婪策略(永远选最大Q值)

这是典型的 离策略学习(off-policy) —— 用一种策略去收集数据,用另一种策略去学习。

例2:SARSA(在策略)

  • 行为策略:ε-greedy
  • 目标策略:同样是ε-greedy

这是 在策略学习(on-policy) —— 你用什么策略学习,就用它去探索和更新。

行为策略 ≠ 目标策略:

  • 你可以用 更大胆、更多样的行为策略 去探索,避免陷入局部最优
  • 然后用行为数据,训练一个 更保守、更稳定的目标策略

这就是 DDPG、TD3、DQN 等算法的本质思路。

“双延时确定策略梯度”(Twin Delayed Deep Deterministic Policy Gradient,TD3)解决强化学习中 自举 + 最大化引起的 Q 值高估问题

我们分三步来讲清楚:

🔥 1. 问题背景:自举 + 最大化 导致的高估偏差

在像 DDPG、Q-learning 这类算法中,我们更新 Q 值时用的是这个形式:

[ y = r + _{a'} Q(s', a') ]

但注意!

  • ( Q(s', a') ) 是网络的估计值
  • “最大化”这个估计值(选最大 Q)会放大噪声和误差!

🔍 这就像你考试估分,题做错了但还选“我觉得我做得最好的那题”,会高估总分
→ 随着训练进行,Q值越估越高,结果策略学得不靠谱!


🧠 2. TD3 怎么解决这个高估问题?

TD3 提出了三个关键改进,其中双Q网络是最核心的👇


✅ 【方法一】双Q网络(Twin Q-networks

用两个独立的 Q 网络: ( Q_1(s, a) )、( Q_2(s, a) )

更新 TD目标时,不再用 max,而是:

[ y = r + (Q_1(s', a'), Q_2(s', a')) ]

✅ 取较小值,就能抵消高估误差(保守估计)
✅ 这不是自举去最大,而是自举去最小,避免因误差叠加而爆炸

✅ 【方法二】延迟策略更新(Delayed Policy Update

  • 策略网络(Actor)更新得更慢,例如每 2~3 次 Critic 更新后才更新一次
  • 因为 Critic(Q函数)学得更稳定时,再去学策略,效果更稳

✅ 【方法三】目标动作加噪声(Target Policy Smoothing

  • 为了防止 Q 网络过于依赖某一个精确动作值
  • 在 TD目标里加入一个小的随机噪声:

[ a' = _{}(s') + ,((0, ), -c, c) ]

✅ 这样做可以使目标 Q 更平滑,缓解尖峰高估