Q-Learning
Q 学习
Q-Learning 是一种直接学习动作价值函数的强化学习方法。
它想学的不是“这个状态值多少钱”,而是:
在某个状态下,执行某个动作,长期来看到底值不值。
更准确地说,它要学习的是最优动作价值函数
所以可以先把 Q-Learning 记成一句话:
Q-Learning = 直接学习“状态—动作值”,再用最大值对应的动作做决策。
Q 值到底表示什么
在强化学习里,给定一个状态
它的意思是:
如果我现在处在状态
而 Q-Learning 关心的不是某个固定策略下的
也就是说:
从状态
为什么学 Q 值就够了
如果已经知道了最优动作价值函数
只要知道每个动作有多值钱,就不需要再单独学一套复杂规则,直接选最值钱的动作就行。
所以 Q-Learning 的核心思路是:
- 不先显式学习策略;
- 先把每个状态下每个动作的价值学出来;
- 最后再用“取最大”得到策略。
从 Bellman 最优方程到 Q-Learning
最优动作价值函数满足 Bellman 最优方程:
这条式子可以这样理解:
当前这一步动作的最优价值,等于两部分之和。
第一部分,是眼前立刻拿到的奖励
第二部分,是到达下一状态
所以它表达的是:
现在这一步好不好,不只看眼前奖励,还看它把你带到了一个多好的未来。
贝尔曼最优方程
- state-value 版本
- action-value 版本
两者的关系:
Q-Learning 的更新公式是怎么来的
现实里我们并不知道上面那个条件期望,所以不能直接把 Bellman 最优方程当成闭式公式来算。Q-Learning 的做法是:
- 用一次真实采样到的转移来近似期望;
- 用当前维护的
表来近似真实的 。
假设我们观察到一次真实转移:
那么 Bellman 最优方程右边的样本版本就可以写成:
这就构成了 Q-Learning 的目标值,也常叫 TD target:
然后让当前的
这就是 Q-Learning 最核心的一条公式。
TIP
当前旧估计是:
新的目标值是:
两者相减得到误差:
于是更新就是:
所以它本质上就是:
如果当前 Q 值低于“眼前奖励 + 下一状态的最好未来”,就往上调;如果高于这个目标,就往下调。
为什么这里要取最大值
Q-Learning 最关键的地方,就是这一项:
它表示:
无论你下一步实际会不会真的选到那个动作,Q-Learning 在更新时都先假设“下一步会选当前看起来最好的动作”。
这说明 Q-Learning 学的是一种“最佳可能未来”。
也正因为如此,它学到的是最优动作价值函数,而不是“当前行为策略真实会怎么做”的那个价值函数。
这也是为什么 Q-Learning 经常被称为一种学习“最优贪心行为目标”的方法。
一个具体小例子
假设某一步里:
- 当前状态动作值:
- 奖励:
- 下一状态下各动作的当前估计值分别是
- 所以
- 折扣因子:
- 学习率:
那么目标值是:
误差是:
更新后:
这说明:
当前这个动作原来估计值是 5,但观察到这次转移后,我们觉得它更应该接近 7.4,所以先把它往上调到 5.24。
Q-Learning 的完整训练流程
最经典的表格型 Q-Learning 流程可以写成下面这样。
先初始化一个 Q 表:
然后不断和环境交互。每一步里:
- 在当前状态
选择一个动作 - 执行动作,得到奖励
和下一状态 - 用 Q-Learning 更新公式修正
- 转到下一状态,继续循环