强化学习新视角:从贝尔曼方程到TD方法的深度解析

B站影视 欧美电影 2025-08-30 19:40 2

摘要:TD(Temporal Difference,时间差分)方法无需使用模型,每执行一次行动便更新价值函数,不必等到回合结束即可定期评估并改进策略。

引言

强化学习问题的核心——贝尔曼方程

TD(Temporal Difference,时间差分)方法无需使用模型,每执行一次行动便更新价值函数,不必等到回合结束即可定期评估并改进策略

TD方法融合了蒙特卡洛方法动态规划法的结合。在讨论TD之前,我们必须回到一切的起点:贝尔曼方程

对于一个给定的策略π,其状态价值函数v_π满足贝尔曼期望方程:

这个方程是所有价值学习算法的基础,它揭示了价值函数具有的递归特性。我们的目标,无论是规划还是学习,都是为了求解这个方程(或其最优形式)。

即当前状态的价值由当前获得的奖励后续状态的价值共同决定,而后续状态的价值又以同样的方式递归地定义下去。这种自我引用的结构,使得价值函数可以通过自身的值来表达和计算。

求解贝尔曼方程的两种经典思路及其局限

动态规划 (DP): 基于模型的迭代解

核心思想: 如果我们拥有完整的环境模型p(s', r | s, a),贝尔曼方程就变成了一个可以通过迭代求解的线性方程组。

价值迭代更新式:

要计算左边的 V(s),必须能够遍历所有可能的动作a,并且对于每个 a,还要遍历所有可能的后继状态 s',同时使用已知的P和R进行加权求和。

P(Transition Probability): 有多大概率会进入下一个状态 s'。 (比如,80%概率前进成功,20%概率原地打滑)。

R (Reward Function): 在这个过程中,会得到多少奖励 r。(比如,成功前进一步奖励-1,撞墙奖励-10)。

如果不知道P和R,这个方程根本无法计算,动态规划就无从谈起。

贝尔曼最优方程的白话解读

“一个状态的最优价值,等于你在这个状态下,做出一个最优的单步动作选择后,所能得到的(立即奖励+所有可能的下一个状态的最优价值的折扣期望)。”

它如何体现动态规划思想?

最优子结构: 它假设一个最优策略的子策略也必须是最优的。一个状态s的最优价值,依赖于后继状态s'的最优价值。如果这个问题不成立,DP的整个递推逻辑就崩溃了。幸运的是,大多数我们关心的序贯决策问题(如走迷宫、下棋、资源调度)都天然满足这个原则。

重叠子问题: 在计算不同状态的价值时,对同一个后继状态s'的价值V*(s')会被反复使用。DP通过存储和复用这些计算结果(在价值迭代中,就是不断更新同一个V-table)来提高效率。

DP(比如价值迭代)通过不断迭代,计算出每一个位置的真实最优价值 V*(s)。当这个价值表计算完成后,我们在任何一个位置 s,只需要查看哪个动作 a 能把我们带到一个 R + γV*(s') 最大的位置,这个选择就必然是通往全局最优路径上的一步。(这个性质保证了“动态规划”这个“方法”能够找到全局最优解,从而必然避免了局部最优)。

备份方式:

全宽度备份 (Full Backup)。更新v(s)需要遍历所有后继状态s'和所有动作a。

工程局限:

模型依赖 (Model-based): p在绝大多数现实问题中是未知的。

维度灾难: 状态空间|S|过大时,遍历计算不可行。

动态规划 (DP) - 全知的“规划家”

他是谁?一个拥有完美地图(环境模型)的规划家。他待在家里,看着地图就能计算出最优路线。

怎么做?使用贝尔曼方程,遍历所有可能性,进行全宽度备份 (Full Backup)。

优点: 理论上能找到最优解,非常精确。

致命缺点太理想化了! 现实世界中,我们几乎不可能拥有那张“完美的地图”。

一句话总结DP我有上帝视角,但现实中我不是上帝

蒙特卡洛 (MC): 基于采样的直接估计

核心思想: MC方法不进行期望值的计算,而是通过对实际获得的收益的样本数据取平均来近似下面公式的期望值。绕开贝尔曼方程的递归形式,直接回归价值函数的定义:

V_π(s)当前的主观的估计值。

更新式:

新预测值 ← 旧预测值 + 学习率 * (真实值 - 旧预测值)。

用“实际走到底的全部奖励”G_t 去修正“对全部奖励的预测”。

其中,G_t = R_{t+1} + γR_{t+2} + ... + γ^{T-1}R_T 是一个完整回合的真实回报

备份方式:样本备份(Sample Backup),但必须是完整回合的样本。

随着我们玩的游戏局数越来越多,对每个状态的 V_π(S_t) 的估计值,就会因为吸收了成千上万次真实回报 (G_t) 的信息,而逐渐收敛到那个理论上的真实期望值。

工程局愈

高方差 (High Variance): G_t是多个随机变量的和,其方差很大,导致学习收敛慢。

回合制限制: 必须等到回合结束才能更新,不适用于连续任务或长回合任务。

蒙特卡洛 (MC)的白话解读

蒙特卡罗的V,其实就是多次G的平均值。

平均香蕉

有两条长度分别为A,B的香蕉(并假设:A>B)。 如果我要知道他们平均有多长。我只需要把A切成和B长。然后把多出来的那一节,再切一半,接到B就可以了。这时候,我们称那条加长了的B香蕉为平均香蕉。

如果这时候有第三条C呢?其实原理也一样,比较一下C和平均香蕉,然后把差切出来。但这个时候因为我们有3条香蕉要平均,所以我们要分3份,再接到平均香蕉上。再来一根香蕉也一样。

明白了吗?

V是G的平均值,但我们可以用增量更新的方式: 现在我们只需要记录之前的平均值V,新加进来的G,和次数N。我们把V和G的差,除以N,然后再加到原来的平均值V上,就能计算到新的V值。 V_new = V_old + (1/N) * (G - V_old)。

V_old:原来的V值,也就是平均香蕉 G:这一次回溯后,计算出来的G值,也就是新加进来的香蕉 N: 这个状态被经过多少次了。 V_new:新计算出来的V值,也就是平均香蕉。

更进一步

我们甚至可以不用记录N,而是用一个固定的学习率(比如0.1或0.2)来替代1/N。这样,每次更新时,只把G和V的差的一部分加到V上。虽然这样做每次的更新幅度不完全等于真实平均,但随着不断累计,V值依然会逐渐接近真实的平均值V。可以把G看作是在“拉”V向真实值靠近,很多个G一起拉,最终V就会收敛到真实值。

所以,我们把这里的G,也称为V的更新目标

而学习率表示每次V向目标靠近的速度。学习率不是越大越好,太大可能导致震荡,太小则收敛太慢。这样,我们就可以用“平均香蕉”的例子来理解蒙特卡洛的更新公式。

因此,我们可以用两种角度理解MC的更新公式:

第一种,我们用“平均香蕉”来理解。

第二种,我们用“G的拔河”来理解。

蒙特卡洛 (MC) - 耐心的“探险家”

他是谁? 一个没有地图的探险家。他只能通过一次又一次地走完全程来总结经验。

怎么做? 必须等待一个完整的回合 (Episode)结束,用最终的真实回报 G_t 来更新价值。

优点不需要地图(模型),非常实用。

致命缺点效率低! 如果一盘棋要下几百步,或者一个任务要跑很久,学习过程会非常缓慢。在连续任务中甚至无法使用。

一句话总结MC:我必须走完一生,才能评价我人生的第一步

蒙特卡洛(MC)的“等待”哲学

想象一下,现在在状态 S_t。MC的更新公式是:

V(S_t) ← V(S_t) + α * (G_t - V(S_t))。

为了使用这个公式,必须知道 G_t 的具体数值。

当只走一步时会发生什么:

在状态 S_t。还不知道 G_t 是多少。

采取了动作 A_t,然后环境给了一个奖励 R_{t+1},并且带到了下一个状态 S_{t+1}

现在,在 S_{t+1} 这个时间点,知道 G_t 是多少了吗?

G_t 的公式:G_t = R_{t+1} + γR_{t+2} + γ²R_{t+3} + ...。

刚刚只拿到了 R_{t+1}。

未来的所有奖励 R_{t+2}, R_{t+3}, R_{t+4} ... 这是完全是未知的

如何知道未来的奖励? 只有一个办法:继续往下走! 必须从 S_{t+1} 继续走,拿到 R_{t+2};再从 S_{t+2} 继续走,拿到 R_{t+3}... 直到整个回合结束。

只有当整个回合结束后,收集到了所有从 t+1 到结尾的奖励,才能把它们加起来,最终计算出 G_t 的确切数值

到这时,才能回过头来,用这个算出来的G_t去更新当初在状态S_t的价值V(S_t)

“如果我不想等呢?”——TD方法的诞生

“为什么公式中如果只有下一步的G不就能走一步了么?”

可能会想:“好吧,我不知道未来的 R_{t+2}, R_{t+3}...,所以我算不出真实的 G_t。但能不能不用真实的 G_t,而是用一个估计值来代替它呢?”

恭喜,你就“发明”了时序差分(TD)方法

TD方法的思想正是如此:

我们知道 G_t = R_{t+1} + γG_{t+1}

我们不知道G_{t+1}是多少,但我们知道它的期望值就是v_π(S_{t+1})

TD方法做了一个大胆的决定:“我不等了!我就用我现在对 v_π(S_{t+1}) 的估计值 V(S_{t+1}) 来代替整个未来的回报 G_{t+1}!”

于是,MC的更新目标G_t,就被TD方法替换成了TD目标 (TD Target): R_{t+1} + γV(S_{t+1})。

现在我们对比一下两个更新公式:

MC更新: V(S_t) ← V(S_t) + α * ( G_t - V(S_t) )。

TD更新: V(S_t) ← V(S_t) + α * ( [R_{t+1} + γV(S_{t+1})] - V(S_t) )。

关键区别:

为了得到MC的更新目标 G_t,必须走完整个回合

为了得到TD的更新目标 R_{t+1} + γV(S_{t+1}),只需要走一步,拿到 R_{t+1} 和 S_{t+1},然后查一下已有的对 V(S_{t+1}) 的估计值即可。

TD学习——融合DP与MC的优雅之道

TD学习结合了DP的自举 (Bootstrapping)和MC的采样 (Sampling)

(“自举”:使用价值函数的下一个估计值来更新价值函数的当前估计值。)

MC方法则根据实际获得的经验来更新当前的价值函数。

像DP方法一样,通过“自举”的方式就能依次更新价值函数。

像MC方法一样,无须了解环境相关的知识,使用采样数据就能对价值函数进行更新。

TD(0) 价值学习

观察贝尔曼方程 (1),其核心是期望E_π[...]。如果我们没有模型,无法计算这个期望,但我们可以用一次采样来近似它。

TD目标 (TD Target): R_{t+1} +γV(S_{t+1})。

这是一个有偏估计,因为它依赖于当前的估计值V(S_{t+1})

TD误差 (TD Error, δ_t):δ_t = R_{t+1} + γV(S_{t+1}) - V(S_t)。

TD(0) 更新式:V(S_t) ← V(S_t) + α * δ_t。

(此处为TD的备份图,它只连接了S_t和S_{t+1})

偏差-方差权衡

这是理解TD与MC区别的关键:

与蒙特卡洛方法相比,时序差分方法有如下几个优势:

低方差,能够在线学习,能够从不完整的序列中学习。 所以我们可以把时序差分方法也放到控制循环(control loop)里面去估计Q表格,再采取 ε。

ε-贪心探索改进。这样就可以在回合没结束的时候更新已经采集到的状态价值。

偏差(bias):描述的是预测值(估计值)的期望与真实值之间的差距。偏差越高,越偏离真实数据。

方差(variance):描述的是预测值的变化范围、离散程度,也就是离其期望值的距离。方差越高,数据的分布越分散。

工程启示: TD通常比MC有更高的样本效率 (sample efficiency),因为它方差更低,学习更稳定。但其偏差可能导致在某些情况下收敛到次优解。

n-步TD (n-step TD)

TD(0)和MC是两个极端。我们可以通过n-步TD在它们之间进行平滑过渡。

n-步回报G_t^{(n)}: R_{t+1} + γR_{t+2} + ... + γ^{n-1}R_{t+n} + γ^n V(S_{t+n})。

当n=1时,即为TD(0)。

当n→∞时,即为MC。

工程价值: n成为一个重要的超参数,用于平衡偏差和方差。A3C等算法就利用了n-step思想。

TD控制算法——SARSA vs. Q-Learning

TD核心思想:用更可靠的估计取代现有估计”,V(St)是现有估计,r+V(St+1)是更可靠估计,因为其中多了真实值r,所以不断用更可靠估计取代现有估计,就能慢慢接近真实值。

我们需要Q函数来进行决策。TD思想在控制问题上衍生出两种核心算法。

SARSA: On-Policy TD Control

SARSA是一种同策略 (On-policy)的时序差分 (TD) 算法。

“时序差分 (TD)” 意味着它和TD方法一样,不需要等到回合结束,每走一步都可以学习。

“同策略 (On-policy)” 是它与Q-learning最根本的区别。它的意思是:我学习评估的策略,就是我当前正在执行的这个策略

算法详解:SARSA是如何更新的?

Sarsa 所做出的改变很简单,它将原本时序差分方法更新 V 的过程,变成了更新 Q,即

TD估算V:

SARSA:

SARSA 算法的核心就是利用这一整条经验数据 (S_t, A_t, R_{t+1}, S_{t+1}, A_{t+1}) 来进行一次学习和更新。

Q(S_t, A_t): 这是我们对“在状态S采取动作A”的旧的价值估计

R_{t+1} + γQ(S_{t+1}, A_{t+1}): 这是SARSA目标 (SARSA Target),是我们的更新目标。

R_{t+1}: 我们走出一步后,获得的真实即时奖励

γQ(S_{t+1}, A_{t+1}): 这是对未来价值的估计。最关键的部分就在这里! S_{t+1} 是智能体在下一个状态 S_{t+1} 时,根据它当前的策略实际决定要走的下一个动作

[SARSA目标 - 旧的价值估计]: 这就是TD误差。它代表了现实(混合了真实奖励和下一步的估计)与我们旧的期望之间的差距。

特点:同策略 (On-policy)。它评估和改进的,就是它正在执行的那个ε-greedy策略。A_{t+1}是实际选择的下一个动作。

完整的学习流程(一步一步来)

智能体在一个回合中是这样学习的:

开始: 智能体处于状态 S。

选择动作: 根据当前的Q值和ε-greedy策略,选择一个动作 A。

执行动作: 执行动作 A,环境返回奖励 R 和新的状态 S'。

【关键步骤】选择下一个动作: 智能体现在处于新状态 S'。它再次根据当前的Q值和ε-greedy策略,选择它将要执行的下一个动作 A'。(注意:只是选择,还未执行!)

更新: 此刻,智能体拥有了完整的SARSA五元组 (S, A, R, S', A')。它使用上面的更新公式来更新 Q(S, A) 的值。

进入下一步: 将 S' 作为新的当前状态,A' 作为新的当前动作,然后重复从第3步开始的循环。

SARSA的优缺点

优点

学习过程稳定: 由于它考虑的是实际会发生的动作(包括探索性的动作),所以它的更新比较“保守”和稳定

适用于高风险环境: 在那些探索性动作可能导致严重后果的环境中(如机器人控制,错误的一步可能导致机器人摔倒),SARSA的这种“谨慎”特性让它表现得更好,因为它会学着避开那些即使最优路径在旁边、但探索起来很危险的区域。

缺点

可能不是最优策略: SARSA最终学习到的是它当前执行的那个ε-greedy策略的价值,而不是理论上最优的贪婪策略的价值。如果探索步骤(ε>0)永远存在,它可能永远无法收敛到真正的最优Q值

Q-Learning: Off-Policy TD Control

同策略和异策略

Sarsa 是一种同策略(on-policy)算法,它优化的是自己实际执行的策略。在学习过程中,Sarsa既用同一个策略来选择动作,也用它来更新 Q 表。因此,Sarsa在做决策时会考虑到未来可能的随机探索,比如在“悬崖”环境下,会主动让策略远离危险区域,从而提高安全性。

相比之下,Q学习是一种异策略(off-policy)算法。它区分目标策略(负责学习最优策略)和行为策略(负责探索环境)。行为策略可以大胆探索环境、收集各种经验,然后将这些经验用于优化目标策略。Q学习在更新 Q 值时,只关注最大回报的动作,而不考虑实际采取了哪个动作。这样,Q学习能够利用探索得到的丰富经验,更快地学习到最优策略。

简单来说,Sarsa更“谨慎”,优化的是实际执行的策略,适合高风险场景;Q学习更“激进”,利用探索经验优化目标策略,学习效率更高。

再例如,如下图所示。比如环境是波涛汹涌的大海,但学习策略(learning policy)太“胆小”了,无法直接与环境交互学习,所以我们有了探索策略(exploratory policy),探索策略是一个不畏风浪的海盗,它非常激进,可以在环境中探索。因此探索策略有很多经验,它可以把这些经验“写成稿子”,然后“喂”给学习策略。学习策略可以通过稿子进行学习。

异策略学习利用行为策略与环境交互产生的轨迹来更新目标策略 π。它的优势在于:不仅能高效探索并学习最优策略,还能通过模仿学习借鉴他人或其他智能体的经验,同时可以重复利用历史数据,节省计算资源。

算法详解

Q学习有两种策略:行为策略和目标策略。 目标策略 π 直接在 Q表格上使用贪心策略,取它下一步能得到的所有状态,即

行为策略 μ 可以是一个随机的策略,但我们采取 ε-贪心策略,让行为策略不至于是完全随机的,它是基于Q表格逐渐改进的。它会以 ε 的概率随机选择一个动作(探索),以 1-ε 的概率选择当前Q值最大的动作(利用)。

接着我们可以把 Q学习更新写成增量学习的形式,即:

Sarsa 在更新 Q 值时,使用的是实际执行的下一个动作(可能是随机的,也可能是贪心的),体现了同策略的特性。而 Q 学习在更新 Q 值时,总是选择下一个状态下 Q 值最大的动作进行计算,不管实际会执行哪个动作,体现了异策略的特点。因此,Q 学习不需要知道实际执行的下一个动作。Q学习直接看Q表格,取它的最大化的值,它是默认 A′为最佳策略选取的动作,所以 Q学习 在学习的时候,不需要传入 A′,即 at+1的值。(收集到S, A, R, S'就更新啦~)

Sarsa和Q学习的更新公式是一样的,区别只在目标计算部分:

Sarsa的目标是

Q学习 的目标是

Sarsa 用自己的策略产生了 S, A, R, S′, A′ 这条轨迹,然后用 Q(s_{t+1}, a_{t+1}) 去更新原本的 Q 值 Q(s_t, a_t)。但是 Q学习并不需要知道我们实际上选择哪一个动作,它默认下一个动作就是 Q 值最大的那个动作。Q学习知道实际上行为策略可能会有 0.1 的概率选择别的动作,但 Q学习并不担心受到探索的影响,它默认按照最佳的策略去优化目标策略,所以它可以更大胆地去寻找最优的路径,它表现得比 Sarsa 大胆得多。

同策略与异策略:SARSA和Q-learning对比

Sarsa 是一个典型的同策略算法,它只用了一个策略 π,不仅用 π 学习,也用 π 与环境交互产生经验。如果策略采用 ε-贪心算法,需要兼顾探索,因此训练时会显得“胆小”。在解决悬崖行走问题时,会尽量远离悬崖边,确保即使探索也在安全区域内。此外,由于采用 ε-贪心算法,策略会不断变化(ε 值逐渐减小),所以策略不稳定。

Q学习是一个典型的异策略算法,有目标策略和行为策略两种,分离了目标策略与行为策略。Q学习可以大胆地用行为策略探索得到的经验轨迹来优化目标策略,更有可能探索到最佳策略。行为策略可以采用 ε-贪心算法进行探索,目标策略采用贪心算法,直接利用采集到的数据优化最佳策略,因此 Q学习不需要兼顾探索。

比较 Q学习 和 Sarsa 的更新公式可以发现,Sarsa 并没有选取最大值的最大化操作。因此,Q学习是一个非常激进的方法,希望每一步都获得最大的利益;而 Sarsa 则相对保守,选择一条相对安全的迭代路线。

悬崖寻宝比喻

想象一个智能体在悬崖边寻宝。

宝藏:在悬崖边上,回报很高。

安全区:离悬崖远一点,回报较低。

悬崖:掉下去,回报极低(巨大惩罚)。

由于探索策略(ε-greedy)的存在,智能体总有一定概率会“脚滑”走错一步。

Q-Learning会学到:“去悬崖边!因为那里的宝藏价值最高!” 它在计算价值时,忽略了自己可能会脚滑掉下去的风险。

SARSA会学到:“离悬崖远一点,在安全区待着吧。虽然回报低点,但考虑到我有时候会脚滑,待在这里的长期总回报更稳定。” 它把“脚滑”的风险也算进了价值评估里。

因此,虽然它们都在努力填写同一张Q值表(价值函数),但填表时参考的“答案”不同,导致最终填出的内容和学到的行为策略也截然不同。

结论

TD学习不仅是一种独立的算法,更是现代强化学习的核心构件 (Building Block)。

它通过自举采样,在DP和MC之间取得了精妙的平衡。

它在偏差-方差权衡中提供了灵活的选择(n-step)。

它衍生出的SARSA和Q-learning定义了On-policy和Off-policy学习的范式。

其核心概念TD误差,是驱动DQN、A3C等深度强化学习算法进行优化的基本信号。

理解TD,是理解和应用现代强化学习技术的关键一步。

*引用注释:本文部分内容源自 张斯俊,《蒙地卡罗MC的更新公式怎么来的?》

来源:一个数据人的自留地

相关推荐