文章目录
-
- [一、核心问题(Core Question):长期回报到底是什么?](#一、核心问题(Core Question):长期回报到底是什么?)
- 二、蒙特卡洛(MC):整局打完,再算平均回报
- 三、时序差分(TD):把"整局回报"拆成一步步的修正
- [四、Q-learning:在 TD 框架里,把"动作"直接放进来](#四、Q-learning:在 TD 框架里,把“动作”直接放进来)
- 五、把三者串起来看:同一件事的三种"算法"
- 六、公式与符号小科普(集中解释一遍字母)
-
- [1. 回报(Return)](#1. 回报(Return))
- [2. 状态价值与动作价值](#2. 状态价值与动作价值)
- [3. MC 估计与更新](#3. MC 估计与更新)
- [4. TD(0) 更新与 TD 误差](#4. TD(0) 更新与 TD 误差)
- [5. Q-learning 更新](#5. Q-learning 更新)
当你第一次看 Sutton & Barto,最容易卡住的是:公式一堆,但不知道它们"到底在算什么"。这篇文章只做一件事:用几条关键公式,把蒙特卡洛(MC)、时序差分(TD)和 Q-learning 串成一条清晰的理解路径,让你看到:强化学习其实就是在反复回答一个问题------这个状态/动作,从长期来看值不值。 en.wikipedia
一、核心问题(Core Question):长期回报到底是什么?
强化学习不是在问"这一步赚了多少",而是在问: "从现在开始往后看,总共大概能赚多少?" 这个东西叫"回报"。在 Sutton & Barto 里,一个时间步 t t t 的回报定义是: yashbonde.github
G t = R t + 1 + γ R t + 2 + γ 2 R t + 3 + ... G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \dots Gt=Rt+1+γRt+2+γ2Rt+3+...
这里有两个核心点:
- R t + 1 R_{t+1} Rt+1:下一步的奖励
- γ ∈ \gamma \in γ∈:折扣因子,离现在越远,权重越小 towardsdatascience
直觉:今天的 10 分,比 10 步之后的 10 分更值钱。 如果你把任何状态的"长期好坏"都理解成一个 G t G_t Gt,后面的所有算法,其实都只是在想办法"估这个 G t G_t Gt 到底多大"。 people.cs.umass
二、蒙特卡洛(MC):整局打完,再算平均回报
如果你暂时忘掉所有术语,只保留"多打一局,看看总得分",那你已经抓住了蒙特卡洛的核心:每次从某个状态出发,走到游戏结束,算出这次的完整回报 G t G_t Gt,然后对这些 G t G_t Gt 取平均。 lcalem.github
在 Sutton & Barto 的定义中,对一个给定策略 π \pi π,状态价值 V π ( s ) V_\pi(s) Vπ(s) 就是"从状态 s s s 开始的期望回报": web.stanford
V π ( s ) = E π [ G t ∣ S t = s ] V_\pi(s) = \mathbb{E}_\pi[G_t \mid S_t = s] Vπ(s)=Eπ[Gt∣St=s]
而 MC 的做法,就是用"样本平均"逼近这个期望:如果我们在不同回合中多次访问状态 s s s,得到的回报分别是 G ( 1 ) , G ( 2 ) , ... , G ( n ) G^{(1)}, G^{(2)}, \dots, G^{(n)} G(1),G(2),...,G(n),那 MC 给出的估计就是: profs.scienze.univr
V ^ ( s ) = 1 n ∑ i = 1 n G ( i ) \hat{V}(s) = \frac{1}{n}\sum_{i=1}^n G^{(i)} V^(s)=n1i=1∑nG(i)
翻成人话就是:
- 每次从 s s s 开始,到一局结束,算一次"总战绩"
- 多次之后,把所有"总战绩"取平均,就是"这个状态大概有多好"的估计
因为它直接平均真实发生的回报,所以从统计上说,这个估计是"无偏"的------随着回合数增加,它会越来越接近真正的 V π ( s ) V_\pi(s) Vπ(s)。 people.cs.umass
代价也很直接:你必须先拿到完整的 G t G_t Gt,也就是必须等整局结束才能更新一次 ,在回合很长的任务里学习会非常慢。 lcalem.github
三、时序差分(TD):把"整局回报"拆成一步步的修正
MC 的问题是:太慢。你每次都要等到 G t G_t Gt 算完,才能更新一次 V ( s ) V(s) V(s)。TD 的想法是:能不能不等整局结束,先用"当前奖励 + 下一步的估计"来近似 G t G_t Gt? web.stanford
在 MC 里,我们的增量更新可以写成:
V ( S t ) ← V ( S t ) + α ( G t − V ( S t ) ) V(S_t) \leftarrow V(S_t) + \alpha \big(G_t - V(S_t)\big) V(St)←V(St)+α(Gt−V(St))
这就是"朝着真实回报 G t G_t Gt 靠一点"。TD 直接把 G t G_t Gt 换成一个一步近似:用"下一步奖励 + 之后的折扣价值"来近似整局回报: yashbonde.github
G t ≈ R t + 1 + γ V ( S t + 1 ) G_t \approx R_{t+1} + \gamma V(S_{t+1}) Gt≈Rt+1+γV(St+1)
代入之后,就得到了最经典的 TD(0) 更新式: web.stanford
V ( S t ) ← V ( S t ) + α ( R t + 1 + γ V ( S t + 1 ) − V ( S t ) ) V(S_t) \leftarrow V(S_t) + \alpha \big(R_{t+1} + \gamma V(S_{t+1}) - V(S_t)\big) V(St)←V(St)+α(Rt+1+γV(St+1)−V(St))
括号里的那一项:
δ t = R t + 1 + γ V ( S t + 1 ) − V ( S t ) \delta_t = R_{t+1} + \gamma V(S_{t+1}) - V(S_t) δt=Rt+1+γV(St+1)−V(St)
就是 TD 误差(Temporal Difference Error)。你可以记成一句话:"新信息"(即时奖励 + 下一步的估计)减去"旧看法",差多少就修正多少。 incompleteideas
和 MC 相比,TD 做了两件关键的事情:
- 不再等整局结束,只要走了一步就能更新
- 用"对未来的估计"代替"真实完整回报"
本质就是把"整局回报"拆成一连串"局部小纠偏"。这也是为什么 TD 被认为更"增量式"和"在线",适合长期持续的任务。 incompleteideas
四、Q-learning:在 TD 框架里,把"动作"直接放进来
到目前为止,我们只是在估计"状态好不好"( V ( s ) V(s) V(s))。但真正做决策时,我们需要的是:在状态 s s s 下,不同动作 a a a 的长期回报分别是多少? 这就是动作价值函数 Q ( s , a ) Q(s,a) Q(s,a): en.wikipedia
Q π ( s , a ) = E π [ G t ∣ S t = s , A t = a ] Q_\pi(s,a) = \mathbb{E}_\pi[G_t \mid S_t = s, A_t = a] Qπ(s,a)=Eπ[Gt∣St=s,At=a]
Q-learning 做的事情,就是把 TD 的那一套,用在 Q ( s , a ) Q(s,a) Q(s,a) 上,然后在更新时直接朝"最优动作"看齐。它的核心更新公式是: en.wikipedia
Q ( S t , A t ) ← Q ( S t , A t ) + α ( R t + 1 + γ max a Q ( S t + 1 , a ) − Q ( S t , A t ) ) Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha \Big(R_{t+1} + \gamma \max_{a} Q(S_{t+1}, a) - Q(S_t, A_t)\Big) Q(St,At)←Q(St,At)+α(Rt+1+γamaxQ(St+1,a)−Q(St,At))
拆读这条更新:
- 当前这一步的"旧看法": Q ( S t , A t ) Q(S_t, A_t) Q(St,At)
- 一步 TD 目标: R t + 1 + γ max a Q ( S t + 1 , a ) R_{t+1} + \gamma \max_a Q(S_{t+1}, a) Rt+1+γmaxaQ(St+1,a)
- 用学习率 α \alpha α 把两者之间的差,"修正一小步"
和 TD 状态价值的更新相比,唯一的关键变化是:γ V ( S t + 1 ) \gamma V(S_{t+1}) γV(St+1) 变成了 γ max a Q ( S t + 1 , a ) \gamma \max_a Q(S_{t+1}, a) γmaxaQ(St+1,a) ,也就是不再依赖"当前策略会选什么",而是假设"下一步总能选到 Q 最大的动作" 。 yashbonde.github
这就是 Q-learning 被称为 off-policy 的原因:即使你当前的行为策略还在随机探索,它的学习目标已经对准了"那个永远选择最优动作的理想策略"。在合适条件下(学习率衰减、足够探索等),这种"看齐最优"的更新可以收敛到真实的最优动作价值函数 Q ∗ ( s , a ) Q^*(s,a) Q∗(s,a)。 en.wikipedia
五、把三者串起来看:同一件事的三种"算法"
如果只看公式,很容易觉得分散;但一旦用"它们都在近似同一个东西"来对照,MC、TD 和 Q-learning 的关系其实非常整齐。 people.cs.umass
以"预测一个状态好不好"为例:
-
MC 更新:
V ( S t ) ← V ( S t ) + α ( G t − V ( S t ) ) V(S_t) \leftarrow V(S_t) + \alpha \big(G_t - V(S_t)\big) V(St)←V(St)+α(Gt−V(St))用整局真实回报 G t G_t Gt 修正,必须等结束。 yashbonde.github
-
TD(0) 更新:
V ( S t ) ← V ( S t ) + α ( R t + 1 + γ V ( S t + 1 ) − V ( S t ) ) V(S_t) \leftarrow V(S_t) + \alpha \big(R_{t+1} + \gamma V(S_{t+1}) - V(S_t)\big) V(St)←V(St)+α(Rt+1+γV(St+1)−V(St))用"下一步奖励 + 下一步的估计"修正,每一步都能学。 web.stanford
扩展到动作价值时,就有:
- MC 版 Q Q Q 估计:多次从 ( s , a ) (s,a) (s,a) 出发,平均所有回合的 G t G_t Gt,得到 Q ^ ( s , a ) \hat{Q}(s,a) Q^(s,a)。 towardsdatascience
- TD 版 Q Q Q 估计(Q-learning):用一步 TD 目标
R t + 1 + γ max a ′ Q ( S t + 1 , a ′ ) R_{t+1} + \gamma \max_{a'} Q(S_{t+1}, a') Rt+1+γa′maxQ(St+1,a′)
来替代整局回报,做增量更新。 en.wikipedia
你可以把它们看成一条统一链条:
- 都在逼近某个期望回报( V V V 或 Q Q Q)
- MC 用"整局真实 G t G_t Gt"逼近
- TD 用"一步近似的 TD 目标"逼近
- Q-learning 把 TD 目标换成"未来最优动作的 Q Q Q 值",从而朝最优策略学习
六、公式与符号小科普(集中解释一遍字母)
为了方便新手扫一眼就搞清楚每个字母在说什么,这里对文中用到的关键公式集中解释一次。
1. 回报(Return)
G t = R t + 1 + γ R t + 2 + γ 2 R t + 3 + ... G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \dots Gt=Rt+1+γRt+2+γ2Rt+3+...
- t t t:当前时间步
- G t G_t Gt:从时间 t t t 开始,往后所有奖励加权求和得到的"总收益"
- R t + 1 , R t + 2 , ... R_{t+1}, R_{t+2}, \dots Rt+1,Rt+2,...:之后每一步收到的即时奖励
- γ \gamma γ:折扣因子,越接近 1 1 1 越重视长期,越接近 0 0 0 越偏向短期 people.cs.umass
2. 状态价值与动作价值
V π ( s ) = E π [ G t ∣ S t = s ] V_\pi(s) = \mathbb{E}_\pi[G_t \mid S_t = s] Vπ(s)=Eπ[Gt∣St=s]
- s s s:某个状态
- π \pi π:当前策略(在每个状态下选动作的规则)
- V π ( s ) V_\pi(s) Vπ(s):在策略 π \pi π 下,从状态 s s s 开始的期望总回报 en.wikipedia
Q π ( s , a ) = E π [ G t ∣ S t = s , A t = a ] Q_\pi(s,a) = \mathbb{E}_\pi[G_t \mid S_t = s, A_t = a] Qπ(s,a)=Eπ[Gt∣St=s,At=a]
- a a a:在状态 s s s 下选的动作
- Q π ( s , a ) Q_\pi(s,a) Qπ(s,a):在策略 π \pi π 下,从 ( s , a ) (s,a) (s,a) 开始的期望总回报 en.wikipedia
3. MC 估计与更新
V ^ ( s ) = 1 n ∑ i = 1 n G ( i ) \hat{V}(s) = \frac{1}{n}\sum_{i=1}^n G^{(i)} V^(s)=n1∑i=1nG(i)
- V ^ ( s ) \hat{V}(s) V^(s):用样本估计出的状态价值
- n n n:从状态 s s s 出发的回合次数
- G ( i ) G^{(i)} G(i):第 i i i 次从 s s s 开始到终局的总回报 lcalem.github
V ( S t ) ← V ( S t ) + α ( G t − V ( S t ) ) V(S_t) \leftarrow V(S_t) + \alpha \big(G_t - V(S_t)\big) V(St)←V(St)+α(Gt−V(St))
- S t S_t St:当前时间步的状态
- V ( S t ) V(S_t) V(St):当前对该状态价值的估计
- G t G_t Gt:这一回合从 S t S_t St 出发的真实总回报
- α \alpha α:学习率,控制本次更新幅度 ics.uci
4. TD(0) 更新与 TD 误差
V ( S t ) ← V ( S t ) + α ( R t + 1 + γ V ( S t + 1 ) − V ( S t ) ) V(S_t) \leftarrow V(S_t) + \alpha \big(R_{t+1} + \gamma V(S_{t+1}) - V(S_t)\big) V(St)←V(St)+α(Rt+1+γV(St+1)−V(St))
- R t + 1 R_{t+1} Rt+1:当前动作后立刻收到的奖励
- S t + 1 S_{t+1} St+1:下一步状态
- V ( S t + 1 ) V(S_{t+1}) V(St+1):当前对下一步状态价值的估计
- 其他符号同上 web.stanford
δ t = R t + 1 + γ V ( S t + 1 ) − V ( S t ) \delta_t = R_{t+1} + \gamma V(S_{t+1}) - V(S_t) δt=Rt+1+γV(St+1)−V(St)
- δ t \delta_t δt:TD 误差,表示"新信息"和"旧判断"的差距 incompleteideas
5. Q-learning 更新
Q ( S t , A t ) ← Q ( S t , A t ) + α ( R t + 1 + γ max a Q ( S t + 1 , a ) − Q ( S t , A t ) ) Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha \Big(R_{t+1} + \gamma \max_{a} Q(S_{t+1}, a) - Q(S_t, A_t)\Big) Q(St,At)←Q(St,At)+α(Rt+1+γmaxaQ(St+1,a)−Q(St,At))
- A t A_t At:在状态 S t S_t St 时采取的动作
- Q ( S t , A t ) Q(S_t, A_t) Q(St,At):当前对动作 ( S t , A t ) (S_t,A_t) (St,At) 的价值估计
- max a Q ( S t + 1 , a ) \max_a Q(S_{t+1}, a) maxaQ(St+1,a):在下一状态 S t + 1 S_{t+1} St+1 下,所有动作中的最大估计价值
- 整个括号:TD 目标 − - − 旧估计,表示这一步应该如何修正 web.stanford