简介:本资源为高校强化学习课程期末考试真题及详解,面向计算机、人工智能及相关专业本科生与考研学生,聚焦核心算法理解与公式推导能力训练。试卷覆盖折扣因子、贝尔曼方程、MDP建模、蒙特卡洛与TD方法对比、SARSA/Q-learning更新机制、值迭代与策略迭代实现、状态-行动值函数计算等十大关键知识点,题型包括理论推导、公式应用与数值求解,全部附标准答案与分步解析。资源为1个PDF文件,共332KB,内容排版清晰、公式规范、逻辑连贯,便于打印复习或碎片化研读。已有290人学习下载,适合考前冲刺、概念查漏与算法手算能力强化——尤其适用于需扎实掌握动态规划与时序差分思想的进阶学习者。
1. 强化学习期末题不是“背答案”,而是价值函数收敛的现场显微镜
你有没有试过:把一份强化学习期末卷子的答案抄了三遍,结果考试遇到稍改参数的网格世界,立刻卡在贝尔曼方程列不全?这不是记性差,是没看清这些题目背后藏着的价值函数收敛过程的完整切片。这份“A卷强化学习期末考试原题加答案”根本不是应试资料——它是一套被精心压缩过的、可逐行推演的动态规划与在线学习机制验证集。四状态网格世界里γ=0.9的数值代入、SARSA和Q-learning更新式中那个max Q(s′,·)与Q(s′,a′)的微小差异、n-step SARSA中n=1和n=∞如何自然退化为两种经典算法……所有这些,都不是为了考你“什么叫on-policy”,而是逼你亲手把抽象定义拉进具体数字里跑一遍:当γ=0.9时,v(s₄)=0如何像多米诺骨牌一样推倒v(s₃)=1+0.9×0=1,再推倒v(s₂)=1+0.9×1=1.9,最后让v(s₁)从-0.5+0.9×1.9=1.21这个数里,真实感受到折扣因子如何用指数衰减压制远期奖励的权重。这才是为什么翻遍教材不如精解这十道题——它不教你怎么答题,它让你看见价值函数是怎么一帧一帧“活”过来的。
2. 贝尔曼方程:不是公式,是状态价值的递归生成协议
贝尔曼方程常被当成一个静态等式背诵,但这份试卷第一题直接把它钉死在四状态网格世界的转移图谱上。我们来拆解它真正的运行逻辑:它不是“描述”状态值,而是定义了一套状态值必须满足的生成约束——每个状态的值,必须等于其所有可能后继路径的加权期望。这种约束一旦写成方程组,就天然具备了迭代求解的资格。
2.1 四状态网格世界的方程组:从转移图到线性系统
题目给出的状态转移不是文字游戏,而是明确的马尔可夫决策过程(MDP)实例化:
- s₁:奖励r=-1,50%→s₃(r=1),50%→s₂(r=1)
- s₂:奖励r=1,100%→s₄(r=0)
- s₃:奖励r=1,100%→s₄(r=0)
- s₄:终止状态,v(s₄)=0
代入贝尔曼期望方程 v_π(s) = Σₐ π(a|s) Σₛ′ P(s′|s,a)[r(s,a,s′) + γ v_π(s′)],并假设策略π为确定性策略(即每个状态只选一个动作),可得:
v(s₁) = 0.5 × [1 + γ v(s₃)] + 0.5 × [1 + γ v(s₂)] - 1 v(s₂) = 1 + γ v(s₄) v(s₃) = 1 + γ v(s₄) v(s₄) = 0注意:原始题干中“s₁奖励为-1”是进入s₁时获得的即时奖励,而向s₂/s₃转移时额外获得+1奖励,因此s₁项需显式减去1,再叠加两个分支的+1奖励。这是学生最容易漏掉的符号细节——奖励的归属时刻必须与状态转移严格对齐。
提示:很多初学者误把“s₁奖励为-1”当作s₁→s₂转移的奖励,导致方程写成 v(s₁) = 0.5×[-1 + γ v(s₃)] + 0.5×[-1 + γ v(s₂)]。错!题干明确“状态s₁的奖励为-1”,即在到达s₁时立即获得,与后续转移无关;而“向下转移至s₃(奖励为1)”是转移动作本身附带的奖励。这是MDP建模中最基础也最易混淆的奖励绑定规则。
2.2 γ=0.9如何决定收敛速度与数值稳定性
将v(s₄)=0代入,立刻得到v(s₂)=v(s₃)=1。此时v(s₁) = 0.5×[1+0.9×1] + 0.5×[1+0.9×1] −1 = (1+0.9) −1 = 0.9。但这是单次代入结果。若用迭代法(如vₖ₊₁(s₁) ← 0.5×[1+γ vₖ(s₃)] + 0.5×[1+γ vₖ(s₂)] −1),初始设v₀(s₁)=v₀(s₂)=v₀(s₃)=0,则:
- k=0: v₁(s₁) = 0.5×[1+0] + 0.5×[1+0] −1 = 0
- k=1: v₂(s₁) = 0.5×[1+0.9×1] + 0.5×[1+0.9×1] −1 = 0.9
- k=2: v₃(s₁) = 0.5×[1+0.9×1] + 0.5×[1+0.9×1] −1 = 0.9
可见,γ=0.9在此例中使系统在2步内收敛。但若γ=0.99,v₂(s₁) = 0.5×[1+0.99×1] + 0.5×[1+0.99×1] −1 = 0.99,v₃(s₁)仍为0.99——收敛更快;而若γ=0.5,则v₂(s₁)=0.5×[1+0.5×1]+0.5×[1+0.5×1]−1 = 0.5,需更多轮迭代。γ的本质是控制价值传播的“阻尼系数”:γ越接近1,远期奖励权重越大,价值更新越依赖长程依赖,收敛越慢但最终值更准;γ越小,系统越“短视”,收敛快但可能忽略关键长期收益。
2.3 终止状态v(s₄)=0的深层含义:不是约定,而是数学必然
s₄被定义为终止状态,故v(s₄)=0。但这0不是随意指定的——它是贝尔曼最优方程 v*(s) = maxₐ Σₛ′ P(s′|s,a)[r(s,a,s′) + γ v*(s′)] 在s₄处的自然解。因为s₄无后继动作(A(s₄)=∅),max操作无定义域,唯一自洽解是v*(s₄)=0。若强行设v(s₄)=c≠0,则v(s₂)=1+γc,v(s₃)=1+γc,v(s₁)=0.5×[1+γ(1+γc)] + 0.5×[1+γ(1+γc)] −1 = γ(1+γc),这会导致整个价值尺度漂移,且无法满足v(s₄)自身方程。终止状态的值为0,是价值函数空间的原点设定,如同坐标系中(0,0)之于平面——它不提供信息,但为所有其他状态的相对价值提供绝对锚点。
3. SARSA vs Q-learning:on-policy与off-policy的决策权争夺战
第四题和第六题把SARSA与Q-learning的更新公式并排甩在你面前,但真正刺痛人的,是它们在同一个四状态MDP中更新出完全不同的Q值。这不是数学游戏,而是两种哲学在参数空间里的肉搏:SARSA维护的是“我正在执行的策略”的真实体验,Q-learning追求的是“理论上最优策略”能拿到的天花板收益。这个区别,在α=0.5、γ=0.9的具体数字里,会撕开一道清晰的裂缝。
3.1 更新公式的结构解剖:括号里的“目标值”决定一切
SARSA更新式:
Q(sₜ,aₜ) ← Q(sₜ,aₜ) + α [ rₜ + γ Q(sₜ₊₁,aₜ₊₁) − Q(sₜ,aₜ) ]
Q-learning更新式:
Q(sₜ,aₜ) ← Q(sₜ,aₜ) + α [ rₜ + γ maxₐ Q(sₜ₊₁,a) − Q(sₜ,aₜ) ]
关键差异在方括号内第二项:SARSA用实际采取的aₜ₊₁对应的Q值,Q-learning用sₜ₊₁下所有a中Q值最大的那个。这意味着:
- SARSA的目标值 rₜ + γ Q(sₜ₊₁,aₜ₊₁) 是一次真实轨迹的“延续估计”——它假设策略π不变,下一步还会选aₜ₊₁;
- Q-learning的目标值 rₜ + γ maxₐ Q(sₜ₊₁,a) 是一次“反事实优化”——它无视当前策略,直接问:“如果我现在在sₜ₊₁,理论上最好的动作能拿多少?”
第四题中,s₁→a₁→r=3→s₂→a₂,已知Q(s₂,a₂)=3,则SARSA更新:
Q(s₁,a₁) ← 2 + 0.5×[3 + 0.9×3 − 2] = 2 + 0.5×(3+2.7−2) = 2 + 0.5×3.7 = 3.85
若用Q-learning,需知道s₂下所有动作的Q值:题干只给了Q(s₂,a₁)=0、Q(s₂,a₂)=3,故maxₐ Q(s₂,a)=3,结果相同。但若Q(s₂,a₁)=5,则SARSA仍用3(因实际选了a₂),Q-learning会用5,更新为2 + 0.5×(3+0.9×5−2) = 2 + 0.5×(3+4.5−2) = 2 + 0.5×5.5 = 4.75。差异在“下一步动作是否真的最优”——SARSA忠于行为,Q-learning忠于理想。
3.2 on-policy的代价:探索与利用的硬币两面
SARSA作为on-policy方法,其策略π(a|s)直接驱动数据采集,也直接被Q值更新所优化。这带来一个血泪经验:若你用ε-greedy策略,SARSA学到的Q值天然包含了ε概率随机探索的“噪声成本”。例如,在悬崖行走(Cliff Walking)任务中,SARSA会学着绕开悬崖边缘,因为它的Q值反映了“走边缘有ε概率掉下去”的真实风险;而Q-learning可能大胆直穿边缘,因为它只看max Q,假设自己永远能选到不掉下去的动作。这就是为什么SARSA更保守、更安全,而Q-learning更激进、更高效——on-policy的价值函数里,刻着你的每一次犹豫;off-policy的价值函数里,只写着你梦寐以求的完美路径。
3.3 off-policy的陷阱:目标策略与行为策略的静默战争
Q-learning声称“可以独立于当前策略”,但第六题暴露了它的阿喀琉斯之踵:当行为策略π_b(如随机探索)与目标策略π(greedy)严重不匹配时,Q值更新会因重要性采样缺失而产生偏差。题干中“从s₁采取a₁,转移到s₂,并选择a₂”这一串动作,若a₂是ε-greedy下偶然选中的(π_b(a₂|s₂)=ε/|A|),而π(a₂|s₂)=0(因Q(s₂,a₁)>Q(s₂,a₂)),则Q-learning更新时却用Q(s₂,a₂),相当于用一个低概率事件去修正高频策略的估值——这就像用彩票中奖记录去调整工资条。标准Q-learning不加权,本质是假设π_b能充分覆盖π的支持域。真正的off-policy鲁棒性,需要重要性采样比ρ = π(a|s)/π_b(a|s)来校正,而这正是Precup等人提出的Tree-Backup或Retrace算法要解决的。试卷没考这个,但当你发现Q值震荡不收敛时,该想到的正是这里。
4. 值迭代 vs 策略迭代:收敛路径上的两条平行铁轨
第五题把值迭代(VI)和策略迭代(PI)的公式并列,但真正值得深挖的,是它们在同一个MDP中走出的完全不同的收敛轨迹。VI像一个固执的雕刻师,一刀一刀削去价值函数的毛边;PI则像一个老练的棋手,先评估局面(策略估计),再调整落子(策略改进)。两者都奔向v*,但脚下的路截然不同。
4.1 值迭代:一步到位的贪婪压缩
值迭代更新式:
vₖ₊₁(s) ← maxₐ Σₛ′ P(s′|s,a)[r(s,a,s′) + γ vₖ(s′)]
注意:它不显式存储策略,每轮直接计算“若此刻在s,选哪个a能让v最大”,然后把v(s)设为该最大值。这导致一个关键特性:vₖ(s)始终是某个确定性策略πₖ的值函数,但πₖ在迭代中隐式变化,且vₖ未必对应任何固定策略的稳定值。例如,在简单两状态MDP中,v₀(s₁)=v₀(s₂)=0,v₁(s₁)=max{r₁₁+γv₀(s₁), r₁₂+γv₀(s₂)},v₁(s₂)=...,v₁已隐含一个新策略π₁。v₂又基于v₁重算max,策略再次漂移。VI的收敛是vₖ→v,而策略πₖ在收敛前可能反复横跳*——它不关心策略是否稳定,只确保价值逼近最优。
4.2 策略迭代:稳扎稳打的双阶段推进
策略迭代分两步:
策略评估(Policy Evaluation):给定π,解 v_π(s) = Σₐ π(a|s) Σₛ′ P(s′|s,a)[r(s,a,s′) + γ v_π(s′)]
这本质是解一个线性方程组。若状态数n小,可用矩阵求逆:v_π = (I − γ P_π)⁻¹ R_π;若n大,则用迭代法vₖ₊₁ = R_π + γ P_π vₖ,直到||vₖ₊₁−vₖ||<δ。策略改进(Policy Improvement):π′(s) ← argmaxₐ Σₛ′ P(s′|s,a)[r(s,a,s′) + γ v_π(s′)]
即用当前v_π去贪心地提升策略。
PI的魔力在于:只要策略改进后π′≠π,则v_π′ ≥ v_π,且严格大于至少一个状态(除非π已最优)。这意味着PI的v_π序列单调不减,且有限状态空间下必在有限步内收敛到v*。PI不追求每步v都更优,而是确保每轮“评估+改进”后,策略质量严格跃升。
4.3 收敛速度对比:理论与实操的鸿沟
理论上,PI收敛步数远少于VI(PI最多|A|ˢ步,VI可能需O(1/(1−γ))步)。但实操中,PI的策略评估若用迭代法,每轮需多次扫描所有状态;而VI每次只扫一遍。第七题提到“基于模型的方法样本效率高”,指的正是PI——它用完整模型P,R一次性评估策略,无需交互采样。但若模型不准,PI的v_π评估就是沙上筑塔。VI的慢,是稳健的慢;PI的快,是精确的快——二者 trade-off 的核心,是“计算资源”与“模型可信度”的博弈。
5. 避坑指南:强化学习计算中那些让答案差0.01的魔鬼细节
强化学习的数学很美,但落地计算时,几个看似微小的符号、顺序、边界处理,足以让正确答案变成“接近正确”。这份试卷的答案里埋着太多血泪教训,我们一条条拆开:
5.1 折扣因子γ的幂次:从t=0还是t=1开始?
蒙特卡洛回报Gₜ = rₜ₊₁ + γ rₜ₊₂ + γ² rₜ₊₃ + ...,注意:第一个奖励rₜ₊₁不乘γ,它是t时刻动作后立即获得的。第八题中Gₜ = rₜ + γ rₜ₊₁ + γ² rₜ₊₂ + ... 的写法是错的!标准记号中,rₜ是执行aₜ后在t时刻获得的奖励,故Gₜ应从rₜ₊₁开始(因aₜ在t时刻执行,奖励在t+1时刻观测)。若题干写rₜ,那它定义的就是t时刻奖励,则Gₜ = rₜ + γ rₜ₊₁ + γ² rₜ₊₂ + ... 成立。关键不是记号,而是确认“rₜ”的定义时刻——所有γ幂次必须与奖励发生的时间戳对齐。错一拍,整个回报计算就偏移。
5.2 终止状态的奖励处理:r=0还是无奖励?
s₄是终止状态,题干说“奖励为0”。但严格来说,终止状态无转移,故无r(s₄,a,s′)。若硬要定义,应设r(s₄,a,s′)=0 ∀a,s′,或更准确地说,终止状态不参与奖励计算,其v=0是边界条件,非由r导出。若在代码中给s₄添加r=0的伪奖励,并让它参与贝尔曼更新,会导致v(s₄) = 0 + γ×0 = 0,看似无害,但若γ≠0,它会污染梯度流。正确做法:在循环中检测s′是否为终止态,若是,则目标值为rₜ(不加γ v(s′))。
5.3 SARSA的aₜ₊₁必须来自同一策略:不能“事后诸葛亮”
SARSA要求aₜ₊₁是在sₜ₊₁状态下,用与生成sₜ→aₜ相同策略π所选的动作。第四题中“转移到s₂,并选择a₂”,隐含a₂是ε-greedy策略在s₂下选出的。若你为了“让Q更新更大”而手动选a₁(即使Q(s₂,a₁)<Q(s₂,a₂)),那就不是SARSA,是混合策略。SARSA的on-policy性,要求整个(sₜ,aₜ,rₜ,sₜ₊₁,aₜ₊₁)五元组必须是同一策略π下连续采样的结果。断开这个链,SARSA就失去了理论保证。
5.4 Q-learning的max操作:对未访问动作的默认值陷阱
Q-learning更新中maxₐ Q(sₜ₊₁,a),若sₜ₊₁的某些动作a从未被访问过,Q(sₜ₊₁,a)初始为0(或随机值)。此时max可能选中一个Q值为0的未探索动作,导致目标值虚高。例如,s₂有a₁,a₂,Q(s₂,a₁)=0(未访问),Q(s₂,a₂)=3,则max=3,正常;但若初始化Q=10,则max=10,目标值爆炸。工业级实现必须对未访问动作设Q=-∞(或极小值),或使用乐观初始化+衰减,否则Q-learning会陷入“虚假最优”的幻觉。
5.5 学习率α的衰减:不是可选项,是收敛必要条件
第十题提到n-step SARSA,但未提α。Robbins-Monro条件要求∑αₜ=∞且∑αₜ²<∞才能保证收敛。若α恒为0.5,Q值会在最优值附近震荡,永不收敛。试卷答案用α=0.5是为计算简洁,真实代码中必须αₜ=1/t或αₜ=const/(const+t)。曾见某同学调参三天,只因忘了α衰减,Q值在1.99和2.01间跳动,以为模型有bug——其实是数学在敲黑板。
6. 从“解题”到“造轮子”:为什么我每次推导贝尔曼方程都强制手写矩阵形式
做完这十道题,你可能觉得“哦,原来如此”。但真正的转折点,是当你把s₁~s₄写成向量v=[v₁,v₂,v₃,v₄]ᵀ,把转移概率和奖励编码成矩阵P和R,把贝尔曼方程v = R + γ P v重写为(I − γ P)v = R,然后用numpy.linalg.solve求解——那一刻,抽象符号突然有了重量。我至今保留一个习惯:任何涉及状态值计算的问题,第一反应不是列方程,而是构建(I − γ P)矩阵。因为只有矩阵视角,才能看清三个本质:
收敛性即谱半径:vₖ₊₁ = R + γ P vₖ的迭代收敛,当且仅当γ P的谱半径ρ(γ P) < 1。而ρ(P) ≤ 1(概率矩阵),故γ < 1是充分条件。这解释了为何γ=1在无限状态空间中必然发散——ρ(P)=1,γ P的特征值仍在单位圆上。
策略迭代的矩阵加速:PI的策略评估若用矩阵法,v_π = (I − γ P_π)⁻¹ R_π,一次求逆搞定;而VI需迭代数十次。当状态数<1000,矩阵法碾压迭代法。
模型误差的放大效应:若P有误差ΔP,则v的误差≈γ (I − γ P)⁻¹ ΔP v。注意到(I − γ P)⁻¹是价值传播的“增益矩阵”,其范数随γ→1而爆炸——这定量解释了第七题中“模型错误会影响决策”的机制:模型不准时,γ越大,错误被放大的倍数越高。
这份试卷最珍贵的,不是答案,而是它强迫你把每一个γ、每一个r、每一个P(s′|s,a)都钉死在具体数字上。从此以后,当我看到论文里一句“we set γ=0.99”,我会立刻在脑中跑一遍:在这个MDP里,v(s)的更新步长会缩小多少?收敛迭代次数会增加几倍?模型误差会被放大几倍?——因为我知道,所有玄学参数,背后都站着一个可计算的矩阵。希望帮到你。
本文还有配套的精品资源,点击获取