多步Q-learning

先讲解基础Q-learning:这是一种基于bootstrapped(自举)实现的算法,即基于已有估计值去更新自己的估计值,而不是等到完整的真实回报(Return)才能更新。实际例子可以看西湖大学的《强化学习的数学原理》,其中有比较详细的说明。 Q-learning 的核心更新公式是:

但是我们没办法求出下一步的状态动作价值函数,所以可以依靠用此步骤估计下一步,本步和下步的贝尔曼误差是:

在拟合 Q 迭代的每一步中,该误差被近似为 。若 ,则有 。这对应于最优策略 的最优 Q 函数。然而,当我们离开表格型情形时,大多数理论保证将不再成立。(表格型情景:像DP那样用表储存每一种的数据,而非用模型拟合)

我们可以将拟合 Q 迭代(fitted Q-iteration)转换为一个在线版本,我们称之为 Q-learning。


算法 11 在线 Q-迭代

1: loop
2: 执行某个动作 ,并观察
3: 为目标) 4: 
5: end loop


我们将 称为时序差分(TD)误差。在 Q-learning 中,如果我们仅基于 argmax 策略进行探索,可能会被困在环境的某个子集内。 那么它会始终选择当前 Q 函数认为“最优”的动作,但在训练初期,Q 函数往往还不准确。 于是:

  • 如果智能体偶然早期“高估”了某个动作;
  • 它就会一直重复选择那个动作;
  • 因为它不再尝试其他动作;
  • 就永远看不到潜在更优的状态或奖励。
  • 从而错过能带来更高奖励的状态和动作。 一些常用的探索策略包括 -贪婪策略:

以及 Boltzmann 探索策略:

TD learning

TD Learning(Temporal Difference Learning,时序差分学习)
是强化学习(RL)中一种核心算法思想,用于在无需等待完整回合结束的情况下估计状态价值(Value)或动作价值(Q-value)
它结合了蒙特卡洛方法(MC)和动态规划(DP)的优点。


MC(蒙特卡洛方法):对于围棋这样的任务,有明确的数据的,可以采用Policy Iteration这类算法,但是对于如robotics之类的显示任务,没有明确的棋盘格model,限定你下一步可以走向前后左右,所以没办法估计这步的状态奖励。因此MC采用以采样代替计算,用大数定律采集这个状态的状态奖励。 一、基本思想

在 RL 中,我们关心的是状态的“长期收益”:

但要精确知道这个值,必须运行到终止状态才能计算总回报。

TD Learning 的关键创新是:

“不等回合结束,就能用下一步的估计值来更新当前的价值估计。”

因此叫做 Temporal Difference(时间差分)——
因为它用时间上相邻的两个状态价值的差来进行学习。

二、基本更新公式

最核心的 TD(0) 更新公式如下:

含义:

  • :当前状态的价值估计;
  • :学习率;
  • :从 获得的即时奖励;
  • :折扣因子;
  • :下一状态的估计值;
  • 方括号内的部分: 称为 TD 误差(TD error)
  • 称为TD target。目标是让更趋近 实际上TD算法和with model的Policy Iteration非常相似。

这其实就是一种自举(bootstrapping)更新——当前的估计用下一步的估计来改进。

三、与其他方法的关系

方法是否自举是否使用整回合是否需要模型
蒙特卡洛(MC)❌ 否✅ 是❌ 否
动态规划(DP)✅ 是❌ 否✅ 是(知道转移概率)
TD Learning✅ 是❌ 否❌ 否

TD Learning 处于两者中间,
既能在未知环境下直接学习,又能边交互边更新,因此特别高效。

四、TD 的几种主要形式

  1. TD(0) 最基本形式,只看一步:
  1. n-step TD 延迟 n 步更新:
兼顾短期与长期信息。

3. TD(λ) 引入“迹(eligibility trace)”机制,将所有过去的状态都按照衰减系数 λ 更新:

其中 $e_t = \gamma \lambda e_{t-1} + 1$。
它在 λ=0 时退化为 TD(0),在 λ=1 时近似 MC → 即 **TD(λ)** 连接了两者。

五、用于 Q-Learning / SARSA 的 TD 版本

当学习动作价值函数时,TD 也衍生出两种常见算法:

算法更新方式特点
SARSA (on-policy)更新用的是当前策略产生的下一个动作 (a’),稳定但收敛慢
Q-Learning (off-policy)用最优动作估计更新,偏向贪心,更高效但可能不稳定

六、TD误差的直觉

TD 误差

  • 如果 → 表示当前状态比预期更好 → 增加
  • 如果 → 当前状态比预期更差 → 减少

神经科学上,这个信号被认为与多巴胺神经元的激活模式相对应。

七、在 Actor-Critic 框架中的作用

TD Learning 通常用于 Critic(价值估计器)

然后用该 TD 误差去更新 Actor(策略)

→ Critic 用 TD 学习更新;Actor 用 TD 误差指导策略提升。 八、小结

方面内容
核心思想通过“下一个状态的估计”来更新当前价值
优点样本效率高,不需完整回合,实时学习
缺点依赖估计值(有偏),需要平衡稳定性与收敛性
应用SARSA、Q-Learning、Actor-Critic、A3C、DDPG、SAC 等

Double Q-learning(Double DQN)

标准 Q-learning 的目标:

由于 是凸函数,(Jensen 不等式),样本噪声会被 放大,导致系统性过估计。

在DQN中,维护两套估计器 。更新其中一个时:

  • 选择动作(),用 评价该动作(取值),或反之。

两种等价写法(对称交替):

更新

更新

直觉:一个网络“挑动作”,另一个网络“报分数”,互相牵制,减少由 引起的乐观偏差。

而在deep dqn中在,用 online 网络选动作、用 target 网络评价:

Q-learningDouble Q-learning
目标
偏差易过估计明显缓解过估计
估计器1 套2 套(交替更新)
稳定性较差(尤其函数逼近时)更稳(Deep 版本即 Double DQN)
关于 行为策略代码:
初始化 Q_A, Q_B (全零或小随机)
for 每个episode:
  s = s0
  while not terminal:
    以 ε-贪婪 按 Q_组合(s,·) 选 a    # 例如 Q_组合=Q_A+Q_B 或随机择一
    执行动作,得到 r, s'
    随机选择要更新的表:若 coin()==A:
        a_star = argmax_a' Q_A(s', a')
        y = r + γ * Q_B(s', a_star)
        Q_A(s,a) ← Q_A(s,a) + α * (y - Q_A(s,a))
    否则(更新 B)同理交换 A/B
    s = s'

在浏览作业的时候,可以着重了解一下以下的代码逻辑,不需要手搓:

  • Exploration scheduling for ϵ-greedy actor
  • Learning rate scheduling
  • Gradient clipping 完成以下代码:
  • 完成update_critic中的DQN部分critic
  • 完成get_action中的
  • 完成run_hw3_dqn.py中的TODO部分
  • 调用被要求的update,并在必要时更新目标critic