Skip to content

N Step TD Learning

N-step TD learning在现代深度学习中大放光彩。这里要注意,\(TD(\lambda)\)是n-step方法的特殊版本,在SB教材第十二章引入;在现代深度学习中,n-step TD的使用更多,而TD(\(\lambda\))的使用较少,所以我们依然按照教材顺序,将两个内容分开讲解。

原理

Bias vs Variance

在了解多步TD之前,我们必须先了解Bias(偏差)和Variance(方差)的区别。

方差(Variance) 描述的是:如果你重复做多次实验,得到的结果是否忽高忽低、飘忽不定。因此:

  • MC方差大:我们必须等待episode结束,来完成对所有R的采样。在不同episode中,即便起点一样,由于过程中的变数很多,最终的结果也会差别很大。
  • TD(0)方差小:我们只看这一步和下一步,因此受到再后面的影响小,更新非常稳定,因此方差低。

偏差(Bias) 描述的是:你的预估目标(Target)和真实的物理真理之间,是否存在系统性的误差:

  • MC是无偏的(Unbiased):它用的是真实发生的奖励总和 \(G_t\),没有用到任何“猜测”成分。虽然过程波动大、方差大,但是每一个R都是实际采样的结果,因此长期平均下来,它一定指向最真实的那个价值。
  • TD是有偏的(Biased):它在更新时用到了 \(V(s_{t+1})\)估计值 。如果初始经验是错的,那么就会造成系统性的不准确。

在这里我们要注意到,上述TD(0)估计值来自于我们在代码实现时的查表动作。因为我们需要知道下一步的Q值,所以我们要去查询Q表(或者神经网络)。这个查询Q表的动作,就是估计值的来源:目前存在于Q表中的旧数据。而旧数据在学习完成前是不准确的,因此造成了Bias。

这个Q表记录了当前步下我们对每个状态价值的“看法”。在训练刚开始的时候,我们压根不知道每个状态是怎样的,所以我们会给所有状态都打上一个初始值(0或者随机数)。TD能够收敛的原因在于,我们用即时奖励来不断采样:

\[ Target = \underbrace{R_t}_{\text{真实的反馈}} + \gamma \underbrace{V(s_{t+1})}_{\text{错误的估计}} \]

在数万次迭代后,这些真实奖励带来的纠偏会抵消掉初始的错误估计,从而让公式两遍达成贝尔曼方程所描述的平衡。

归纳偏置

在TD学习中,我们了解到:

维度 蒙特卡洛 (MC) 单步时序差分 (TD)
做法 利用直到游戏结束的所有奖励。 只利用一步奖励和下一个状态的估值。
偏差 (Bias) 无偏 。因为它用的是真实发生的奖励,没用估计值。 有偏 。因为它用了还未学准的价值估计\(V(s_{t+1})\)
方差 (Variance) 大方差 。每一步的随机性都会累加,最终结果波动巨大。 小方差 。只关注一步转移,更新非常稳定。

多步时序差分的意义就在于结合二者的优势:使用 \(n\) 步的真实奖励(减少偏差),然后接一个状态价值估计(减少方差)。

我们可以发现,由于我们在一开始对Q表进行了自定义的初始化,这个初始化过程会导致agent对待世界的不同看法。不同的初始化,将带来不同的偏置:

  1. 全零初始化(Zero Initialization)偏置 :你假设世界是平庸的,直到拿到奖励为止。这可能导致智能体在初期缺乏探索动力。
  2. 乐观初始值(Optimistic Initial Values)偏置 :你给所有状态都打上很高的分(比如全 100)。智能体发现实际拿到的奖励总比预期的低,于是它会不断尝试没走过的路,试图寻找那个“想象中”的高分。这实际上是一种鼓励探索的偏置。
  3. 经验初始化的偏置:如果你根据人类经验预设了一些值,你就是在强迫智能体站在“巨人的肩膀”上开始思考。

TD 算法是有偏的,因为它会“用猜想更新猜想”。

  • 由于 \(Q(s_t, a_t)\) 的更新目标里包含 \(Q(s_{t+1}, a_{t+1})\),如果初始值(偏置)给得太离谱,智能体会需要很长时间才能通过即时奖励 \(R\) 把这个偏差修正过来。
  • 这种“初始偏置”在训练初期占据主导地位,随着采样数据(真理)的增多,它的影响力才会逐渐减弱。

简言之,我们一定要意识到,初始 Q 表 不是一张白纸,而是一套 先验假设 。给它赋值的过程,本质上就是我们作为设计者,在利用归纳偏置干预agent的学习路径。

多步TD

时序差分算法之所以被定性为“有偏”,是因为它在计算更新目标时,用到了下一个状态的 价值估计值 (即查表得到的 \(V(s_{t+1})\)\(Q\) 值),而不是该状态最终真实的收益。如果 Q 表对某个状态的初始看法是错误的(偏置),这个错误会通过更新公式像传染病一样沿着状态路径向后传播,影响与之相关的所有状态评价。既然你用来作为“参考标准”的目标值(Target)里包含了一个本身就有偏差的 Q 表数据,那么更新出来的结果自然也会继承并延续这种偏差。如果我们想降低偏差,我们就要参考更多的真实奖励,于是便引出了多步TD。

多步SARSA

1步 Sarsa 的目标值:

\[ G_t = r_t + \gamma Q(s_{t+1}, a_{t+1}) \]

n步 Sarsa 的目标值:

\[ G_t = r_t + \gamma r_{t+1} + \dots + \gamma^n Q(s_{t+n}, a_{t+n}) \]

多步 Sarsa 的更新公式:

\[ Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha [r_t + \gamma Q(s_{t+1}, a_{t+1}) - Q(s_t, a_t)] \]

在多步算法中,括号里的前两项(\(r_t + \gamma Q \dots\))会被替换成上面那个更长的 n步 \(G_t\)**** 。


\(n\) 步 Sarsa 的目标值(Target)公式中,我们可以清晰地看到两部分的分工:

\[ G_t^{(n)} = \underbrace{R_t + \gamma R_{t+1} + \dots + \gamma^{n-1} R_{t+n-1}}_{\text{第一部分:真实奖励序列}} + \underbrace{\gamma^n Q(s_{t+n}, a_{t+n})}_{\text{第二部分:末端估计值}} \]

其中第一部分是负责“降偏差”的部分,这一串 \(R\) 是智能体在环境中真实采样到的反馈。\(n\) 越大,公式中包含的真实反馈就越多,对“错误估计”的依赖就越少。因为真实奖励是“真理”,所以这一部分越多,预估的目标就越接近真实价值,从而 降低了偏差(Bias)

第二部分是负责“控方差”的部分,在第 \(n\) 步时,我们不再往后看了,直接查表拿出一个 \(Q\) 值来封顶。如果一直看下去(变成 MC),后面的每一步动作、环境的每一次随机跳动都会产生噪音。通过在第 \(n\) 步“截断”并引入一个相对平稳的估计值,我们成功挡住了后面无穷无尽的随机性累加,从而 控制了方差(Variance)

多步Q-learning


评论 #