从回报到「价值感」
上一阶你已经见过 观察—动作—回报循环:智能体看到一个状态,选一个动作,落入新状态,并收下一份 回报。问题在于回报很短视。一个此刻分文不挣的动作——弃一个兵、绕开一堵墙——也许正是十步之后赢下整局的关键。所以智能体需要比即时回报更深一层的东西:它需要一种「这个处境到底有多好」的整体感觉。
这种「价值感」就是价值函数。一个 状态的价值,是指你从这个状态往后、在持续遵循某个 策略(你挑选动作的方式)的前提下,预期能累计到的全部回报。由于未来很长,我们不会天真地把回报直接相加——而是乘上一个 折扣因子,让早些到来的回报比同样大小却晚到的回报多算一点。这串折扣后的未来回报之和有个专门名字,叫 回报值(return),而价值,就是这个回报值的*期望*。
Q-函数:把动作也算进价值里
知道某个状态很有价值固然好,但要真正*行动*,你得能比较手上的几个选项。这正是 Q-函数的用处。Q-值 Q(s, a) 回答的是一个更尖锐的问题:「如果我此刻在状态 s 下采取动作 a,之后又表现得当,我应当预期拿到多少总回报?」Q-学习里的 Q 代表 *quality(质量)*——也就是「状态—动作」这一对组合的质量。
这个小小的转变在实践上意义重大。一旦你手握一个好的 Q-函数,决定怎么行动就变得轻而易举:看一眼当前状态,给每个可选动作打分,挑分最高的那个。不用规划、不用在未来里搜索——所有这些都已经被折叠进了 Q-值里。一个状态的价值,恰好就是它最佳动作的 Q-值,这就把两个函数干净利落地连在了一起。
这一切都建立在你早先见过的 马尔可夫决策过程的一个安静假设之上:状态已经把关于未来的所有要紧信息都装了进去。给定当前状态,过去就不再添加任何信息。正因如此,一个不记得你是怎么走到这里的单一数字 Q(s, a),才足以指导行动。
贝尔曼方程:用自己的未来来定义价值
下面这个技巧让一切变得可计算。你所在之处的价值可以拆成两部分:你此刻拿到的回报,加上你下一步落脚之处的(折扣后)价值。这条自我指涉的恒等式——价值由一步之外的价值来定义——就是 贝尔曼方程。它把一个看似不可能算的「对无限未来求和」,变成了相邻状态之间的一道关系式。
Q(s, a) = r + γ · max Q(s', a')
a'
r reward received now
s' the state you land in next
γ discount factor (0 < γ < 1)
max assume you act greedily afterward慢慢读这条式子:(s, a) 处的最佳 Q-值,等于即时回报 r,加上 γ 乘以下一个状态 s' 处能拿到的最佳 Q-值。如果你已经知道真正的 Q-函数,等号两边会严丝合缝。于是两边之差——也就是时序差分误差(TD 误差)——就成了一个可测量的信号,告诉你当前估计错得有多离谱。一遍又一遍地把这个差缩小,就是整件事的全部。
Q-学习:靠「意外」来改进
Q-学习把贝尔曼的思想变成了一套可操作的配方。先维护一张 Q-值估计表(之后可以换成一个网络),里面起初全是粗糙的猜测。然后就在世界里生活:采取一个动作,观察回报和下一个状态,再把你的估计朝贝尔曼方程预测的方向轻推一小步。这一步推多大,由学习率决定。每一次经历都是一次小小的修正;成千上万次之后,这些估计就被打磨得越来越接近真相。
- 观察当前状态 s,挑一个动作 a(多数时候选你认为最好的,偶尔随机选一个——见下文)。
- 执行它。记下你拿到的回报 r,以及落入的新状态 s'。
- 算出贝尔曼目标值:r + γ ×(s' 处的最佳 Q-值)。
- 把 Q(s, a) 朝这个目标值挪一小步。然后此生不断重复。
留意 Q-学习从不需要的东西:一张地图。它事先并不知道动作会把你带到哪些状态,也不知道回报是怎么发放的。它纯粹从亲历的转移中学习。这使它成为无模型(model-free)方法——恰好与 有模型强化学习相反,后者让智能体先建一个关于世界动态的模型,再据此做规划。无模型方法更简单,也更能扛住乱糟糟的真实世界,但代价是吃经验:它往往需要海量回合,才能学会一个好模型本可推理出的东西。
ε-贪心:给「意外」留出空间
「永远挑 Q-值最高的动作」里藏着一个陷阱。早期你的估计是错的,所以*看起来*最好的那个动作,也许只是你碰巧最先试到的那个。如果你只会利用当前的最佳猜测,就永远发现不了隔壁那扇门后真正更好的走法。这正是一切试错学习核心处的 探索与利用之间的张力。
最简单的解法,也是最经得起时间考验的解法之一:ε-贪心。大多数时候(概率 1 − ε),选 Q-值给分最高的动作——这是利用。但有一小部分时候(概率 ε),无视它们,随机行动——这是探索。常用的小技巧是:一开始把 ε 设得大些,让还懵懂的智能体自由游走,随后随着判断逐渐变准,慢慢把 ε 缩小,最终安顿到以贪心为主的行为上。
同策略 vs 异策略:你在为谁学习
这里有个值得放慢脚步的微妙之处。探索时,智能体有时会随机行动——但它实际上是在*学习关于谁*的东西呢?这就是 同策略与异策略的区别。Q-学习是异策略(off-policy)的:它用 ε-贪心来探索,但它的贝尔曼目标里用的是 max——也就是下一步*最佳*动作的价值,而不是探索可能逼它去走的那个动作。它一边以一种方式行动,一边学习「以最优方式行动」的价值。它所改进的策略,与它实际采用的策略,被允许不一样。
它的近亲 SARSA 则是同策略(on-policy)的:它不用 max,而是代入它*实际*接下来采取的那个动作的价值——连随机探索一并算进去。于是 SARSA 学的是它真正遵循的那个谨慎、偶尔笨手笨脚的策略的价值,而 Q-学习学的是它所向往的那个大胆最优策略的价值。在悬崖边上,SARSA 往往会多留一道安全余量(因为它知道自己有时会失足),而 Q-学习则贴着边缘走。两者都没有「对错」——它们回答的是不同的问题。
为什么要在意这个?异策略学习让智能体能够从*旧的*经验中学习——重放过去的回合,甚至学习另一个智能体的记录——因为它并不被「是哪个策略生成了这些数据」所绑死。正是这个性质,让把 Q-表换成神经网络的 深度 Q 网络变得切实可行:它们存下一缓冲区的历史转移,再反复从中学习。这就是通往最后一阶「深度强化学习」的桥梁。