【强化学习】什么是 Q-learning?——用 Taxi-v3 一条线读通

张开发
2026/6/7 17:37:37 15 分钟阅读
【强化学习】什么是 Q-learning?——用 Taxi-v3 一条线读通
文章目录1. 三句话你到底在干啥2. 这张表到底长啥样3. 表里的数和「这一步加几分」是一回事吗4. 总账能手算吗目标从哪来为啥一开始不准5. 怎么选动作为啥要乱试啥叫离策略6. 转移、轨迹——各提一句7. 名字从哪来适合用在哪8. 和本作业代码怎么连附术语快查写报告用1. 三句话你到底在干啥第一句你在玩一个会扣分也会加分的游戏——出租车接人、送到地方——但手里没有完整说明书只能靠多玩慢慢摸出门道。第二句Q-learning 帮你记一张大表。在 Taxi-v3 里可以想成大约500 行 × 6 列行一种现场车在哪、客在哪、要去哪环境压成一个0499的数列这种现场下你这一步能选的6 种操作四个方向 接客 送客某一格对应「在这种现场、先走这一手」时从长远看划算不划算——格子里数越大通常越划算。第三句每走一步用「这一步真拿了多少分」和「到了下一现场之后我眼下这张表里认为最好还能值多少」去轻轻改一下刚用到的那一格玩得多了表就越来越准你也会玩了。下面把这三句拆开说透。2. 这张表到底长啥样先记住这是 Q 表不是地图上的一块块路。行500一种完整现场。Taxi 里就是「车格 乘客情况 目的地」的一种组合环境编码成0499。列6在这个现场下你现在能选的6 种动作见下表。交叉那一格Q ( s , a ) Q(s,a)Q(s,a)。通俗讲你已经站在这个现场想的是——「我这一步先按这一列去做然后后面每一步都尽量选到了新现场时表里数字最大的那一列一直玩到本局结束——从这一刻往后加分扣分加起来我大概净落多少」这一格就是对这件事的估计。它不是「点一下鼠标立刻加几分」越往后的步在总账里权重略小这叫折扣γ \gammaγ先记住「远的稍微看轻」就行。三个常见误会这里说清楚1一行是不是「第几步」不是。一行是世界现在长什么样不是「第 1 步、第 2 步」。每次要决策环境给你一个编号s ss你就看第s ss行执行step以后变成s ′ ss′下一轮再看第s ′ ss′行。同一局里可以多次出现同一个行号。2500 是不是 500 种走法不是。从头到尾的路线可以有无数条500是「现场」一共有多少种不同情况。每种现场下你还能选6种动作所以表里一共500×6 3000个小格。3为啥偏偏 6 列这是Taxi 环境规定的不是 Q-learning 定的5×5里走路要四个方向任务还要接客、送客所以4 2 6。Gymnasium 里编号是编号动作俗话0south往南一格1north往北一格2east往东一格3west往西一格4pickup接客5dropoff送客好记版500 多少种世界情况6 一种情况下这一步有几种动作3000 每种「情况 动作」各占一格。3. 表里的数和「这一步加几分」是一回事吗不是一回事。环境每一步会给你一个数叫rewardr rr。正的多半是奖负的多半是罚没有另一个名字叫「惩罚」的字段。Taxi-v3 官方约定大致是情况r rr普通一步含撞墙空转等没触发下面两种−1正确送达20非法接客 / 非法送客−10Q ( s , a ) Q(s,a)Q(s,a)记的不是这一步的r rr而是从你现在做决策这一刻起一直到本局结束把后面每一步的r rr按γ \gammaγ折现后加总你大概能净多少——一个整段尾巴的总账的估计。所以它会把你后面一路的 −1、可能的−10、最后的20都提前折进这一个数里而不是「只等于送客那一下的 20」。严格说是这个折现总和的期望训练好了以后表上的数就是在逼近它。下面第 4 节的更新式目的正是慢慢把每一格逼近这个含义——但要注意那一行公式并不是当场把「从眼下到终局」每一步r rr全加起来。怎么用看这一步是奖是罚 → 看step给的r rr正负。看「这种现场下先走哪一手更赚」→ 看同一行里 6 个Q QQ谁大表训练好了以后。4. 总账能手算吗目标从哪来为啥一开始不准理想真值一般没法在作业里徒手推完要么环境模型全知道用动态规划要么从数据里学。Q-learning 走后一条路表一开始可以全是 0靠大量真实游玩把每个Q ( s , a ) Q(s,a)Q(s,a)一点点改准。每一步怎么改用刚拿到的r rr加上「下一现场s ′ ss′那一行里6 个数里最大的那个」乘γ \gammaγ拼出一个临时目标课本叫TD 目标还能继续玩目标 r γ × max ⁡ Q ( s ′ ) r \gamma \times \max Q(s)rγ×maxQ(s′)本局结束了不再猜后面目标就等于本步的r rr再按常见公式更新非结束时括号里就是上面这个目标Q ( s , a ) ← Q ( s , a ) α [ r γ max ⁡ a ′ Q ( s ′ , a ′ ) ⏟ TD 目标 − Q ( s , a ) ] Q(s,a) \leftarrow Q(s,a) \alpha \bigl[ \underbrace{r \gamma \max_{a} Q(s,a)}_{\text{TD 目标}} - Q(s,a) \bigr]Q(s,a)←Q(s,a)α[TD目标rγa′max​Q(s′,a′)​​−Q(s,a)]和第 3 节说的是不是一回事对象上是一回事学稳之后Q ( s , a ) Q(s,a)Q(s,a)逼近的正是「从当前这一刻起后面所有r rr按γ \gammaγ折现加总」在最优后续假设下的期望。第 3 节用白话描述的就是这个量。算式上不是一回事更新式没有把「从眼下到本局结束」的每一步r rr在这一行里逐个加完。它只用到了本步的一个r rr加上γ × \gamma \timesγ×「下一状态那一行里最好的那个Q QQ」——把整段未来都塞进max ⁡ Q ( s ′ ) \max Q(s)maxQ(s′)里这是贝尔曼最优方程的写法「总账 眼前这一步 折扣后的、后面整段总账的最好估计」。所以含义是「折现总回报」实现是「一步真r rr 一步 bootstrap」反复更新很多次整张表才和「整段折现和」对齐。和代码里if done: target reward否则target reward gamma * max(q[next_state])一致。你可能会问这个目标靠谱吗刚开始训练常常不靠谱。式子本身没问题但max ⁡ Q ( s ′ ) \max Q(s)maxQ(s′)是从还没学好的表里读的等于用草稿估后面拼出来的目标会偏、会抖。后面表好了还是这个式子算出来才越来越接近真值。所以早期不准很正常要靠很多步、很多局一起把整张表磨准。「挪一小步」是不是六种动作里只试一种不是。6是你在游戏里这一步真正执行的那一个操作。挪一小步是说改表里那个浮点数的时候乘学习率α \alphaα别一步改成目标那么高。例如Q 新 Q 旧 α ( 目标 − Q 旧 ) Q_{\text{新}} Q_{\text{旧}} \alpha(\text{目标} - Q_{\text{旧}})Q新​Q旧​α(目标−Q旧​)。若α 0.1 \alpha0.1α0.1旧值 2、假设目标 12就变成 3不是直接变 12。2、12 只是举例不是 Taxi 真实读数。能不能令α 1 \alpha1α1每次把格子直接改成目标能写但目标里仍有不准的max ⁡ Q ( s ′ ) \max Q(s)maxQ(s′)一把替换容易来回晃、学不稳α 1 \alpha 1α1相当于多几次更新慢慢平均一般更稳。环境若有随机同一条( s , a ) (s,a)(s,a)每次r rr、s ′ ss′也可能变更不能靠一步就把格子写死。和「打完一整局再拿总回报改表」相比Q-learning 用的是TD时序差分走一步就能改不用等结束。蒙特卡洛那条路本作业主代码没用。目标里用现在的表去估未来叫自举——像用昨天的草稿改今天多改几轮才像样。5. 怎么选动作为啥要乱试啥叫离策略到了现场s ss贪心很简单看第s ss行哪一列最大就选谁。评估学得好不好时经常这么干。训练时如果永远贪心很多格子可能永远试不到数一直停在 0。所以用ε-greedy多半选当前最大的列偶尔完全随机选一列探路训练过程中ϵ \epsilonϵ往往慢慢变小。离策略off-policy一句话手可以乱试算目标时却假设下一步总是选表里最大的——用max ⁡ Q ( s ′ ) \max Q(s)maxQ(s′)。也就是「实际怎么走」和「算账时假设怎么走」可以不一致。若算账也跟「你下一步真走的那一下」对齐就更像SARSA。6. 转移、轨迹——各提一句转移概率同一步操作下一步会怎样有的环境带随机Taxi-v3 多数时候很确定结冰湖会打滑。Q-learning不需要你先背整张概率表只要step真给你的下一状态和r rr。采样轨迹就是真的去跑很多局得到「现场 → 动作 → 奖励 → 下一现场 → …」这样的片段用这些真实经历改表。7. 名字从哪来适合用在哪Q来自文献里的符号可理解成动作的quality质量Learning表示这些数是学出来的。经典来自 Watkins 的博士论文之后有严格的收敛分析。适合状态、动作种类有限一张表存得下——Taxi500×6很典型。不适合状态爆炸时要用神经网络去近似例如 DQN。效果跟α , γ , ϵ \alpha,\gamma,\epsilonα,γ,ϵ、训练局数有关要看曲线、做实验。8. 和本作业代码怎么连q_learning_taxi.pyTaxi-v3 上建表、训练、贪心评估、保存曲线uv run python q_learning_taxi.py。q_learning_report.py再加 FrozenLake出四宫格示意热力图、箭头只有格子世界好画。依赖uv sync和代码逐行对照代码讲解与强化学习理论.md。附术语快查写报告用俗话术语记分大表动作价值Q ( s , a ) Q(s,a)Q(s,a)0499 的现场状态s ss六种操作动作a aa减号前那一块TD 目标目标 − 当前格TD 误差走一步改一格时序差分 TD真玩出来的序列采样轨迹手乱试、目标里按最大估离策略偶尔随机ε-greedy收尾若还有卡壳多半卡在两件事——早期算出来的目标不准因为表还是草稿、用α \alphaα小步改表别和「6 种动作」混。把这两点吃透Taxi 上的 Q-learning 就串起来了。

更多文章