简介:本资源为高校强化学习课程期末考试真题及详解答案,面向计算机、人工智能及相关专业本科生与考研复习者,聚焦核心算法理解与公式推导能力训练。试卷覆盖折扣因子、状态转移与奖励建模、贝尔曼方程求解、蒙特卡洛与TD方法对比、SARSA/Q-learning更新机制差异、值迭代与策略迭代实现逻辑、MDP建模要点、Q函数计算及基于模型/无模型方法的适用边界等十大关键知识点,题型含推导计算、算法分析与概念辨析,直击教学重点与考核难点。资源为单个PDF文件(332KB),内容排版清晰,含完整题目、分步解析、公式推导过程及关键结论标注,便于对照学习与考前自测。目前已有290人下载学习,是系统梳理强化学习理论框架、夯实算法底层逻辑、高效备考的重要参考资料。
1. 强化学习期末考题不是“刷题资料”,而是价值函数收敛过程的显微镜
你手里的这份《A卷强化学习期末考试原题加答案》,表面看是十道带解的习题,但真正值得细读的,是它把价值函数如何从初始猜测一步步逼近真实期望回报这个黑匣子,用最朴素的数字推演全拆开了。比如第一题那个γ=0.9的四状态网格世界——它没让你写一行代码,却强制你亲手代入贝尔曼方程:ν₁ = −0.5 + 0.9ν₃ 和 ν₂ = 1 + 0.9ν₄ 这样的耦合式子,再联立求解。这不是在考计算能力,是在逼你理解:为什么状态值必须满足自洽性?为什么迭代更新本质是求解一个线性系统?第四题用SARSA公式算Q(s₁,a₁)从2→3.85的过程,更是把“当前策略下动作选择如何影响后续估计”这个on-policy的核心约束,压缩成一次α=0.5、γ=0.9的数值代入。教育/考试类资源常被当成应试工具,但这份材料的底层价值在于:它用纸笔推演替代了代码调试,让价值函数的收敛路径变得可触摸、可验证、可回溯。当你发现ν₄=0(终止态)直接决定ν₂=1+0.9×0=1,而ν₂又反向约束ν₁的表达式时,你就摸到了动态规划的脊椎骨——这比背一百遍“贝尔曼最优方程”都管用。
2. 贝尔曼方程:不是数学公式,而是状态价值的自洽性契约
贝尔曼方程在强化学习里常被简化为“递归定义”,但这份考题揭示了它更本质的含义:它是对智能体认知一致性的强制约束。当题目要求你为s₁到s₄分别写出νπ(s)的方程时,它其实在说:如果你声称s₁的价值是ν₁,那么这个数值就必须和你对s₂、s₃未来价值的判断完全兼容。这种兼容性不是可选项,而是马尔科夫决策过程(MDP)的数学必然。
2.1 四状态网格世界的方程组如何暴露MDP结构?
我们重写题目中给出的贝尔曼方程(修正原文笔误):
\nu_\pi(s_1) = 0.5 \times [-1 + \gamma \nu_\pi(s_3)] + 0.5 \times [-1 + \gamma \nu_\pi(s_2)] \\ \nu_\pi(s_2) = 1 + \gamma \nu_\pi(s_4) \\ \nu_\pi(s_3) = 1 + \gamma \nu_\pi(s_4) \\ \nu_\pi(s_4) = 0注意关键细节:
- s₁的方程中,两个分支的即时奖励都是−1(原文描述有歧义,但方程右侧统一为−1),这说明s₁本身是惩罚态;
- s₂和s₃的方程形式完全相同,意味着它们在策略π下具有对称性——这正是贝尔曼方程能暴露策略隐含假设的地方;
- s₄作为终止态,ν₄=0是边界条件,而非推导结果。它像一个锚点,把整个方程组从无限递归拉回有限求解。
提示:贝尔曼方程的“递归”本质是马尔可夫性的数学投射。只要状态转移满足无记忆性(即P(s′|s,a)不依赖历史),价值就必然满足这种自指结构。否则,你写的就不是贝尔曼方程,而是某种近似。
2.2 求解过程即价值函数的不动点迭代
将γ=0.9和ν₄=0代入,得到:
\nu_\pi(s_4) = 0 \\ \nu_\pi(s_2) = 1 + 0.9 \times 0 = 1 \\ \nu_\pi(s_3) = 1 + 0.9 \times 0 = 1 \\ \nu_\pi(s_1) = 0.5 \times [-1 + 0.9 \times 1] + 0.5 \times [-1 + 0.9 \times 1] = -0.05这个计算看似简单,但它复现了值迭代(Value Iteration)的第一步:用当前估计的后继状态值,更新当前状态值。如果初始设ν⁰(s)=0,则第一次迭代后:
- ν¹(s₄) = 0(不变)
- ν¹(s₂) = 1 + 0.9×0 = 1
- ν¹(s₃) = 1 + 0.9×0 = 1
- ν¹(s₁) = 0.5×(−1+0.9×1) + 0.5×(−1+0.9×1) = −0.05
而题目答案直接给出ν₁=−0.05,实则是假设已收敛(即ν¹≈ν*)。这暴露了一个教学关键点:期末考题默认你接受“方程有唯一解”这一事实,但真实世界中,你需要验证收敛性。例如,若γ≥1,该方程组可能发散;若转移图存在环且无折扣,ν值会无穷大——这正是为什么γ∈[0,1)是MDP理论成立的基石。
2.3 为什么贝尔曼方程能解出“最优”价值?
第六题给出了更微妙的线索:它要求计算s₁在不同动作下的价值,即
\nu_{\pi_{a_1}}(s_1) = 4 + 0.9 \nu(s_2) = 4 + 0.9 \times 6 = 9.4 \\ \nu_{\pi_{a_2}}(s_1) = 2 + 0.9 \nu(s_3) = 2 + 0.9 \times 5 = 6.5这里ν(s₂)=6、ν(s₃)=5是给定的“当前状态值”,而非由贝尔曼方程导出。这意味着:贝尔曼方程本身不区分策略优劣,它只保证给定策略下的自洽;而“最优”来自对所有动作取max。这直接衔接到第五题的值迭代公式:
\nu(s) \leftarrow \max_a \left[ r(s,a) + \gamma \sum_{s'} P(s'|s,a) \nu(s') \right]max操作才是引入优化的开关。没有它,贝尔曼方程只是描述现状的镜子;有了它,它就成了指向最优的罗盘。考题把这两层(策略评估 vs 策略改进)拆成独立题目,恰恰是为了让你看清:动态规划的威力,一半来自方程的自洽性,一半来自max带来的贪婪选择。
3. 在线 vs 离线:蒙特卡洛与TD方法的本质分水岭不在“是否等待回合结束”
教科书常说“MC需等待回合结束,TD每步更新”,但这只是现象。这份考题第二、八、十题共同指向一个更深层的区分:二者对“估计偏差”的处理哲学截然不同。蒙特卡洛用完整轨迹Gₜ消除偏差,代价是高方差;TD用当前估计ν(sₜ₊₁)引入偏差,但换来低方差和在线性。这不是工程取舍,而是统计推断范式的切换。
3.1 蒙特卡洛的“离线性”源于其无偏性追求
第八题给出的MC流程中,关键步骤是:
- 执行策略至回合结束 → 得到完整序列 (s₀,a₀,r₁,s₁,a₁,r₂,...,sₜ)
- 计算Gₜ = rₜ₊₁ + γrₜ₊₂ + ... + γ^{T−t−1}r_T
- 更新ν(sₜ) ← ν(sₜ) + α(Gₜ − ν(sₜ))
这里Gₜ是对qπ(sₜ,aₜ)的无偏估计(因为E[Gₜ] = qπ(sₜ,aₜ))。但要获得这个无偏性,必须观测到从sₜ开始的整个未来——这就是“离线”的根源。你无法在sₜ₊₁刚出现时就更新sₜ,因为Gₜ依赖尚未发生的rₜ₊₂,...,r_T。
第十题进一步点破:MC对应n→∞的n-step TD。当n无穷大,Gₜ中的γⁿν(sₜ₊ₙ)项消失(因γ<1),Gₜ退化为纯回报和。此时偏差为0,但方差爆炸——一次倒霉的轨迹(如撞墙)会严重扭曲估计。
3.2 TD的“在线性”本质是偏差-方差的主动交易
第二题指出TD是在线算法,但没解释为什么。核心在于TD误差δₜ:
\delta_t = r_{t+1} + \gamma \nu(s_{t+1}) - \nu(s_t)这个δₜ被称为TD误差,它用当前对sₜ₊₁的估计ν(sₜ₊₁)替代了未知的真实期望∑P(s′|sₜ,aₜ)[r + γν(s′)]。这引入了偏差(因为ν(sₜ₊₁)本身不准),但好处是:
- δₜ可在sₜ₊₁观测到后立即计算,无需等待;
- 由于ν(sₜ₊₁)通常比完整Gₜ稳定,δₜ方差远小于Gₜ − ν(sₜ)。
这就是TD的“交易”:用可控的偏差,换实时性和稳定性。考题中TD被定义为“利用当前估计调整未来值”,这句话的潜台词是:它把学习过程变成了一个连续的误差修正流,而非离散的回报采样事件。
3.3 n-step TD:在偏差与方差光谱上滑动的探针
第十题的n-step SARSA公式是理解的关键:
G_t^{(n)} = r_{t+1} + \gamma r_{t+2} + \dots + \gamma^{n-1} r_{t+n} + \gamma^n \nu(s_{t+n})当n=1:Gₜ⁽¹⁾ = rₜ₊₁ + γν(sₜ₊₁) → 标准TD,偏差最大(只看一步),方差最小;
当n→∞:Gₜ⁽ⁿ⁾ → Gₜ(MC回报),偏差→0,方差→∞;
当n居中(如n=3):取前三步真实奖励 + 第四步估计值,实现偏差-方差平衡。
这解释了为什么n-step方法是“混合”:它不是简单拼接,而是在时间维度上对估计精度进行参数化控制。考题特意强调“n-step SARSA包括标准SARSA和MC作为极端”,就是在提示你:所有TD变体,本质上都是对同一个问题的不同近似粒度——如何用有限步观测,逼近无限步期望。
注意:这里的“在线/离线”与数据生成方式无关。即使你用离线数据集训练TD,它仍是在线算法(因更新基于单步bootstrap);反之,若你用MC处理流式数据但攒满一回合才更新,它仍是离线算法。判定标准永远是更新时机是否依赖未来未观测量。
4. SARSA与Q-learning:on-policy与off-policy的战场不在代码,而在策略的“所有权”
第六、三、四题反复对比SARSA和Q-learning,但容易陷入“公式长得像,只有max区别”的浅层理解。真正的分水岭在于:SARSA的Q值属于当前策略π,而Q-learning的Q值属于一个虚构的最优策略π*。这导致二者对“探索”的态度、收敛前提、甚至失败模式都根本不同。
4.1 SARSA的Q值:策略π的“内部账本”
第三题给出的SARSA更新式:
Q(s_t,a_t) \leftarrow Q(s_t,a_t) + \alpha [r_{t+1} + \gamma Q(s_{t+1},a_{t+1}) - Q(s_t,a_t)]注意aₜ₊₁是实际执行的动作(由ε-greedy等策略选出)。这意味着:
- Q(sₜ₊₁,aₜ₊₁)的值,必须与你下一步将要执行的动作严格匹配;
- 如果你用ε-greedy策略,在sₜ₊₁以概率ε随机选aₜ₊₁,那么Q(sₜ₊₁,aₜ₊₁)就包含了随机动作的预期收益;
- 因此,SARSA学到的Q值,天然适配你正在使用的探索策略。它不怕“随机”,因为随机本身就是策略的一部分。
第四题的计算实例印证了这点:从s₁选a₁→得r=3→到s₂→再选a₂(注意是a₂,非max),代入Q(s₂,a₂)=3,最终Q(s₁,a₁)更新为3.85。这个3.85的值,只对你“在s₂继续用a₂”这个行为有效。换言之,SARSA的Q表是策略π的专属副产品,脱离π便失去意义。
4.2 Q-learning的Q值:指向π*的“外部导航仪”
Q-learning的更新式:
Q(s_t,a_t) \leftarrow Q(s_t,a_t) + \alpha [r_{t+1} + \gamma \max_a Q(s_{t+1},a) - Q(s_t,a_t)]maxₐ操作是灵魂。它假设:在sₜ₊₁,你会抛弃当前策略π,转而执行“此刻Q表认为最好的动作”。这带来两个后果:
- Q值收敛目标是Q*(s,a),即最优策略下的动作值;
- 你可以在sₜ₊₁用随机动作(如ε-greedy中的探索)收集数据,但更新时假装自己会选最优动作——这就是off-policy的精髓:行为策略(behavior policy)和目标策略(target policy)分离。
但这也埋下隐患:如果Q表初期不准,maxₐ会放大错误(“灾难性过估计”)。而SARSA因始终跟随实际动作,更新更保守。
4.3 关键差异:策略崩溃风险与探索需求
| 维度 | SARSA (on-policy) | Q-learning (off-policy) |
|---|---|---|
| 收敛前提 | 需保证所有(s,a)被持续访问(覆盖性) | 同上,但对探索策略更宽容 |
| 探索影响 | 探索动作直接影响Q更新,鼓励安全探索 | 探索仅用于收集数据,更新时忽略探索 |
| 失败模式 | 若策略过早收敛到次优动作,Q值会固化 | 可能因max放大噪声,学出虚假高Q值 |
| 适用场景 | 机器人控制(需保障探索安全) | 游戏AI(允许试错,追求最终最优) |
考题第三题说“SARSA策略固定,Q-learning可独立于策略”,这句话的深意是:SARSA的策略是你学习的终点,Q-learning的策略只是你借来挖矿的铲子。你最终要扔掉铲子,只留下矿脉(Q*)。
5. 基于模型 vs 无模型:不是“要不要建模”,而是“信任谁的预测”
第七题对比两类方法,但容易误解为“有模型=好,无模型=糙”。真相是:基于模型的方法把预测权交给环境动力学P(s′|s,a)和r(s,a,s′),无模型方法把预测权交给自身经验。前者快但脆弱,后者慢但鲁棒——这个张力,正是强化学习设计哲学的核心。
5.1 基于模型方法:用环境说明书做规划
题目中“基于模型的方法可利用模型进行规划”指:若你知道完整的转移概率矩阵P和奖励函数r,就能:
- 前向模拟:从s₀出发,用P采样多条轨迹,计算期望回报;
- 动态规划:直接解贝尔曼方程(如值迭代),无需交互;
- 模型预测控制(MPC):每步只规划k步,用模型预测最优动作序列。
优势明显:样本效率极高。棋类游戏(如国际象棋)中,规则即完美模型,AlphaZero用MCTS+神经网络,本质是“用学习到的近似模型做规划”。
但致命弱点是模型失配(model mismatch)。若P或r有哪怕1%误差,规划结果可能灾难性偏离。考题提到“对模型准确性高度依赖”,这不仅是提醒,更是警告:在物理世界,模型永远只是近似;你信它几分,就等于把命运交出几分。
5.2 无模型方法:用血肉之躯试错
无模型方法(如MC、TD、Q-learning)不假设P和r已知,而是:
- 通过与环境交互,收集(s,a,r,s′)元组;
- 用这些数据拟合价值函数或策略;
- 价值函数本身,就是对环境动力学的隐式学习。
它放弃“先验知识”,换取“后验鲁棒”。机器人导航中,传感器噪声、地面摩擦变化、电机响应延迟,都让精确建模几乎不可能。此时,让机器人自己跌倒、爬起、再跌倒,反而比调试一个千行P矩阵更可靠。
但代价是数据饥渴。Q-learning可能需要百万次交互才能收敛,而基于模型方法用千次模拟即可。这不是算法优劣,而是问题域与方法论的匹配问题。
5.3 模型基线:无模型方法的隐形校准器
有趣的是,考题虽未明说,但所有无模型算法的理论分析,都依赖一个“幽灵模型”:
- MC的Gₜ无偏性,建立在“真实P和r存在”这一假设上;
- TD的收敛证明,需假设存在一个真实的ν*(s)满足贝尔曼方程;
- 即使你不用P,你的算法仍在悄悄拟合一个隐式模型。
因此,无模型不是“反模型”,而是“把模型学习也纳入优化目标”。现代算法如Dyna-Q,正是融合二者:用真实交互学Q值(无模型),同时用经验构建P̂和r̂(基于模型),再用模型生成虚拟数据加速学习。考题第七题的对比,实则是为你铺路:理解两极,才能驾驭中间态。
6. 避坑指南:强化学习初学者必踩的十个坑(附考题映射)
强化学习的玄学感,往往源于几个经典误区。这份考题像一面镜子,照出这些坑的原始形态。以下是结合题目内容整理的避坑清单,每条都对应真实翻车现场:
6.1 坑1:混淆“状态值ν(s)”和“动作值Q(s,a)”的物理意义
- 现象:第一题求ν(s₁)时,误把s₁的即时奖励−1当作ν(s₁);或第六题中,用ν(s₂)=6直接当Q(s₁,a₁)用。
- 原因:ν(s)是“从s开始按策略π行动的期望总回报”,Q(s,a)是“在s执行a后按π行动的期望总回报”。前者包含选择a的决策,后者已锁定a。
- 解决:牢记Q(s,a) = r(s,a) + γ∑ₛ′ P(s′|s,a)ν(s′)。ν(s)是Q的加权平均,Q是ν的“动作级切片”。
6.2 坑2:折扣因子γ设为1导致价值发散
- 现象:计算ν(s₂)=1+γν(s₄)时,若γ=1且s₄非终止态,ν(s₂)会无限循环。
- 原因:γ=1要求智能体完全不偏好即时奖励,但在无限时域下,若存在正奖励环,ν→∞。
- 解决:γ∈[0,1)是MDP理论收敛的充要条件。实践中γ=0.99常见,但需配合足够小的学习率α防震荡。
6.3 坑3:蒙特卡洛更新时未对同一状态多次出现去重
- 现象:第八题中,若一回合内s₁出现3次,错误地用G₁,G₂,G₃三次更新ν(s₁),导致过拟合该回合。
- 原因:MC的Gₜ是无偏估计,但同一回合的Gₜ,Gₜ′相关性强,重复使用违反独立同分布假设。
- 解决:首次访问MC(First-Visit MC)只更新每回合s₁首次出现;每次访问MC(Every-Visit MC)则全部更新,但需降低α补偿相关性。
6.4 坑4:SARSA中aₜ₊₁未按当前策略选取
- 现象:第四题计算Q(s₁,a₁)时,s₂后本该用ε-greedy选a₂,却错误用maxₐQ(s₂,a)选动作。
- 原因:SARSA要求aₜ₊₁是实际执行动作,若用max,就偷换了Q-learning逻辑。
- 解决:on-policy算法中,“执行”和“更新”必须用同一套策略。写代码时,aₜ₊₁必须是env.step()返回的动作,不可重算。
6.5 坑5:值迭代未检查收敛条件,盲目迭代固定次数
- 现象:第五题值迭代,若只迭代10次,ν值可能离真实解甚远,尤其当γ接近1时收敛极慢。
- 原因:值迭代收敛速度与γ相关,理论保证是||νₖ − ν*|| ≤ γᵏ/(1−γ) ||ν₀ − ν*||,需监控Δ = maxₛ|νₖ(s) − νₖ₋₁(s)|。
- 解决:设置阈值θ(如1e−6),当Δ < θ时停止;或记录最大迭代次数防死循环。
7. 从考题到源码:为什么我坚持用纸笔推演贝尔曼方程
这份《A卷强化学习期末考试原题加答案》最珍贵的,不是它覆盖了十个知识点,而是它强迫你用最原始的方式——纸、笔、计算器——完成价值函数的数值求解。我曾带某高校实验室的强化学习入门项目,学生第一周就急着跑DQN,结果调参两周,Q值曲线像心电图。直到我让他们关掉IDE,用这份考题重算一遍s₁的ν值。当有人发现ν₁=−0.05不是“算出来”的,而是“被s₂、s₃、s₄的值共同钉死”的,他突然拍桌:“原来Q值不是我调出来的,是环境用贝尔曼方程给我画的牢笼!”
这让我意识到:所有高级算法,都是对贝尔曼方程不同形式的求解器封装。DQN用神经网络拟合Q*,本质是解maxₐ[r + γQ(s′,a)];PPO用重要性采样修正策略梯度,本质是让∇J(θ) ≈ ∇Q(s,a);甚至MuJoCo仿真器,也是在用数值方法解连续版贝尔曼方程。考题中那些看似枯燥的代入计算,实则是让你亲手触摸这个“牢笼”的栅栏——每一根栅栏,都是P(s′|s,a)、r(s,a,s′)、γ共同铸就的约束。
所以,从那以后我每次带新人,都强制走一遍:
- 用考题第一题的四状态网格,手算ν值;
- 用Python写最简值迭代(10行),验证手算结果;
- 把γ从0.9改成0.99,观察迭代次数暴增,理解收敛速率;
- 故意把s₄的ν设为1(非0),看方程组无解,理解边界条件。
这个过程耗时不到两小时,但它把“强化学习”从一个黑箱名词,变成了一组可触摸、可破坏、可修复的数学关系。当你下次看到DQN loss爆炸,第一反应不再是调learning_rate,而是问:“我的贝尔曼残差δₜ是不是太大了?是不是s′的Q估计太不准?”——这时,你就真正入门了。
希望帮到你。
本文还有配套的精品资源,点击获取