【强化学习】01-概念全景:怎么“看懂”MC、TD 和 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))

拆读这条更新:

  1. 当前这一步的"旧看法": Q ( S t , A t ) Q(S_t, A_t) Q(St,At)
  2. 一步 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)
  3. 用学习率 α \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

相关推荐
智算菩萨2 小时前
【论文精读】通过元学习与关联规则挖掘增强人工智能在网络安全领域特征选择中的可解释性
论文阅读·人工智能·学习·web安全·论文笔记
AI创界者2 小时前
零门槛部署!MOSS-TTS 语音合成与音色克隆本地整合包发布(支持 API/低显存)
人工智能
IT 行者2 小时前
LangChain4j 集成 Redis 向量存储:我踩过的坑和选型建议
java·人工智能·redis·后端
YuanDaima20482 小时前
LangChain基础配置与对话模型实战
人工智能·python·langchain·大模型·智能体·langgraph
团子和二花3 小时前
Mem0:给 AI Agent 装上「长期记忆」
人工智能
chase。3 小时前
【学习笔记】基于扩散模型的运动规划学习与适应
人工智能·笔记·学习
机器觉醒时代3 小时前
RL Token:破解 VLA “最后一厘米”精度难题,在线强化学习实现机器人精准操控
人工智能·机器人·强化学习·具身智能·vla模型
Thomas.Sir3 小时前
第三章:RAG知识库开发之【RAG系统工作流程详细解析:从数据源到智能问答的全链路实战指南】
人工智能·ai·rag·离线处理·在线查询
电子科技圈3 小时前
Durin:Aliro标准赋能,打造无缝移动入户体验
人工智能·mcu·物联网·网络协议·智能家居·智能硬件·iot