想象你是一位新手游戏教练,面前坐着一位从没摸过手柄的“玩家”——一个名为 RL Agent 的程序。它不懂马里奥是什么,只会傻乎乎地试验各种按键。你的任务,是像带真人新玩家一样,先给它配一副合适的“游戏眼镜”(状态表征),再精简它手柄上的按键(动作空间),然后设计表扬与批评的方式(奖励塑形),排一张由易到难的训练课表(课程学习),最后让它稳定发挥、通过出师考试(评估诊断)。这条完整的“带练”路线,就是游戏 AI 测试中让 RL Agent 通关的核心方法论。

岗位关联

掌握 RL Agent 游戏通关的完整训练流程,能帮你自动化测试关卡可玩性、量化难度曲线、打磨 NPC 智能,是游戏 AI 测试工程师的核心竞争力。

目录
  1. 可视化演示
  2. 状态表征设计
  3. 分层动作空间
  4. 奖励塑形策略
  5. 课程学习调度
  6. 训练稳定技巧
  7. 马里奥实战配置
  8. 评估与诊断
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

演示RL Agent状态表征CNN特征提取与分层动作空间映射、训练奖励曲线探索利用平衡、课程学习由易到难分阶段通关调度三大模式交互动画。

本节配有交互动效(进入视口后自动加载,约 3KB)。

RL状态表征与分层动作空间 游戏画面帧经CNN提取特征向量作为状态输入 分层动作空间宏动作映射到原始按键组合 a = π(a|s,θ), s = CNN(frame) 状态表征质量决定Agent感知游戏环境的能力上限

状态表征设计

你发现这个菜鸟玩家有个毛病:它盯着整块 4K 屏幕,连草丛里有几根草都数得清清楚楚,却判断不出蘑菇怪正在靠近。于是你决定没收它的高清画质,给它戴上一副特制“游戏眼镜”——只看黑白画面,只保留屏幕中间一小块区域,而且让它“过目不忘”最近四帧画面。这一整套“看什么、怎么看”的设计,就是状态表征(State Representation)。

在强化学习里,状态就是智能体做决策所依据的全部输入。超级马里奥环境默认返回彩色 RGB 画面,维度高、噪声大,直接喂给神经网络既浪费算力又难收敛。标准做法是三步预处理:灰度化、裁剪 ROI、帧堆叠。

灰度化用亮度公式把三通道压缩成一个通道,计算量降到原来三分之一;裁剪 ROI 去掉天空和背景,只聚焦马里奥附近的“危险区”;帧堆叠把最近 4 帧灰度图拼在一起,让单张观测“自带”运动方向与速度信息——就像看连环画,能看出人物正往哪跑、跑多快。灰度化公式如下:

给菜鸟戴上这副“近视眼镜”后,它反而看得更清楚了:画面干净、焦点集中,还能靠四帧连画判断出“前方有坑正在逼近”。眼镜选对了,后面的训练才能事半功倍。

Y=0.299R+0.587G+0.114BY = 0.299R + 0.587G + 0.114B
这个公式把彩色像素的 R、G、B 三个通道按人眼敏感度加权求和,得到一个 0-255 的灰度亮度值,是图像预处理中最经典的降维操作。
  1. 灰度值$Y$ 是转换后单个像素的亮度,取值从 0(黑)到 255(白)。
    YY
  2. 红色通道贡献$0.299R$ 表示红色分量乘 0.299,红通道对亮度感知贡献约三成。
    0.299R0.299R
  3. 绿色通道贡献$0.587G$ 表示绿色分量乘 0.587,权重最大,因为人眼对绿色最敏感。
    0.587G0.587G
  4. 蓝色通道贡献$0.114B$ 表示蓝色分量乘 0.114,权重最小,蓝色对亮度感知影响最低。
    0.114B0.114B
  5. 加权求和三个通道相加得到最终灰度值,画面被压缩成单通道而不丢失轮廓与明暗。
    0.299R+0.587G+0.114B0.299R + 0.587G + 0.114B

分层动作空间

眼镜的问题解决后,你又发现新麻烦:这个菜鸟玩家紧张起来会同时按住“左”和“右”,手柄都快被掰断了。你决定给手柄精简按键,只留几个真正有用的键,并把“右+跳”这种常用组合焊成一个键。手柄上最终有哪几个键、每个键对应什么效果,就是动作空间设计,也叫分层动作空间。

马里奥环境的原始输出有几百种组合,但对“通关”这个目标,绝大多数按键毫无意义甚至有害——比如同时按左和右。动作空间设计的目标是把原始按钮组合映射为少量离散的“语义动作”:不动、右走、跳跃、右跳、左走等。动作数量少,探索更快;组合动作封装得好,高难度操作也能一键触发。动作空间用集合可以写成:

手柄简单了,菜鸟的误操作就少了。它不再纠结于几百个组合键,而是专注这 6 个“人生动作”,学起跳跃时机来自然快得多。

A={(L,R,J)∣L,R,J∈{0,1}, L+R≤1},∣A∣=6\mathcal{A} = \{(L, R, J) \mid L, R, J \in \{0,1\},\ L + R \le 1\},\quad |\mathcal{A}| = 6
动作空间不是越大越好,去掉物理上不可能或语义上重复的组合后,只剩 6 个合法动作,收敛速度会显著提升。
  1. 动作三元组$(L, R, J)$ 表示一次按键组合,$L$、$R$、$J$ 分别表示按左、按右、按跳,取 0 或 1。
    (L,R,J)(L, R, J)
  2. 左右互斥约束$L + R \le 1$ 表示左和右不能同时为 1,保证方向一致,不会原地打架。
    L+R≤1L + R \le 1
  3. 动作空间大小$|\mathcal{A}| = 6$ 表示 8 种组合去掉 2 种“同按左右”的无效组合后,剩下 6 个语义动作。
    ∣A∣=6|\mathcal{A}| = 6
  4. 集合构造法$\{... \mid ...\}$ 表示“满足竖线后条件的元素组成的集合”,是数学中描述动作集合的标准记法。
    A={(L,R,J)∣L,R,J∈{0,1}}\mathcal{A} = \{(L, R, J) \mid L, R, J \in \{0,1\}\}

奖励塑形策略

菜鸟玩家第一次误打误撞走到终点旗杆前,你激动得想发个大红包。可问题来了:从起点到终点可能需要几千步,中间完全没有任何反馈,它根本不知道自己“走得对不对”。这就叫稀疏奖励(Sparse Reward)困境——只有终点有奖励,学习就像在黑暗里找出口。

奖励塑形(Reward Shaping)的思路是:在“最终通关的大奖励”之外,设计一些“过程奖励”,让智能体每走一步都能获得即时反馈。比如向右前进一点给 +0.1,掉坑给 -1,通关给 +10。但奖励不能乱给——如果教它“原地站着就有钱拿”,它就会变成懒汉。学术界有个漂亮的理论工具叫势能函数塑形(Potential-Based Reward Shaping),它在奖励上叠加一个“势能差”,数学上能证明不会改变最优策略。设 $\Phi(s)$ 表示状态 $s$ 的势能(比如离终点越近势能越高),塑形后的奖励为:

有了这套“进步就鼓掌、原地发呆没甜头”的激励机制,菜鸟玩家终于能在黑暗中摸索前进:它知道往右走有回报,掉坑会疼,靠近旗杆更是大喜事——学习的劲头一下就上来了。

r′(s,a,s′)=r(s,a,s′)+γΦ(s′)−Φ(s)r'(s,a,s') = r(s,a,s') + \gamma\Phi(s') - \Phi(s)
左边是“改过的奖励”,右边第一项是“环境给的原始奖励”,后两项是“教练加的鼓励”——只奖励相对进步,不会教坏学生。
  1. 原始奖励$r(s,a,s')$ 是环境在状态 $s$ 下执行动作 $a$、转移到 $s'$ 时给的基础奖励。
    r(s,a,s′)r(s,a,s')
  2. 塑形后奖励$r'(s,a,s')$ 是修改后真正用于学习的奖励,等于原始奖励加势能差。
    r′(s,a,s′)r'(s,a,s')
  3. 折扣因子$\gamma$ 是 0-1 之间的折扣因子,控制未来回报折现到当前的程度。
    γ\gamma
  4. 下一状态势能$\gamma\Phi(s')$ 表示到达新状态后“离终点更近”带来的加分。
    γΦ(s′)\gamma\Phi(s')
  5. 当前状态势能$-\Phi(s)$ 减去当前状态势能,形成“进步才加分、原地不动不加分”的势差结构。
    −Φ(s)-\Phi(s)

课程学习调度

新手教练最容易犯的错,就是第一天就让学员去打最终 Boss。你决定把训练计划拆成“课程”:先在没有任何坑的练习场学走路,再加一个坑学跳跃,最后才上布满障碍的正式关卡。这个“由易到难、按课表推进”的策略,就是课程学习(Curriculum Learning)。

课程学习的核心问题是“什么时候升级”。如果太早换难关,菜鸟会被虐到崩溃;太晚换又浪费时间。标准做法是设定一个胜率阈值:只有当它在当前关卡的最近 N 回合中,通关率超过某个阈值(比如 70%),才解锁下一课。这就像驾校教练:侧方停车练到 10 次过 7 次,才让你上大路。假设最近 N 回合中通关 $W$ 次、失败 $L$ 次,胜率计算与切换条件为:

有了这张课表和“体温计”,菜鸟玩家从平地走到深坑区,每一步都踩在舒适区边缘,既不被吓退也不觉得无聊。训练效率比一上来就丢进地狱难度关卡的同伴高出一大截。

win_ratei=WiWi+Li>θi ⇒ 解锁课程 i+1\text{win\_rate}_i = \frac{W_i}{W_i + L_i} > \theta_i \ \Rightarrow\ \text{解锁课程 } i+1
胜率公式是课程学习的“体温计”:数字达不到阈值就留在当前课,达到了才升班,从而保证学习曲线平稳爬坡。
  1. 当前课程胜率$\text{win\_rate}_i$ 是第 $i$ 门课程最近 N 回合的胜率,衡量掌握程度。
    win_ratei\text{win\_rate}_i
  2. 通关次数$W_i$ 是课程 $i$ 中成功通关的回合数。
    WiW_i
  3. 失败次数$L_i$ 是课程 $i$ 中失败或掉坑的回合数。
    LiL_i
  4. 切换阈值$\theta_i$ 是预设阈值(如 0.7),只有超过它才认为“学会了这一课”。
    θi\theta_i
  5. 课程升级$>$ 符号表示当胜率超过阈值时,解锁并进入第 $i+1$ 门课程。
    WiWi+Li>θi\frac{W_i}{W_i + L_i} > \theta_i

训练稳定技巧

菜鸟玩家进步不小,但你发现它有时会“抽风”:明明练得好好的,突然满嘴胡言乱语(Q 值爆炸),把之前学的好习惯全忘了。这就像运动员状态起伏、学过的动作突然不会做。这时就需要训练稳定技巧,让它的发挥平稳下来。

DQN 这类深度强化学习算法常有两大致命伤:一是样本之间高度相关,连续帧看久了会“学偏”;二是“自己追自己”,用正在更新的网络计算目标,容易原地打转甚至发散。经典方案是经验回放(Experience Replay)和目标网络(Target Network)。经验回放把经历 $(s, a, r, s')$ 存进“记忆池”,训练时随机抽取一小批,打乱时间相关性,就像学生复习错题时乱序重做。目标网络则是一份“冻结的老版本网络”,用它计算回归目标,每隔若干步才把新权重复制过去。TD 目标公式如下:

有了“错题本”和“稳定靶子”,菜鸟玩家的成绩不再忽上忽下,而是一步一个脚印向上爬。它终于像个正经运动员,而不是靠运气的赌徒。

yj=rj+γmax⁡a′Q^(sj+1,a′;θ−)y_j = r_j + \gamma \max_{a'} \hat{Q}(s_{j+1}, a'; \theta^-)
用“旧版本自己”当靶子,而不是用“正在变形的自己”,这能让学习目标在一段时间内保持稳定,训练不发散。
  1. TD 目标$y_j$ 是第 $j$ 条经验样本要逼近的目标值,衡量“这一步期望拿多少”。
    yjy_j
  2. 即时奖励$r_j$ 是这条经验里实际获得的奖励。
    rjr_j
  3. 未来最大 Q$\max_{a'} \hat{Q}(s_{j+1}, a'; \theta^-)$ 用目标网络 $\hat{Q}$ 算出下一状态所有动作中的最大 Q 值,代表“最乐观估计”。
    max⁡a′Q^(sj+1,a′;θ−)\max_{a'} \hat{Q}(s_{j+1}, a'; \theta^-)
  4. 折扣因子$\gamma$ 将未来 Q 值折算到当前,平衡短期与长期利益。
    γ\gamma
  5. 目标网络参数$\theta^-$ 是目标网络的固定参数,平时不参与更新,定期从主网络复制。
    θ−\theta^-

马里奥实战配置

到了出师前最关键的时刻——正式集训。就像运动员赛前要定好训练鞋、计时钟、心率带,训练一个马里奥智能体,也要把环境、超参数、预处理管线一一配置清楚。这就是超级马里奥实战配置。

实践中最常使用的是 OpenAI Gym 生态下的 gym-super-mario-bros 环境。我们需要关闭马里奥的水平位置、速度等“辅助信息”,只保留像素画面,让智能体纯粹靠“看屏幕”学会通关。训练配置的关键参数包括:观测使用 4 帧堆叠的灰度图、动作空间用前文定义的 6 个离散语义动作、奖励开启进度奖励(按 x 坐标前进量)与死亡惩罚、探索率(epsilon)从 1.0 线性衰减到 0.05。强化学习优化的目标是最大化“从当前时刻开始的折扣累计回报”:

当装备全部调试到位——4 帧灰度观测、6 个语义动作、势能塑形奖励、由易到难的课程表,再配合经验回放和目标网络,菜鸟玩家终于在集训营尾声成功站上旗杆顶端,通关率稳定突破 90%。训练配置可视化、可复现,这正是工程化的精髓。

Rt=∑k=0∞γkrt+kR_t = \sum_{k=0}^{\infty} \gamma^k r_{t+k}
累计回报公式是智能体一切行为的“总账本”:每一步拿到的即时奖励都折算成“现值”累加,学到的策略本质上是让这本账越滚越大。
  1. 累计回报$R_t$ 是 $t$ 时刻起往后所有奖励的折扣总和。
    RtR_t
  2. 求和范围$\sum_{k=0}^{\infty}$ 表示从当前步 $k=0$ 一直累加到无穷远的时间步。
    ∑k=0∞\sum_{k=0}^{\infty}
  3. 折扣率$\gamma^k$ 表示第 $k$ 步后的奖励按 $\gamma$ 的 $k$ 次方折扣,越遥远的奖励越“不值钱”。
    γk\gamma^k
  4. 单步奖励$r_{t+k}$ 是第 $t+k$ 时刻环境给的即时奖励。
    rt+kr_{t+k}

评估与诊断

训练结束不等于万事大吉。就像教练要安排出师考试,看学员在陌生赛道上能否稳定发挥,我们也要对训练好的 RL Agent 做系统评估与诊断,否则它可能只是“背诵了训练关卡”,而不是“学会了通关”。

评估 RL Agent 不能只看训练时的 reward 曲线——reward 是“过程信号”,用于学习;评估则需要“结果指标”。最常用的两个指标是通关率(clear rate)和平均步数。通关率衡量“能不能过”,平均步数衡量“过得多高效”。除此之外,失败位置分布能帮我们定位关卡设计或训练盲区的瓶颈——哪里死得最多,哪里就是问题焦点。通关率公式如下:

出师考试结束:通关率 92%,平均 15 步过关,失败集中在第三段连续坑洞。你翻开笔记本——这是课程切换太急、跳跃动作还没磨炼成熟的典型信号。于是你决定加训一个“连续坑洞专项课”。评估与诊断,让“通关”从玄学变成了可以度量、可以改进的工程。

clear_rate=NwinNtotal×100%\text{clear\_rate} = \frac{N_{\text{win}}}{N_{\text{total}}} \times 100\%
通关率是 RL Agent 通关能力的最终“成绩单”,配合失败位置热力图,就能知道它是“全能高手”还是“只会背板的路痴”。
  1. 通关次数$N_{\text{win}}$ 表示测试中成功抵达终点的回合数。
    NwinN_{\text{win}}
  2. 测试总次数$N_{\text{total}}$ 表示用于评估的回合总数,通常取 100 或更多,保证统计可信。
    NtotalN_{\text{total}}
  3. 比值$\frac{N_{\text{win}}}{N_{\text{total}}}$ 是通关回合占总回合的比例,核心的“过不过”指标。
    NwinNtotal\frac{N_{\text{win}}}{N_{\text{total}}}
  4. 百分数换算$\times 100\%$ 将比例换算成百分数,便于不同模型、不同关卡之间横向比较。
    ×100%\times 100\%

AI 应用场景

自动化关卡可玩性测试

阶段:训练与评估

解决的问题:传统关卡测试靠人工试玩,耗时且主观,无法覆盖所有操作路径。用 RL Agent 自动跑关,几小时内就能摸清“哪段跳不过去、哪里奖励设置不合理”,把关卡设计风险前置。

具体案例:某横版跳跃游戏新版本加入 3 个新关卡。QA 用课程学习预训练的 Agent 对新关卡试玩 1000 局,通关率仅 30%,失败集中落在第 2 关的连续跳台区。策划据此把跳台间距缩小 15%,再次测试通关率回升到 80%。

游戏难度曲线量化

阶段:评估与诊断

解决的问题:策划希望“前三关新手友好、五六关有挑战”,但“难易”无法量化。用同一套训练配置在不同关卡跑 Agent,把通关率与平均步数作为难度的客观指标。

具体案例:对 1-1 到 1-8 关卡各跑 200 局 Agent,得到通关率曲线:1-1 为 95%,1-4 骤降到 40%,说明第 4 关难度跳升过大,需要调整敌人密度或平台布局。

NPC 陪玩智能体重用

阶段:训练与应用

解决的问题:训练好的 RL Agent 不仅用于测试,还可以直接变成“教学 NPC”或“陪玩 bot”。分层动作空间与课程学习产出的策略,可以固化成不同水平的对手。

具体案例:将马里奥 Agent 在不同训练课时的权重分别固化,得到“新手陪跑版”(通关率 30%)和“高手竞速版”(通关率 95%),玩家可自选陪玩难度,提升游戏可玩性。

Python 演示

python80 行
import random WORLD = 30  class MiniMario:    """1D 迷你马里奥: 地面有坑, 跳过即可通关"""     def __init__(self, pits):        self.pits = set(pits)        self.reset()     def reset(self):        self.x = 0        self.alive = True        return self._observe()     def _observe(self):        # 以 agent 为中心 21 格视野: 0 平地, 1 坑, 2 自己        return tuple(2 if i == 0 else                     1 if self.x + i in self.pits else 0                     for i in range(-10, 11))     def step(self, action):        prev = self.x        if action == 1 and (self.x + 1) in self.pits:            self.x += 2          # 正前方是坑, 起跳跨过        elif action == 2:            self.x += 2          # 右跳, 直接大跨步        else:            self.x += 1          # 右走一格        if self.x in self.pits:  # 掉进坑里            self.alive = False            return self._observe(), -1.0, True        done = self.x >= WORLD   # 到达终点        reward = 10.0 if done else (0.2 if self.x > prev else 0.0)        return self._observe(), reward, done  def run_episode(Q, env, epsilon, alpha=0.5, gamma=0.9):    s = env.reset()    total = 0.0    win = False    for _ in range(200):        qs = Q.get(s, [0.0, 0.0, 0.0])        a = random.randrange(3) if random.random() < epsilon \            else max(range(3), key=lambda i: qs[i])        s2, r, done = env.step(a)        q = Q.setdefault(s, [0.0, 0.0, 0.0])        target = r if done else r + gamma * max(Q.get(s2, [0.0, 0.0, 0.0]))        q[a] += alpha * (target - q[a])        total += r        s = s2        if done:            win = env.alive   # 活着且 done 说明过关            break    return total, win  def train(Q, env, episodes=300):    for ep in range(episodes):        epsilon = max(0.1, 1.0 - ep * 0.01)   # 探索率衰减        _, win = run_episode(Q, env, epsilon)        if win and ep % 50 == 0:            print("ep %d: win=True" % ep)  def main():    Q = {}    curriculums = ([10], [10, 22], [10, 22, 33])    for idx, pits in enumerate(curriculums):        print("=== 课程 %d: 坑位 %s ===" % (idx + 1, pits))        train(Q, MiniMario(pits))    env = MiniMario([10, 22, 33])    wins = sum(int(run_episode(Q, env, 0.0)[1]) for _ in range(100))    print("最终通关率: %d%%" % wins)  if __name__ == "__main__":    main()
目的:用表格型 Q-learning 训练一个迷你马里奥 Agent,完整演示“状态表征 + 分层动作 + 奖励塑形 + 课程学习 + 评估通关率”的整条通关训练流水线。
  1. return tuple(2 if i == 0 else ...)构造以 Agent 为中心的局部视野窗口,相当于给智能体配“游戏眼镜”。
  2. if self.x in self.pits:落坑判负,对应“死亡惩罚”的终止条件。
  3. reward = 10.0 if done else (0.2 if self.x > prev else 0.0)奖励塑形:前进小奖、原地无奖、过关大奖。
  4. target = r if done else r + gamma * max(...)Q 学习更新目标,终止状态不做未来值引导。
  5. q[a] += alpha * (target - q[a])逐条更新 Q 表,让估计值向目标靠拢。
  6. epsilon = max(0.1, 1.0 - ep * 0.01)探索率从 1.0 衰减到 0.1,训练后期更多利用已学策略。
  7. curriculums = ([10], [10, 22], [10, 22, 33])课程学习:从 1 个坑逐步加到 3 个坑。
  8. wins = sum(int(run_episode(Q, env, 0.0)[1]) for _ in range(100))关闭探索,用 100 局通关率做最终评估。

常见误区

误区我以为给智能体的奖励越密集、数值越大,它学得就越快,所以把每一步都设成 +1,通关给 +1000。

正解奖励太密会让智能体变得短视,专挑容易拿分的动作刷,甚至原地转圈赚奖励,最终反而学不到通关策略。正确的塑形要用“势能差”(如 $\gamma\Phi(s')-\Phi(s)$),只奖励相对进步,理论上不改变最优策略;数值也要平衡,过大的即时奖励会淹没远期通关奖励。

为何常见:人习惯用“多表扬多给糖”来激励孩子,自然认为对 AI 也适用,忽略了强化学习里“奖励即目标定义”的本质。

误区我觉得把手柄上所有按键组合都开放给智能体,它就能学会更多骚操作,通关能力更强。

正解动作空间是维度灾难的重灾区:每多一个无意义动作,探索空间就指数膨胀。同时按左和右这种矛盾组合还会让环境逻辑混乱。分层动作空间/语义动作(如把“右跳”合并成一个键)能在不损失表达能力的前提下大幅减少探索量,收敛速度成倍提升。

为何常见:直观上“选项多=潜力大”,但忽略了强化学习需要大量试错,选项越多试错成本越高。

误区我以为课程学习就是把关卡按难度排个序然后依次训练,一劳永逸。

正解真正的课程学习需要自适应调度:每个课程要有可量化的通关阈值、练到掌握才升级,必要时还要能降级或冻结重训。关卡难度涉及坑洞数量、平台间距、敌人密度等多个维度,靠人工排序往往不精确,更可靠的是按胜率统计自动编排后续课程。

为何常见:人脑理解“循序渐进”很直觉,但容易忽略“什么时候算学会了”这个量化难题。

误区训练日志里 reward 一路上涨,我就觉得 Agent 已经通关无敌了,直接上线发布。

正解reward 是“学习信号”而不是“能力指标”。经过奖励塑形后,Agent 可能学会了“走得远但永远到不了终点”也能拿高奖励。评估必须用独立指标:通关率、平均步数、失败位置分布,并固定随机种子做控制变量。

为何常见:训练面板默认展示 reward,人很容易把它误当成成绩单,却不知它已经过塑形过程的“污染”。

面试题

Q1. 在超级马里奥 RL 训练中,把彩色画面转成灰度图的主要原因是?

单选题 · easy

  • A.让显示效果更美观
  • B.降低状态维度与计算量← 正确答案
  • C.增加色彩通道的数量
  • D.提高画面的分辨率

答案:B。灰度化用亮度公式把 RGB 三通道压缩成一个通道,输入维度降为原来的三分之一,计算开销同步下降。A 美化、C 加通道、D 提分辨率都与灰度化的目的相反,属于干扰项。

Q2. DQN 中“帧堆叠”(把连续 4 帧灰度图叠在一起)的作用是?

单选题 · easy

  • A.让画面显示更加流畅
  • B.在帧间包含运动信息← 正确答案
  • C.减少内存占用空间
  • D.缩小动作空间范围

答案:B。单帧静止图像看不出速度与方向,帧堆叠像连环画,让智能体从连续画面推断运动状态。流畅度是渲染问题,与学习无关;堆叠会增加内存而非减少;动作空间不受观测处理影响。

Q3. 下列哪种做法属于合理的奖励塑形?

单选题 · mid

  • A.每走一步都给一分奖励
  • B.势能塑形且不改变最优策略← 正确答案
  • C.只在死亡时给大额惩罚
  • D.让奖励完全随机产生

答案:B。势能函数塑形奖励的是“相对进步”($\gamma\Phi(s')-\Phi(s)$),理论保证不改变最优策略,是规范做法。每步固定给分奖励原地磨时间,只罚死亡不鼓励进度,随机奖励无意义,都是错误塑形。

Q4. 课程学习中,何时应从第 i 课切换到第 i+1 课?

单选题 · mid

  • A.训练回合数超过一百
  • B.近N回合胜率超过阈值← 正确答案
  • C.训练奖励突然变为负数
  • D.无需条件直接切换

答案:B。课程切换应基于“掌握程度”,通常用最近 N 回合的通关率或胜率是否超过阈值 θ 判断。只看回合数、奖励正负或无条件切换,都不能反映学员是否真的学会了当前课程。

Q5. DQN 引入目标网络(target network)的主要目的是?

单选题 · mid

  • A.增加神经网络的层数
  • B.固定目标值防训练发散← 正确答案
  • C.替代经验回放机制
  • D.加速游戏画面的渲染

答案:B。目标网络是“冻结的老参数网络”,定期从主网络复制权重,用它计算 TD 目标,避免“自己追自己”造成的目标漂移与发散。它不改变网络结构,也不替代回放,更与画面渲染无关。

Q6. 经验回放提升训练稳定性的根本原因是?

单选题 · hard

  • A.减少训练样本数量
  • B.打乱相关性且复用样本← 正确答案
  • C.让奖励数值变得更大
  • D.直接复制最优策略

答案:B。连续游戏画面的样本高度相关,按序训练会让网络盯着同一件事学偏。回放池随机抽样打乱了时间相关性,且每条样本可被多次复用,提高了样本效率。样本变少、奖励变大、复制策略都与回放机制无关。

Q7. 把“右+跳”合并成一个语义动作(右跳)的好处是?

单选题 · mid

  • A.减少无效组合加速收敛← 正确答案
  • B.增大动作空间的维度
  • C.使奖励数值变得更大
  • D.让游戏画面更加清晰

答案:A。合并动作减少了语义上重复或无意义的组合数量,探索空间变小,收敛速度提升。动作空间是变小而非变大;奖励与画面渲染都不受动作定义方式影响。

Q8. 下列哪些是评估 RL Agent 通关能力的有效指标?

多选题 · mid

  • A.通关率统计指标← 正确答案
  • B.平均步数统计← 正确答案
  • C.随机种子设定
  • D.失败位置分布← 正确答案

答案:ABD。通关率判断“能不能过”,平均步数判断“是否高效”,失败位置分布定位“卡在哪里训练不足”。随机种子只是实验复现的控制变量,属于评估配置而非能力指标。

Q9. 状态表征设计中常见的预处理手段包括?

多选题 · easy

  • A.灰度化处理画面← 正确答案
  • B.裁剪视野ROI← 正确答案
  • C.归一化像素数值← 正确答案
  • D.转成三维模型

答案:ABC。灰度化降低输入维度、裁剪 ROI 聚焦危险区域、归一化把像素压到 0-1 便于网络训练,三者都是标准预处理。把画面转成三维模型既无必要,也不属于状态表征预处理范畴。

Q10. 关于稀疏奖励问题,下列说法正确的是?

多选题 · hard

  • A.末尾给奖导致学习困难← 正确答案
  • B.可利用奖励塑形缓解← 正确答案
  • C.可利用课程学习缓解← 正确答案
  • D.加大探索必能解决

答案:ABC。稀疏奖励让智能体在巨大状态空间里“大海捞针”,学习极慢。奖励塑形提供过程信号,课程学习由易到难降低起步难度,都能有效缓解。加大探索只能碰运气,不能保证解决,还可能让训练更不稳定。