如果没有贝尔曼方程,强化学习可能只是一堆乱撞的随机尝试,而无法成为一种科学的优化方法。它的核心价值在于将远大的目光转化为了当下的计算
1.1 动作选择
假如我们有一个迷宫
| x | 1 |
|---|---|
| -1 |
很明显,如果往右走,可以得到奖励1,如果往下走,则会得到奖励-1,你会选择哪个呢?基于以上的信息,肯定会往右走。但是如果这个迷宫是这个样子呢
| x | 1 | -1 |
|---|---|---|
| -1 | ||
| 10 |
我们看到的信息更加全面了,这个时候毫不犹豫的就往下走,因为我们知道虽然此时受到了伤害,但是未来的奖励非常的大。但更多时候,我们的环境是这个样子的
| x | 1 | v1 |
|---|---|---|
| -1 | ||
| v2 |
我们并不知道v1和v2的值,v1和v2就好比一个未知的地洞,里面可能有丰厚的奖励,也有可能被大大的惩罚
如果v1和v2的值是固定的,那么我们只要探索一次就可以确定了,但很多时候v1和v2的值通常是一个随机值 这个时候我们就需要不断的探索,反反复复的尝试,才能最终摸清楚,v1和v2的期望值
- 往下走得到的奖励就是 -1 + E(v2)
- 往右走得到的奖励就是 1 + E(v1)
1.2 状态转移
真实的场景中,环境也是一直在发生变化的,例如对于同一个动作,由于环境发生了变化,导致最终的奖励也会发生变化 举一个英雄联盟或者王者荣耀的例子,当前状态确定,我们执行同一个动作“闪现进塔强势”
- 当前状态 (S): 你在敌方防御塔边缘,残血。
- 目标: 击杀对方英雄(奖励 +300金币)。
- 备选动作 (A): “闪现进塔强杀”。
- 环境的随机转移(不确定性):
- 对方有 30% 的概率闪现躲开(你白给,-300金币)。
- 对方有 50% 的概率被你杀掉,但你被塔点死(1换1,0金币)。
- 对方有 20% 的概率被你杀掉,且你丝血逃生(大赚,+300金币)。
可以看到,同一个动作,由于环境可能发生很多种变化(对方不会站着不动),因此后续得到奖励也一直在发生变化
1.3 计算收益或价值
1.3.1 全路径暴力枚举(平行宇宙)
我们可以不断模拟“闪现进塔”之后所有可能的后续:
- 分叉 1(死掉宇宙):
- 如果你闪现进去死了,路径终止。总分:-300。
- 分叉 2(1换1宇宙):
- 你杀了人但死了。你需要计算:死掉的这段时间,你漏掉了多少小兵的钱?对方复活后会不会拿掉大龙?这又是一棵巨大的树。
- 分叉 3(丝血逃生宇宙):
- 你活下来了。接下来你可能去打野,或者回城。你要枚举回城后买什么装备,买完装备后胜率提升多少……
这种方法的本质: 每一个“转移”出来的结果,都要被当成一个全新的剧本一直演到游戏结束(基地爆炸)。你得把这成千上万个剧本的得分乘以概率,再加起来。
1.3.2 贝尔曼方程
贝尔曼方程不演戏,它只做“资产评估”。 它会给每个状态贴一张“身价标签”。比如它已经算好了:
- : 价值为 -500(考虑了漏兵损失)。
- : 价值为 +200(考虑了接下来可以补状态)。
当你考虑“闪现进塔”时,贝尔曼方程只需要算一行加法:
不使用贝尔曼方程
方法一:全路径暴力枚举(穷举法,环境规则已知)
这是最符合人类直觉的方法:把所有可能性都列出来,挑最好的。
- 列出所有剧本: 假设从起点到终点一共要走 10 步,每一步有 3 种选择。你就把这 (3^{10}) 条路径全部画出来,像一棵巨大的树。
- 跑完所有剧本: 模拟每一条路径,算出每一条路径最终的总得分(把这一路上的金币全加起来)。
- 择优录取: 哪条路径的总分最高,你就记住这条路径。
- 形成策略: 你的策略就变成了一张巨大的“备忘录”:第一步走 A,如果遇到情况 B,就走 C……
- 本质:这就是搜索(Search)。它不关心状态之间的关系,它只关心最终的结果。
- 缺点:像走迷宫一样,把每一条可能的路径都走到黑,最后对比哪条路拿到的分最高。很容易遭遇“维度灾难”。哪怕是一个 10x10 的网格,路径组合也是天文数字,计算资源会瞬间枯竭
方法二:蒙特卡罗全采样(笨办法学习,环境规则未知)
如果你不知道环境的规则(比如你不知道走左边会发生什么),无法事先画出路径树,那你就用“命”去试。
- 随机乱走: 雇佣 100 万个机器人,让他们在环境里随机乱跑。
- 记录生死: 每一个机器人停下时,记录下它这辈子走过的所有步骤和最后拿到的总分。
- 统计平均: 比如有 1 万个机器人第一步都选了“左转”,虽然它们后来的命运各不相同,但你可以把这 1 万个机器人的最终得分取个平均值。
- 以此类推: 对每一个动作都进行这种大规模的实验。
- 得出结论: 哪个动作的“平均结局”最好,你就选哪个。
- 本质: 这叫蒙特卡罗方法 (Monte Carlo Method)。它跳过了贝尔曼方程那种“推导下一步”的过程,直接从“起点”看到“终点”。
- 缺点:必须等一整局游戏结束(比如下完一整盘棋),才知道第一步走得好不好。如果你在自动驾驶中撞了车,贝尔曼方程能在撞车前一秒就意识到危险,而没有它,你必须等车彻底报废后才能更新一次经验。
跨时空影响
只要一个系统具备“跨时空影响”(你现在的选择会改变你未来的处境),就会产生两个被称为“噩梦”的问题,而贝尔曼方程正是为了处理这两个问题而生的:
1. 信用分配问题 (The Credit Assignment Problem)
这是所有决策问题的终极难题:如果最后结果是好的,到底归功于哪一步? 例子: - 你考上了理想的大学。是因为你考试那天穿了红衣服?还是因为你最后一周的冲刺?还是因为你三年前决定开始努力学习?
- 挑战: 行为(Cause)和结果(Effect)在时间上是分离的。 -贝尔曼的解法:它通过“价值流”把未来的奖励往回传。它告诉我们:你现在的努力之所以值钱,是因为它把你送进了一个“更有希望”的明天。它把遥远的奖励,一点点“折现”到了每一个当下的动作上。
2. 状态转移的蝴蝶效应 (The Butterfly Effect)
只要涉及未来,就意味着路径会分叉。
- 如果不考虑未来: 你只需要看一眼现在的路标,往哪走都行。这叫“响应式控制”(Reactive Logic)。
- 如果考虑未来: 你走左边,会遇到 10 种可能;走右边,会遇到另外 10 种可能。每走一步,未来的可能性就呈指数级增加。
- 挑战: 这种分叉会导致你提到的“指数爆炸”。 -贝尔曼的解法:它提出了一个惊人的假设——“只要我能评估出下一步所在的那个状态值多少钱,我就不需要考虑之后的所有分叉了。” 它通过“状态价值”的概念,把无穷无尽的未来可能性“压缩”成了一个数字。
不涉及未来行为
- 即时博弈(多臂老虎机问题 Multi-armed Bandits): 你面前有三台老虎机,拉下一台就有奖,拉完就结束,下一次拉谁跟这次没关系。这种问题没有“状态转移”,所以不需要贝尔曼方程。
- 分类任务(监督学习): AI 判断一张照片是猫还是狗。判断对了给奖,判断错了给罚。这个决定不影响下一张照片是什么。这也没有“未来影响”。
- 纯贪心任务: 比如你在地摊上捡钱,看到哪块钱大就捡哪块,捡完就走。
贝尔曼解决的问题
- 算力崩溃(解决指数爆炸): 正如你所敏锐察觉的,如果去遍历所有可能的未来路径,计算量随时间步呈指数级增长。贝尔曼方程通过递归,让你只需要计算“当前”和“下一步”,就把无限的未来“折算”到了当下。
- 反馈延迟(解决信用分配): 在长线任务中(如学英语、下棋),奖励往往在最后才出现。贝尔曼方程建立了一种“内部评价体系”,让你在做中间步骤时,就能通过“状态价值”知道这一步走得好不好,而不必等到最后。
- 决策无序(解决策略一致性): 它提供了一个数学准则:如果一个策略是最优的,那么不论过去发生了什么,剩下的决策对于当前状态而言也必须是最优的。这保证了 AI 行为的连贯性,而不是东一榔头西一棒槌。
二、 贝尔曼方程解决的问题本质是什么? 其核心本质可以拆解为两个关键词:“压缩”与“对齐”。
- 空间的压缩 (Dimensionality Reduction) 贝尔曼方程将“路径的空间”压缩成了“状态的空间”。 它认为:你如何到达这里不重要,未来有多少种分叉也不重要。重要的是,你现在所处的这个“位置”(状态)本身值多少钱。它用一个标量(Value),代替了背后无数条可能的轨迹。
- 时间的对齐 (Temporal Consistency) 贝尔曼方程本质上是一个平衡等式。 它要求:“你现在对未来的预期” 必须等于 “当下的收获 + 你下一步对未来的预期”。 如果左右两边不等,说明你的预估有偏。算法的目标就是不断修补这个等式,直到它在全地图都成立。当等式处处成立时,你就找到了最优路径的“地图”。
这种“邻里之间互相学习”的特性,使得我们可以在不完整探索路径的情况下,通过不断的“小步迭代”让全图的价值函数趋于平稳。这才是现代 AI(比如 AlphaGo)能在天文数字级的状态空间里生存的原因。
在决策过程中,我们往往面临一个困境:一个动作在当下看来很好(比如吃一颗糖),但长期来看可能有害(比如蛀牙)。贝尔曼方程提供了一种数学方式,将即时奖励(Immediate Reward)和未来奖励(Future Rewards)统一起来。 核心逻辑: 当前状态的价值 = 在此状态获得的即时奖励 + 衰减后的下一个状态的期望价值。