强化学习
Q函数(Q-function)
/ kyoo FUNK-shun /
Q函数是价值函数一个稍微丰富些的近亲。它问的不是「这个情形有多好?」,而是「如果我接下来恰好采取那个具体动作、之后再好好发挥,这个情形有多好?」普通价值函数为一个状态打分,Q函数则把状态与动作合在一起打分——你在此处每一种可做之事,都对应一个数字。
这点额外的细节用处极大,因为它直接告诉你该挑哪个动作:在当前状态下,选 Q 值最高的那个动作就是了。你无需自己去想象未来——Q函数早已把整个未来折叠进了一次比较之中。「Q」代表「quality(质量)」:从某个状态出发采取某个动作的「质量」。
这正是 Q 如此实用、又如此出名的原因(Q学习和深度 Q 网络都靠它)。但它有一个与生俱来的局限:跨动作比较 Q 值,只有在动作是一份整齐、有限的清单时才行得通——左转、右转、跳跃。一旦动作是连续的量,比如「把关节转动 14.3 度」,可比较的选项就有无穷多个,纯粹的 Q 方法便会失灵。这就是为什么机器人学等需要平滑控制的问题,往往转而求助于策略梯度方法。
站在网格的某一格上,智能体手里有四个 Q 值:Q(此处, 上)=8、Q(此处, 下)=3、Q(此处, 左)=5、Q(此处, 右)=9。它选「右」,因为 9 最大。每个数字都已经把那一步之后发生的一切计算在内了。
每个可选动作对应一个 Q 值;贪心地取最高者来行动。「Q」=(状态, 动作)的质量。
V(s) 与 Q(s,a) 紧密相连:一个状态的价值,等于你在该处所能采取的最佳动作的 Q 值。Q函数多带了一个位——动作——正是这一项之差,让智能体无需自己模拟未来,就能决定该做什么。
又称
另见