CS234 L5 · 值函数逼近 · 全片速览

65 镜一次看完 · Ctrl+F 可搜全文 · Ctrl+P 可存成 PDF · 想看动画回放映厅

1 · 开场2 · 1 · 表格是特例,不是默认 —3 · 2 · 策略评估就是回归:整讲只4 · 3 · 同一个槽,换三个目标:真5 · 4 · 误差按 d(s) 加权 6 · 5 · MC 与 TD 收敛到<7 · 6 · 表格特征是这两条结论的零8 · 7 · 半梯度:TD 加函数逼近9 · 8 · Baird:同一个反例,10 · 9 · 致命三要素 —— 而且「11 · 完
知识点 1

开场

1 / 65
讲解
前四讲都建立在一个从未被点名的假设上:值函数是一张表,每个状态(或每个状态-动作对)一个格子。这一讲把这个假设拿掉。 理由是现实的:Atari 的状态是像素,机器人的状态是传感器读数,状态空间大到根本列举不完。于是把 V(s) 换成参数化的 V̂(s; w)。 整讲的组织方式非常紧凑——把策略评估重写成回归,得到一条更新式,然后往它的「目标」那个槽里依次塞进三个不同的东西。前半讲都是这一条式子。 后半讲讲它为什么会坏。这是这门课第一次出现「算法可能根本不收敛」——不是收敛到错的值,是发散。Baird 的七状态反例会贯穿始终,而本片会把它的数字真的算出来。 还有一件事要先说:这一讲的自动字幕坏得相当厉害,特别是 Baird 特征向量那一段被念成了一串读不出来的数字。本片按她口述的两个可验证的数把索引反推重建了,并在用到的地方标出来。
知识点 2

1 · 表格是特例,不是默认 —— 泛化的另一面是干扰

2 / 65
s1s2s3s4s5s6s7前四讲的全部状态Atari 一屏:10⁵⁰ 以上
前四讲的每一条保证,都建立在一个能列举完的状态表上。
讲解
前四讲从没说破一个假设:值函数是一张表,每个状态一个格子。火星车 7 个状态,表有 7 行;加上动作,Q 表 14 格。一切都装得下。 真实问题不是这样。一个 8×8 的格子世界已经 64 个状态;西洋双陆棋约 10²⁰;Atari 的状态是一屏像素,组合数在 10⁵⁰ 以上。不是存不下,是连列举一遍都做不到。 所以要把 V(s) 换成一个参数化的函数 V̂(s; w),用有限个参数去覆盖无限多个状态。 这个换位看起来只是工程上的让步。这一集要说的是:它同时改变了算法的数学性质,而且改得很彻底。
3 / 65
只是换个存法压缩一下表而已,算法没变
「用函数代替表」听起来像存储优化 —— 算法一个字都没改。
讲解
这个错误模型有一个很强的表面证据:更新式确实几乎没变。原来是 V(s) ← V(s) + α[目标 − V(s)],现在是 w ← w + α[目标 − V̂(s;w)]∇V̂。形式一一对应。 而且「用函数压缩一张大表」这个说法本身也不错——它确实在做这件事。 问题在于表格有一条隐含的性质,函数逼近没有:在表格里,更新一个格子不会动到任何别的格子。每个状态的值是独立的参数。 一旦换成共享参数的函数,这条性质就没了。而前四讲所有的收敛证明,都在暗中用着它。
4 / 65
V^(s;w)=x(s)⊤wx(s)∈Rd
d 个参数覆盖全部状态表格 = one-hot 特征
表格也是线性逼近 —— 它取的特征恰好是 one-hot。
讲解
先把两者放进同一个框架。线性值函数逼近写成 V̂(s;w) = x(s)ᵀw:给每个状态一个特征向量 x(s),值就是特征和权重的内积。 关键的观察是:表格也是这个形式的一个特例。取 x(s) 为 one-hot 向量——第 s 个分量是 1,其余全是 0——那么 V̂(s;w) = w_s,权重向量就是那张表本身。 所以「表格 vs 函数逼近」不是两种东西,是同一种东西的两种特征选择。 这个视角很有用,因为它把问题变成了:one-hot 特征有什么特别之处,让前四讲的一切都成立?答案是下一镜的内容,而它也正是一切开始出问题的地方。
5 / 65
Δw∝x(s)⟹ΔV^(s′)∝x(s′)⊤x(s)
特征重叠 = 互相影响one-hot 时内积为 0
更新状态 s,别的状态跟着变 —— 变多少由特征内积决定。
讲解
线性逼近下,更新的方向正比于 x(s)。于是另一个状态 s′ 的值变化了多少,正比于 x(s′)ᵀx(s)——两个状态特征向量的内积。 这一行同时解释了函数逼近的好处和坏处,而它们是同一件事: 特征重叠意味着泛化——你在一个状态上学到的东西会自动推广到相似的状态,这正是你用函数逼近的理由。 特征重叠也意味着干扰——你修好一个状态的值,会把另一个本来已经正确的状态弄坏。两者无法分开,它们是同一个内积。 而 one-hot 特征的内积在 s′≠s 时恒为 0。所以表格既完全不泛化,也完全不干扰。前四讲那些「逐状态收敛」的论证,靠的就是这个 0。
6 / 65
✓表格不泛化 · 不干扰✓函数逼近泛化 = 干扰✓两者同一个内积前四讲用的是那个 0
指名反驳:不是换个存法,是把「更新互不影响」这条性质拿掉了。
讲解
指名回去:换成函数逼近不是换个存法,是把「更新一个状态不影响别的状态」这条性质拿掉了。而前四讲的每一条收敛论证都在暗中用它。 最清楚的例子是 L2 第八集:值迭代收敛,因为 Bellman 算子在 sup 范数下是 γ-压缩。那个证明逐状态地比较两个值向量——它默认你可以独立地谈论每个状态的值。有了共享参数,你连「单独改一个状态的值」这个动作都做不到了。 所以正确的说法是:表格是一个特例,而且恰好是让一切成立的那个特例。接下来八集都是在回答同一个问题——离开这个特例之后,什么还成立,什么不成立。
7 / 65

知识点 1 · 总结

表格是特例:它的特征恰好是 one-hot

核心结论

线性逼近 V̂(s;w)=x(s)ᵀw。更新 s 时,s′ 的值变化正比于 x(s′)ᵀx(s);one-hot 时这个内积恒为 0。

底层机制

泛化与干扰是同一个内积:特征重叠让你能推广,也让你修一个状态时弄坏另一个。无法只要前者。

常见误解

误解:「只是换个存法,算法没变」。被拿掉的是「更新互不影响」这条隐含性质。

与你的考试

前四讲的逐状态收敛论证(如 L2 的 γ-压缩)默认能单独谈论每个状态的值 —— 共享参数之后这个动作本身就不存在了。

8 / 65

知识点 1 · 检验

线性值函数逼近下,更新状态 s 会让状态 s′ 的估值变化多少?

知识点 3

2 · 策略评估就是回归:整讲只有一条更新式

9 / 65
oracle: (s1,Vπ(s1)), (s2,Vπ(s2)), …
这就是一个回归问题
先假装有个神谕,把 (状态, 真值) 成对交给你。那你会怎么做?
讲解
组织这一讲的办法是先问一个不现实的问题:假如有一个神谕,把 (s, V^π(s)) 一对一对地交给你,你会怎么拟合 V̂? 这个问题一点强化学习的味道都没有——它就是一个监督学习的回归问题。输入是状态(或它的特征),标签是真值,你要找一组 w 让预测贴近标签。 把问题降到这个高度是有代价的(真值当然拿不到),但收益很大:整讲后面的东西都变成了「往这个回归里换不同的标签」。
10 / 65
这得是套新算法值函数逼近听起来自成一体
名字很唬人,但底下只有一条式子,而且是最普通的那条。
讲解
「值函数逼近」这个名字听起来自成一体,像是一套需要单独学的方法。 实际上这一讲前半段只有一条更新式,而且它就是线性回归的随机梯度下降,一个新东西都没有。 把这件事看清楚很有价值,因为它告诉你该去哪里找麻烦:麻烦不在这条式子里,在你往它的标签槽里塞了什么。后面所有的坏消息都来自那个槽。
11 / 65
J(w)=Ed[(Vπ(s)−V^(s;w))2]
期望按 d(s) 取这个下标是伏笔
目标函数是均方误差。但它对哪个分布取期望?这一点第四集专讲。
讲解
目标函数是均方值误差:预测与真值之差的平方,取期望。 请盯住那个下标 d。期望不是「对所有状态一视同仁」,而是按策略诱导的平稳分布 d(s) 加权——你经常去的状态,误差算得更重。 这个细节在课堂上被学生反复追问,而讲座的回答比较随意,有时说「对策略取期望」,有时说「对状态取期望」。它其实是承重的:后面所有的收敛结论都是相对于这个加权说的,而控制问题其实想要另一个加权——她自己也承认了这一点。第四集会专门处理它。 先继续推这条式子。
12 / 65
Δw=α(Vπ(s)−x(s)⊤w)x(s)
梯度塌成特征本身
线性逼近下 ∇V̂ = x(s),于是整条更新式里只剩特征。
讲解
对 J(w) 求梯度,再取一个样本做随机梯度下降,得到 Δw = −½α∇J = α(V^π(s) − V̂(s;w))∇_w V̂(s;w)。 线性逼近下 ∇_w V̂(s;w) = x(s)——梯度就是特征本身。于是整条更新式塌成:误差 × 特征 × 步长。 读法很直观:误差为正说明估低了,就把权重往「这个状态的特征方向」推一点;特征里哪个分量大,哪个权重就动得多。 按约定标一处字幕坏损:这段推导里的 −½α 被自动字幕从头到尾渲染成了「1.5 alpha」,而且 V^π(s) 被念成「P pi of S」、V̂(s;w) 被念成「S W」或「v of sw」。按字幕读这一段是读不通的。另外她在学生指出符号问题后明说「正负我这里比较随意」——本片固定一个约定:误差写成(目标 − 预测),更新是加上 αδx。
13 / 65
误差× 特征× 步长
指名反驳:没有新算法。整讲前半段只有这一条式子。
讲解
指名回去:没有新算法。一条随机梯度下降的更新式,三个因子——误差、特征、步长——如此而已。 这个认识的价值在于它把注意力放对了地方。这条式子本身既不神秘也不危险;危险的是你拿什么去填那个「真值」的位置,因为神谕并不存在。 下一集把三个候选填进去:真值(作为对照)、蒙特卡洛回报、以及自举的 TD 目标。你会发现它们的差别和 L3 里那三条路一模一样——因为那本来就是同一组取舍,只是现在多了一层特征。
14 / 65

知识点 2 · 总结

策略评估 = 回归;整讲前半段只有一条更新式

核心结论

J(w)=E_d[(V^π(s)−V̂(s;w))²],SGD 后线性情形 ∇V̂=x(s),于是 Δw = α(目标 − x(s)ᵀw)·x(s) —— 误差 × 特征 × 步长。

底层机制

麻烦不在这条式子里,在往「目标」那个槽里塞什么(神谕不存在)。后面所有坏消息都来自那个槽。

常见误解

误解:「值函数逼近是一套新算法」。它就是线性回归的随机梯度下降,一个新东西都没有。

与你的考试

字幕坏损:−½α 全程被渲染成「1.5 alpha」,V^π(s) 成「P pi of S」。符号约定固定为:误差 =(目标 − 预测),更新加 αδx。

15 / 65

知识点 2 · 检验

线性值函数逼近下,为什么更新式里只剩下特征 x(s)?

知识点 4

3 · 同一个槽,换三个目标:真值 / 回报 / 自举

16 / 65
Δw=α( ⋅ ⏟target−x(s)⊤w)x(s)
神谕不存在这个槽填什么?
式子有了,但真值那一格是空的 —— 神谕从来就不存在。
讲解
上一集的更新式里有一个位置放着 V^π(s),也就是真值。而真值正是我们要估的东西——它当然不会有人给你。 所以整个问题变成:拿什么去填那个槽? 这一集给出三个候选。第一个是真值本身,只作为理论对照;另外两个是 L3 已经建立过的两种估计。你会看到,它们之间的全部差别都是 L3 那一讲的差别原样搬过来的。
17 / 65
三个目标 = 三个算法各自有各自的推导和性质
它们共用同一条更新式。差别只在那一个槽。
讲解
教科书把它们分成三节讲,名字也不同——梯度蒙特卡洛、半梯度 TD(0)、以及带函数逼近的策略评估。看起来像三套方法。 但它们共用同一条更新式,差别只在那一个槽里放什么。把这件事看清楚,你需要记的东西就从三套缩成一套加三个填法。 更有用的是:它们的优缺点不需要重新推导。L3 已经把采样与自举这两根轴建立起来了,那里的每一条结论在这里原样成立,只是多了一层特征。
18 / 65
真值(神谕)回报 G_tr + γ x(s′)ᵀw
三个填法:真值(只作对照)· 蒙特卡洛回报 · 自举的 TD 目标。
讲解
三个填法。 真值 V^π(s):拿不到,只作为理论对照——它定义了「最好能做到什么」。 蒙特卡洛回报 G_t:走完整个回合,用实际拿到的折扣回报当标签。无偏、不需要 Markov 性、只能用于回合制——这三条都是 L3 第三集的结论,一字未改。 自举的 TD 目标 r + γ x(s′)ᵀw:只往前看一步,剩下的用当前的权重估。能在线、方差低、有偏——也是 L3 的结论。 请注意第三个里有一件新事:目标里出现了 w。标签依赖于你正在优化的参数。这在监督学习里是没有的,而它正是第七集那个「不是真正的梯度下降」的源头。
19 / 65
算期望抽样DPTD—MC自举不自举
还是 L3 那两根轴。函数逼近没有新增坐标,它是在这张图之外加了一层。
讲解
把 L3 第二集那张图原样搬过来:横轴是「算期望还是抽样」,纵轴是「自不自举」。MC 在右下,TD 在右上,DP 在左上。 函数逼近没有在这张图上新增坐标。它是在图之外叠了一层:不论你落在哪个格子,都还要再经过一次「投影到可表示的函数类」。 这个说法是这一讲后半段的关键。第八集会看到,正是那一层额外的投影,把 L2 里那个漂亮的压缩性给破坏掉了——而格子本身的性质一点没变。 所以这一讲不是推翻 L3,是在 L3 上面加了一层,而麻烦全在新加的那一层。
20 / 65
✓一条更新式误差 × 特征 × 步长✓三个填法真值 / G_t / 自举✓差别继承自 L3不必重新推导新东西只有一层投影
指名反驳:不是三个算法,是一条式子三个填法。
讲解
指名回去:不是三个算法,是一条式子三个填法;而三个填法之间的取舍,L3 已经全部推导过了,这里一条都不用重推。 函数逼近唯一新加的东西是一层投影:你算出来的目标未必落在可表示的函数类里,于是要把它投回去。 这一层在表格下是恒等映射(one-hot 特征能表示任何值函数,没什么可投的),所以前四讲从来没见过它。而从这一讲起它一直在,并且是后面所有麻烦的唯一来源。 接下来六集就是在追这一层:它怎么改变误差的加权(第四集)、怎么让 MC 和 TD 收敛到不同的地方(第五、六集)、怎么让更新不再是梯度下降(第七集)、以及怎么让整个过程发散(第八、九集)。
21 / 65

知识点 3 · 总结

一条更新式,三个填法 —— 差别全部继承自 L3

核心结论

槽里可填:真值(只作对照)· G_t(无偏、不需 Markov、只能回合制)· r+γx(s′)ᵀw(在线、低方差、有偏)。

底层机制

函数逼近没有在「采样 / 自举」这两根轴上新增坐标,它是在其外叠了一层投影到可表示函数类。

常见误解

误解:「三个目标是三个算法」。共用同一条式子,优缺点不必重新推导。

与你的考试

TD 目标里出现了 w —— 标签依赖于你正在优化的参数。这是第七集「不是真正的梯度下降」的源头。

22 / 65

知识点 3 · 检验

相比 L3 的表格版本,函数逼近真正新增的是什么?

知识点 5

4 · 误差按 d(s) 加权 —— 而不是对所有状态一视同仁

23 / 65
J(w)=∑sd(s)(Vπ(s)−V^(s;w))2
d(s) 是权重
参数不够用时,误差必须有所取舍。取舍的依据就是这个 d(s)。
讲解
表格时代没有这个问题:每个状态一个独立参数,所有状态都能同时精确。误差全是 0,谈不上加权。 函数逼近下参数远少于状态,不可能同时把所有状态估准。于是必然要取舍:哪些状态估准更重要? 这个取舍不是由你显式指定的,它藏在目标函数的那个 d(s) 里。而 d(s) 是什么、它凭什么是那个,正是这一集要说清楚的——因为这一讲后面所有的收敛结论,都是相对于这个加权说的。
24 / 65
就是对状态取平均均方误差嘛,一视同仁
「均方误差」这个名字确实暗示一视同仁 —— 而它不是。
讲解
「均方误差」这个名字暗示的是一视同仁:把每个状态的误差平方加起来除以状态数。 这个读法在监督学习里通常没问题,因为那里的数据分布就是你的测试分布。 但这里的加权不是均匀的,也不是你选的——它是策略跑起来之后自己形成的。课堂上学生反复追问这个期望到底对什么取,讲座的回答有时说「对策略」,有时说「对状态」,一直没说死。它其实有确切的答案。
25 / 65
d(s′)=∑s∑ad(s)π(a∣s)P(s′∣s,a)
策略跑出来的分布对动作求和是为随机策略
d 是策略诱导的平稳分布:你待得越久的状态,误差算得越重。
讲解
d 是策略诱导的平稳分布:让策略一直跑下去,各状态被访问的长期频率。它满足屏幕上这条平衡方程——下一时刻在 s′ 的概率,等于从各个 s 出发、按 π 选动作、再转移到 s′ 的总和。 那个对动作的求和是为了容纳随机策略。讲座里她先把这条式子写反了一次,中途说「我把它翻过来,这样想更容易一点」,所以字幕里留着一个半成品版本。 含义很直接:你待得越久的状态,它的误差在目标函数里算得越重。这在策略评估里是合理的——你确实更在乎经常遇到的状态。 但请记住 L2 第一集的结论:平稳分布的存在与唯一性需要不可约和非周期。讲座在这里又一次默认了它。
26 / 65
s1s2s3s4s5s6s70.030.060.110.170.210.240.18访问频率决定权重
同一组特征、同一份数据,换个策略就换个 d,于是换一组最优权重。
讲解
看什么:看柱子不是一样高的。如果是一视同仁,七根应该齐平;实际是策略常去的那几个状态权重更大。齐平才是特例,而那个特例只在均匀随机游走时出现。 —— 画一个示意的 d:策略常去右侧几个状态,于是它们的权重更大。 这意味着一件很实际的事:同一组特征、同一份数据,换一个策略就换一个 d,于是换一组最优权重。「最好的 w」不是特征和真值决定的,还要看你打算用什么策略去跑。 这也解释了为什么这一讲的结论必须写成「相对于 d 的最小 MSVE」,而不能简单说「最好的逼近」。 最后是一处她自己承认的缺口:控制问题其实想要另一个加权。评估时按访问频率加权是对的,但控制时你更在乎那些「可能变好」的状态,而不是「现在经常去」的状态。这一讲从头到尾只用 d 这一种加权,缺口就留在那儿。
27 / 65
✓不是均匀按访问频率加权✓不是你选的策略跑出来的✕控制要另一个她自己承认了结论都相对于 d 成立
指名反驳:不是一视同仁,是按你待的时间加权,而且这个权重你说了不算。
讲解
指名回去:均方误差在这里不是一视同仁。它按平稳分布 d(s) 加权,而 d 是策略跑出来的,不是你选的。 三条推论值得记住。 第一,这一讲所有的收敛结论都相对于 d 成立。看到「TD 收敛到 X」时,要补上「在 d 加权的意义下」。 第二,d 的存在性本身有前提——不可约加非周期,L2 第一集给过反例。讲座在这里又默认了它。 第三,控制问题想要的不是这个加权,这是她自己承认的缺口。离策略的情形更麻烦:数据来自行为策略的 d_b,而你想评估的是目标策略的 d_π,两者不一致——第八集的发散正是从这个不一致来的。
28 / 65

知识点 4 · 总结

误差按平稳分布 d(s) 加权,而不是一视同仁

核心结论

J(w)=Σ_s d(s)(V^π(s)−V̂(s;w))²,d 满足 d(s′)=Σ_s Σ_a d(s)π(a|s)P(s′|s,a)(对动作求和是为随机策略)。

底层机制

参数少于状态 ⟹ 必须取舍;取舍依据是访问频率。换策略换 d,于是换一组最优权重。

常见误解

误解:「均方误差就是对状态平均」。加权不是均匀的,也不是你选的。

与你的考试

三处缺口:结论都相对 d 成立;d 的存在要不可约+非周期(L2 第一集);控制想要另一个加权,她自己承认。

29 / 65

知识点 4 · 检验

值函数逼近的目标函数 J(w) 里,误差是按什么加权的?

知识点 6

5 · MC 与 TD 收敛到不同的权重,差一个 1/(1−γ)

30 / 65
MC 收敛到哪TD 收敛到哪同一组特征,同一个 d
两条路都收敛。但它们收敛到的不是同一组权重。
讲解
两个填法都会收敛(在合适的步长下)。但收敛到哪里? 这是 L3 第九集那个问题的函数逼近版本。在那一讲里,批量 MC 与批量 TD 在同一份数据上给出了不同的值函数;这里同样是两个不同的答案,只是现在可以把差距写成一个具体的因子。 讲座在这里引用了 Tsitsiklis 与 Van Roy 的结果,没有给证明。本片同样只陈述结论并标出它是断言,但会把那个因子的数值算出来——因为它比听起来大得多。
31 / 65
都收敛到最好的那组 w既然都收敛,当然都收敛到最优逼近
只有 MC 是这样。TD 收敛到另一个地方,而且可能差很远。
讲解
这个错误模型的依据是:既然可表示的函数类是固定的,那「最好的逼近」也是固定的,任何收敛的方法应该都朝它去。 对 MC 而言这是对的:它的标签是无偏的回报样本,所以它在做一个标准的最小二乘,收敛到在 d 加权意义下最小化 MSVE 的那组 w。 对 TD 不成立。TD 的标签里含 w,它并不在最小化 MSVE——第七集会说清它其实没在最小化任何东西。它收敛到的是另一个不动点,而那个点可能比最优逼近差不少。
32 / 65
MSVE(wTD)≤11−γminwMSVE(w)
注意是 ≤ 不是 =
Tsitsiklis–Van Roy:TD 落在最优逼近的 1/(1−γ) 倍之内。
讲解
正式的陈述是:MC 达到 min_w MSVE(w);TD(0) 的解满足 MSVE(w_TD) ≤ [1/(1−γ)]·min_w MSVE(w)。 两处要标出来。 第一,这是一个上界,不是等式。讲座里她两次把它说成等号(「这就等于蒙特卡洛的 MSVE 乘以 1 除以 1 减 γ」)。只有 ≤ 方向是对的,而后面推表格情形时也只需要 ≤。 第二,这条结果讲座没有证明,是直接引用的。本片同样不证,但把它标记为断言。 现在看那个因子有多大。
33 / 65
γ=0.9γ=0.95γ=0.99×10×20×100TD 允许差这么多倍
γ=0.99 时因子是 100 倍 —— 而 0.99 是深度 RL 的默认值。
讲解
看什么:看第三根柱子比前两根高出多少:γ 从 0.95 走到 0.99,因子从 20 跳到 100。这个量随 1/(1−γ) 爆炸,和 L2 第九集停机判据里那个 γ/(1−γ) 是同一个形状。 —— 把因子 1/(1−γ) 算出来:γ=0.9 时是 10,γ=0.95 时 20,γ=0.99 时 100,γ=0.999 时 1000。 而 0.99 正是深度强化学习里最常见的默认折扣。也就是说在标准设定下,这条界允许 TD 的误差是最优逼近的一百倍。 两点要说清楚,免得把这个数读过头。 它是最坏情况的界,不是实际差距——实践中 TD 往往接近最优逼近,这也是它被广泛使用的原因。但它同时也说明:这个差距原则上可以很大,而且它随时域拉长而恶化。 请把它和 L2 第九集那个 γ/(1−γ) 放在一起记。两处都是同一个形状:凡是自举,1/(1−γ) 就会作为放大系数出现——因为自举把误差沿着时域累加了起来。
34 / 65
✓MC达到 min MSVE✕TD1/(1−γ) 倍之内✕讲座口误两次把 ≤ 说成 =这是界,不是实际差距
指名反驳:只有 MC 收敛到最优逼近。TD 收敛到另一个不动点。
讲解
指名回去:只有 MC 收敛到在 d 加权意义下的最优逼近。TD 收敛到的是另一个不动点,界是 1/(1−γ) 倍。 三条附注。 它是界不是实际差距——不要据此认为 TD 一定差一百倍,实践中通常好得多。 讲座两次把 ≤ 说成 =。只有 ≤ 成立,而且下一集推表格情形时也只需要 ≤。 这条结果没有被证明,是引用 Tsitsiklis 与 Van Roy 的。本片按约定标出来。 那么问题来了:前四讲用的全是 TD 类方法,为什么从来没见过这个一百倍?下一集回答它——答案会同时解释这整讲为什么直到现在才出现。
35 / 65

知识点 5 · 总结

MC 收敛到最优逼近,TD 收敛到另一个点,界是 1/(1−γ) 倍

核心结论

MSVE(w_TD) ≤ [1/(1−γ)]·min_w MSVE(w)。因子:γ=0.9 → 10;γ=0.95 → 20;γ=0.99 → 100。

底层机制

MC 的标签无偏,做的是标准最小二乘;TD 的标签含 w,它并不在最小化 MSVE(第七集)。

常见误解

误解:「都收敛所以都收敛到最优逼近」。只有 MC 是。另:讲座两次把 ≤ 说成 =。

与你的考试

这是最坏情况的界,不是实际差距。与 L2 第九集的 γ/(1−γ) 同形:凡是自举,1/(1−γ) 就会作为放大系数出现。

36 / 65

知识点 5 · 检验

γ = 0.99 时,Tsitsiklis–Van Roy 的界说 TD(0) 的 MSVE 最多是最优逼近的多少倍?

知识点 7

6 · 表格特征是这两条结论的零点 —— 所以前四讲没撞见过

37 / 65
前四讲全用 TD 类为什么没见过 100 倍
上一集那个 100 倍,在 L1–L4 里一次都没出现过。为什么?
讲解
上一集说 TD 可能差最优逼近一百倍。可是前四讲通篇在用 TD、SARSA、Q-learning,从来没有出现过这种损失——那里的收敛结论都是干脆的「收敛到 V^π」或「收敛到 Q*」。 这不是因为前四讲讲得粗糙。它们的结论是对的。 答案在于:表格恰好让这条界的右边变成 0。而任何倍数乘以 0 还是 0。
38 / 65
表格只是特征多一点本质上和别的特征没区别
表格确实只是一组特征 —— 但它是让误差下界归零的那一组。
讲解
第一集已经说过表格是 one-hot 特征下的线性逼近,所以「它只是一组特征而已」听起来是第一集结论的自然延伸。 这个说法形式上没错,但它漏掉了 one-hot 的一个独有性质,而正是那个性质让前四讲的一切成立。 漏掉它的后果是:你会以为前四讲的保证可以平移到别的特征上。不能——它们全都依赖那个性质。
39 / 65
one-hot⟹∃w: V^(⋅;w)=Vπ⟹minwMSVE=0
真值就在可表示类里
one-hot 的独有性质:可表示的函数类装得下真值函数本身。
讲解
one-hot 特征的独有性质是:可表示的函数类装得下真值函数本身。取 w = V^π(把每个状态的真值直接填进对应的权重分量),就精确表示出了 V^π。 于是 min_w MSVE(w) = 0:最优逼近误差是零,因为根本不需要逼近。 这在别的特征下几乎从不成立。只要特征维数小于状态数,可表示类就是一个低维子空间,真值函数一般不在里面,min MSVE > 0。 下一镜把这个 0 代进上一集那两条结论。
40 / 65
MC 的 MSVETD 的 MSVE00100 × 0 还是 0
代进去:MC 误差 = 0,TD 误差 ≤ 100 × 0 = 0。两者都精确为零。
讲解
看什么:看两根柱子都贴在地面上——这不是画错了,它们的值就是 0。整集的要点就是这两根柱子为什么是平的:因为可表示类装得下真值,最优逼近误差本身是零。 —— 把 min MSVE = 0 代进上一集的两条结论。 MC 达到 min MSVE,所以它的误差是 0。 TD 的误差 ≤ [1/(1−γ)]×0 = 0。那个一百倍的因子乘在零上,消失了。 这就是前四讲为什么从来没见过这个问题:表格把界的右边压成了零,于是因子多大都无所谓。 顺带说明为什么这里只需要 ≤:要得出「TD 误差为 0」,有上界就够了,不需要上一集那个被口误说成等号的版本。这也是为什么那处口误虽然是错的,却没有影响她后面的推论。
41 / 65
✓one-hot真值在可表示类里✓min MSVE = 0不需要逼近✓因子被吞掉100 × 0 = 0前四讲站在这个 0 上
指名反驳:表格不是「特征多一点」,是让误差下界归零的那一组。
讲解
指名回去:表格不是「特征多一点」,它是唯一让 min MSVE 归零的那一组特征。前四讲的每一条保证都站在这个 0 上。 这给出一个很实用的判别法:凡是你在 L1–L4 学到的干净结论,先问一句「它是不是依赖 min MSVE = 0」。如果是,换成真实特征后它就只剩一个带因子的版本。 到这里为止,坏消息还都是量上的——收敛还在,只是收敛到的地方差一点。 从下一集开始变成质上的:我们会看到 TD 加函数逼近其实不是梯度下降,因此连「它在最小化什么」都答不上来;再往后,连收敛本身都会失去。
42 / 65

知识点 6 · 总结

表格是这两条界的零点 —— 所以前四讲从没撞见过

核心结论

one-hot ⟹ 真值函数在可表示类里 ⟹ min_w MSVE = 0。于是 MC 误差 = 0,TD 误差 ≤ 100×0 = 0。

底层机制

那个 1/(1−γ) 的因子乘在零上就消失了。因子多大都无所谓 —— 这正是前四讲结论干净的原因。

常见误解

误解:「表格只是特征多一点」。形式上对,但漏掉了它独有的性质:可表示类装得下真值。

与你的考试

判别法:L1–L4 的每条干净结论,先问「它是否依赖 min MSVE = 0」。是,则换成真实特征后只剩带因子的版本。

43 / 65

知识点 6 · 检验

为什么 L1–L4 的 TD 类算法从没出现过那个 1/(1−γ) 的损失?

知识点 8

7 · 半梯度:TD 加函数逼近不是梯度下降

44 / 65
Δw=α(r+γx(s′)⊤w−x(s)⊤w)x(s)
目标里也有 w
TD 的标签依赖于你正在优化的参数。监督学习里没有这种事。
讲解
把 TD 那个填法写全:目标是 r + γ·x(s′)ᵀw。 请盯住这个 w。它和更新式左边要改的那个 w 是同一个。也就是说,你的「标签」依赖于你正在优化的参数——你每走一步,标签本身就跟着动。 监督学习里没有这种事:标签是外部给定的,固定不变。第三集提过这一点是个伏笔,现在把它兑现。 问题很具体:既然目标里含 w,求梯度时该不该对它也求导?
45 / 65
它在最小化某个损失毕竟长得就是梯度下降的样子
形式上一模一样 —— 但它不是任何函数的梯度。
讲解
这个错误模型几乎不可避免,因为更新式长得就是梯度下降:误差乘梯度乘步长。而且我们是从一个明确的损失函数 J(w) 推出来的。 于是很自然地认为:TD 也在最小化某个东西,只是那个东西可能不是 MSVE 而已。 实际上更强也更坏:它不是任何函数的梯度。不存在一个 J,使得这条更新是 ∇J。所以「TD 在最小化什么」这个问题没有答案,不是答案难找。
46 / 65
∇w(r+γx(s′)⊤w−x(s)⊤w)2=2δ(γx(s′)−x(s))
真梯度含 γx(s′)TD 把它丢掉了
真正求导会带出 γx(s′) 这一项。TD 把它扔了,只留 −x(s)。
讲解
老老实实对平方误差求导,目标里的 w 也要算进去,于是得到的梯度里含 γx(s′) − x(s) 两项。 而 TD 的更新只用了 x(s)。它假装目标是常数,把 γx(s′) 那一项直接扔掉了。 这就是「半梯度」这个名字的来历——只取了梯度的一半。 为什么要扔?因为不扔的那个版本(叫残差梯度)虽然是真正的梯度下降、保证收敛,但它收敛得慢,而且在随机环境里需要两个独立样本才能无偏。半梯度快得多,所以实践里用的都是它——代价就是失去了「在最小化什么」这个问题的答案。
47 / 65
✓MC 的填法标签不含 w · 真梯度✕TD 的填法标签含 w · 半梯度—残差梯度真梯度但慢只有 MC 是真的梯度下降
三个填法里,只有 MC 的标签不含 w,所以只有它是真梯度下降。
讲解
把三个填法按这条标准排一下。 MC:标签是实际回报 G_t,是环境给的,不含 w。所以它是真正的随机梯度下降,有明确的损失函数(MSVE),收敛性由标准的随机逼近理论给出。这也解释了上一集为什么只有 MC 达到 min MSVE——因为只有它真的在最小化那个东西。 TD:标签含 w,扔掉一项,半梯度。没有对应的损失函数。 残差梯度:不扔那一项,是真梯度,收敛有保证——但慢,且在随机环境里要两个独立样本。讲座提到了它但没展开。 所以上一集那个「TD 收敛到另一个不动点」现在有了解释:它收敛到的是一个不动点,而不是某个函数的极小点。这两件事完全不同。
48 / 65
不动点 ≠ 极小点所以没有下降保证
指名反驳:它不是任何函数的梯度,所以没有「每步都在变好」这回事。
讲解
指名回去:TD 加函数逼近不是在最小化任何函数。它不是任何 J 的梯度,所以问「它在最小化什么」得不到答案。 最实际的后果是:没有单调下降的保证。真正的梯度下降在步长够小时每一步都不会变差;半梯度没有这个性质,因为根本没有一个「差」可以衡量。 它收敛时,收敛到的是不动点——一个「再更新也不动了」的点,而不是「误差最小」的点。上一集那个 1/(1−γ) 的界,量的正是这两者之间可以差多远。 到这里为止收敛还在。下一集把它也拿掉。
49 / 65

知识点 7 · 总结

TD 加函数逼近不是梯度下降,是半梯度

核心结论

真梯度含 γx(s′) − x(s) 两项,TD 只用 x(s),把 γx(s′) 扔了(假装目标是常数)。所以它不是任何 J 的梯度。

底层机制

三个填法里只有 MC 的标签不含 w,只有它是真梯度下降 —— 这也解释了为什么只有它达到 min MSVE。

常见误解

误解:「它在最小化某个损失,只是不是 MSVE」。更强也更坏:不存在那个损失函数。

与你的考试

后果:没有单调下降保证。它收敛到的是不动点而非极小点;1/(1−γ) 量的正是两者能差多远。

50 / 65

知识点 7 · 检验

「半梯度」这个名字里的「半」指的是什么?

知识点 9

8 · Baird:同一个反例,在策略收敛,离策略发散

51 / 65
x(si)=2ei+e8 (i≤6),x(s7)=e7+2e8
7 状态 · 8 维特征奖励全 0,真值 V ≡ 0
Baird 的反例:正确答案是把所有 V̂ 压到 0,没有比这更简单的目标。
讲解
Baird 的反例是这一讲的主角。设定简单到有点可笑:7 个状态,8 维特征,所有奖励都是 0。 所以真值函数 V ≡ 0,正确的答案就是把每个 V̂(s) 压到零。而且可表示类里确实有这个解(w = 0 就行),逼近误差可以做到 0。 换句话说,这不是一个「函数类不够表达」的问题。目标就在类里,而且是最平凡的那个点。 先说一处字幕:这些特征向量在自动字幕里被念成了「200013」「two, two, three, four, five, six, seven」这类完全读不出来的东西——她是一边指板一边念槽位。本片按她口述的两个可验证的数把索引反推回来了,下一镜验证。
52 / 65
那是特征没选好或者步长开太大了
两个都不是。同一组特征、同一个步长,换个数据来源就不发散了。
讲解
看到发散,最自然的两个诊断是「特征选得不好」和「步长太大」。它们在深度学习里往往是对的,所以这个反应很难避免。 两个都不是。这一集的做法是把其他一切都固定住:同一个 MDP、同一组特征、同一个 α、同一个 γ、同样的更新式,只换数据来自哪个策略。 一边收敛,一边发散。那么原因就只能是被换掉的那一样东西。
53 / 65
w=1:V^(s1)=2+1=3,V^(s7)=1+2=3
这两个数她说了用来反推特征索引
验证重建:w 取全 1 时两个值都是 3 —— 与她课上说的一致。
讲解
怎么确认特征索引重建对了:她在课上明确说出了两个数——w 取全 1 时 V̂(s₁)=3、V̂(s₇)=3。 代进重建的特征:V̂(s₁) = 2·1 + 1 = 3 ✓;V̂(s₇) = 1 + 2·1 = 3 ✓。两个都对得上,重建可信。 同样的办法也能确认更新后的权重:字幕里那串「minus two, one, two, three, four, five, six minus 0.5」其实是 w = (−2, 1, 1, 1, 1, 1, 1, −0.5)——她在数那六个没变的 1。 再标一处:讲座前半段的 TD 更新用 γ=0.9(于是 TD 误差是 0 + 0.9×3 − 3 = −0.3),后半段的离策略例子改用 γ=0.99(与 Sutton & Barto 一致)。0.9 是为了心算方便,不影响定性结论,但两处不是同一个数。
54 / 65
在策略 k=100离策略 k=1002.6217.42真值是 0
跑 100 轮之后的 V̂(s₁):在策略 2.62(在往 0 走),离策略 17.42(在往反方向跑)。
讲解
看什么:看两根柱子朝哪个方向。真值是 0,所以越矮越好。左边这根从初始的 3.00 降到了 2.62,正在往 0 走;右边这根从 3.13 涨到了 17.42,正在往反方向跑。 —— 跑 100 轮同步更新,α=0.01,γ=0.99。 在策略(行为策略就是目标策略):V̂(s₁) 从 3.00 降到 2.62,‖w‖ 从 9.99 降到 9.05。在往正确答案 0 收。 离策略(行为策略大多走虚线散开,目标策略永远走实线去 s₇):V̂(s₁) 从 3.13 涨到 17.42。在往反方向跑。 再跑到 1000 轮,差距变得荒谬:在策略降到 1.53,离策略涨到 563.9,而‖w‖∞ 到了 335。真值一直是 0。 没有任何东西被改动,除了数据来自哪个策略。
55 / 65
✓特征两边完全相同✓α 与 γ两边完全相同✕数据分布唯一的差别真值就在可表示类里
指名反驳:不是特征也不是步长。唯一变量是数据来自哪个策略。
讲解
指名回去:既不是特征不好,也不是步长太大。两边的特征、步长、折扣、更新式完全一样,唯一的变量是数据来自哪个策略。 而且要再强调一次:真值就在可表示类里(w=0 精确表示 V≡0),逼近误差可以是 0。所以这也不是「函数类不够用」。 讲座还提到了一个更狠的版本:即使把动作不匹配的样本丢掉(只保留目标策略也会选的那些转移),发散依然发生。所以也不是简单的样本污染。 那到底是什么坏了?下一集回答——而答案会让 L2 第八集那条最漂亮的定理失效一半。
56 / 65

知识点 8 · 总结

同一个反例:在策略收敛,离策略发散

核心结论

Baird 7 状态、8 维特征、奖励全 0(真值 V≡0,且 w=0 精确可表示)。α、γ、特征全部相同,跑 1000 轮:在策略 V̂(s₁) 3.00→1.53,离策略 3.13→563.9。

底层机制

唯一变量是数据来自哪个策略。不是特征不好,不是步长太大,也不是函数类不够用。

常见误解

误解:「那是特征没选好/步长开太大」。两者在两边完全相同。丢掉动作不匹配的样本也照样发散。

与你的考试

字幕重建:x(sᵢ)=2eᵢ+e₈、x(s₇)=e₇+2e₈,由她口述的 V̂(s₁)=V̂(s₇)=3 验证。γ 两处不同:前 0.9,后 0.99。

57 / 65

知识点 8 · 检验

Baird 反例里,离策略半梯度 TD 发散的原因是什么?

知识点 10

9 · 致命三要素 —— 而且「稳定」还不是终点

58 / 65
‖BV−BV′‖∞≤γ‖V−V′‖∞
L2 第八集证过那怎么还会发散
Bellman 算子确实是 γ-压缩。这条定理没有被推翻。
讲解
L2 第八集证明过:Bellman 算子在 sup 范数下是 γ-压缩,而压缩映射有唯一不动点、迭代必收敛、与初值无关。那条证明没有任何问题,这里也没有被推翻。 可是上一集的数字明明在发散。两件事怎么同时成立? 答案是:现在跑的不是那个算子。函数逼近在每一步后面偷偷加了一个操作,而那个操作不是压缩。
59 / 65
压缩映射不会发散L2 已经证过了,用就是了
定理没错,但你跑的已经不是那个映射了。
讲解
这个错误模型的依据是一条被正确证明过的定理,这让它格外顽固——你会本能地认为发散一定是实现有 bug。 漏掉的是定理的适用范围。L2 那条定理说的是「Bellman 算子 B」这一个映射。而函数逼近下,你每次更新之后还要把结果投影回可表示的函数类——因为 BV 一般不再是 x(·)ᵀw 的形式。 所以你实际迭代的是复合映射 Π∘B,不是 B。定理管 B,不管 Π∘B。
60 / 65
Vk+1=ΠBVkΠ: project onto {x(⋅)⊤w}
B 是压缩Π 可能是扩张
复合映射 Π∘B:压缩接一个可能扩张的投影,结果未必还是压缩。
讲解
真正在迭代的是 Π∘B:先做一次 Bellman 回溯,再投影回可表示的函数类。 B 是 γ-压缩,这一半没问题。问题在 Π。 投影在它自己的加权范数下是非扩张的——这是投影的标准性质。但 B 的压缩性是在 sup 范数下成立的。两个范数不一致,于是「先压缩再投影」在 sup 范数下可能是扩张的。 复合的结果就不保证是压缩,于是不动点可能根本不存在,迭代可以一路跑掉。 在策略时两个范数恰好对上了(投影用的正是 d 加权范数,而在策略的 B 在那个范数下也是压缩),所以没事。离策略时数据的分布是 d_b 而目标要的是 d_π,对不上——这就是上一集那个唯一变量的数学内容。
61 / 65
✕函数逼近带来投影 Π✕自举目标里含 w✕离策略两个分布对不上三个齐了才会炸
致命三要素:三个单独都没事,凑齐才发散。
讲解
把条件收拢成三条,就是 Sutton 与 Barto 说的致命三要素:函数逼近、自举、离策略。 关键是它们单独都没事: 只有函数逼近(用 MC)——收敛,而且达到 min MSVE。 只有自举(表格 TD)——收敛,前四讲全在做这件事。 只有离策略(表格 Q-learning)——收敛,L4 第七集说过。 三个凑齐才发散。上一集的反例正是把第三条开关拨了一下。 这也直接决定了 L6 的内容:深度 Q 网络三条全占。所以 DQN 的那两个补丁——经验回放、目标网络——不是工程调优,它们是冲着这三条里的具体某一条去的。
62 / 65
稳定收敛到哪两个问题,都要答
指名反驳:定理没错,你跑的不是那个映射。而且稳定还不是终点。
讲解
指名回去:L2 那条压缩性定理完全正确,但它管的是 B,而你迭代的是 Π∘B。压缩接一个在错误范数下可能扩张的投影,复合未必还是压缩,于是不动点可能不存在。 最后是她在这一讲结尾说的一句话,值得单独记住:稳定还不够。 把发散修掉只是及格线。一个方法收敛到哪里——那取决于目标函数和特征的选择——和「它收不收敛」同样重要。第五集那个 1/(1−γ) 的界量的就是这件事:一个完全稳定、保证收敛的方法,仍然可能收敛到一个差很多的地方。 所以评价一个值函数逼近方法要问两个问题,而不是一个。整门课后面的内容——从 DQN 到策略梯度——都可以按这两个问题来读。
63 / 65

知识点 9 · 总结

压缩接投影未必还是压缩;而且稳定还不是终点

核心结论

实际迭代的是 Π∘B。B 是 sup 范数下的 γ-压缩,Π 只在自己的加权范数下非扩张 —— 两个范数不一致,复合可能扩张,不动点可能不存在。

底层机制

致命三要素:函数逼近 + 自举 + 离策略。三者单独都收敛,凑齐才发散。在策略时两个范数恰好对上,所以没事。

常见误解

误解:「压缩映射不会发散,L2 证过了」。定理没错 —— 你跑的已经不是那个映射。

与你的考试

她的结语:稳定还不够。收敛到哪(取决于目标与特征)和收不收敛同样重要 —— 第五集的 1/(1−γ) 量的就是这件事。

64 / 65

知识点 9 · 检验

L2 证明了 Bellman 算子是 γ-压缩。为什么函数逼近下还会发散?

知识点 11

完

65 / 65
讲解
回头看这九集,承重的是三件事。 第一,表格是一个特例,而不是默认。它对应「one-hot 特征 + 线性」这一种选择,而正是这个选择让 min MSVE = 0,从而让 MC 与 TD 收敛到同一处、让前四讲的所有保证成立。一旦特征不是 one-hot,更新一个状态就会改变别的状态的值——泛化和干扰是同一件事的两面。 第二,TD 加函数逼近不是梯度下降。更新式的目标里也含 w,但求导时假装它是常数,所以它是「半梯度」,没有对应的损失函数。Bellman 回溯确实是 γ-压缩(L2 第八集证过),但投影回可表示类可能是扩张,两者复合就未必还是压缩,于是不动点可能根本不存在。 第三,致命三要素:函数逼近 + 自举 + 离策略。Baird 反例把这一点摆得很清楚——同一个 MDP、同一组特征、同一个 α 和 γ,只换数据来自哪个策略:在策略时 V̂(s₁) 从 3.00 收到 1.53,离策略时从 3.13 涨到 563.9,而真值是 0。 她最后那句话值得单独记住:稳定还不够。一个方法收敛到哪里,取决于目标函数和特征,而这件事和「它收不收敛」同样重要。 下一讲把线性特征换成卷积网络,三要素一个不少地全部齐备——所以 DQN 的那两个补丁(经验回放、目标网络)不是工程技巧,是直接冲着这一讲的病去的。