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能够收敛的原因在于,我们用即时奖励来不断采样:
在数万次迭代后,这些真实奖励带来的纠偏会抵消掉初始的错误估计,从而让公式两遍达成贝尔曼方程所描述的平衡。
归纳偏置
在TD学习中,我们了解到:
| 维度 | 蒙特卡洛 (MC) | 单步时序差分 (TD) |
|---|---|---|
| 做法 | 利用直到游戏结束的所有奖励。 | 只利用一步奖励和下一个状态的估值。 |
| 偏差 (Bias) | 无偏 。因为它用的是真实发生的奖励,没用估计值。 | 有偏 。因为它用了还未学准的价值估计\(V(s_{t+1})\)。 |
| 方差 (Variance) | 大方差 。每一步的随机性都会累加,最终结果波动巨大。 | 小方差 。只关注一步转移,更新非常稳定。 |
多步时序差分的意义就在于结合二者的优势:使用 \(n\) 步的真实奖励(减少偏差),然后接一个状态价值估计(减少方差)。
我们可以发现,由于我们在一开始对Q表进行了自定义的初始化,这个初始化过程会导致agent对待世界的不同看法。不同的初始化,将带来不同的偏置:
- 全零初始化(Zero Initialization) 的偏置 :你假设世界是平庸的,直到拿到奖励为止。这可能导致智能体在初期缺乏探索动力。
- 乐观初始值(Optimistic Initial Values) 的偏置 :你给所有状态都打上很高的分(比如全 100)。智能体发现实际拿到的奖励总比预期的低,于是它会不断尝试没走过的路,试图寻找那个“想象中”的高分。这实际上是一种鼓励探索的偏置。
- 经验初始化的偏置:如果你根据人类经验预设了一些值,你就是在强迫智能体站在“巨人的肩膀”上开始思考。
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 的目标值:
n步 Sarsa 的目标值:
多步 Sarsa 的更新公式:
在多步算法中,括号里的前两项(\(r_t + \gamma Q \dots\))会被替换成上面那个更长的 n步 \(G_t\)**** 。
在 \(n\) 步 Sarsa 的目标值(Target)公式中,我们可以清晰地看到两部分的分工:
其中第一部分是负责“降偏差”的部分,这一串 \(R\) 是智能体在环境中真实采样到的反馈。\(n\) 越大,公式中包含的真实反馈就越多,对“错误估计”的依赖就越少。因为真实奖励是“真理”,所以这一部分越多,预估的目标就越接近真实价值,从而 降低了偏差(Bias) 。
第二部分是负责“控方差”的部分,在第 \(n\) 步时,我们不再往后看了,直接查表拿出一个 \(Q\) 值来封顶。如果一直看下去(变成 MC),后面的每一步动作、环境的每一次随机跳动都会产生噪音。通过在第 \(n\) 步“截断”并引入一个相对平稳的估计值,我们成功挡住了后面无穷无尽的随机性累加,从而 控制了方差(Variance) 。