想象你是一名训犬师,要训练一只叫“小灰”的边牧学会连续接住三个飞盘。你手里有一包零食(奖励),小灰每表现好一次就奖励一块。一开始它乱跑乱跳、偶尔蒙对一次;你耐心地继续训练,它慢慢稳定下来。一切看起来都很好?但真正的考验来了——小灰突然开始表现失常:零食照给、训练照做,可它怎么越练越差,甚至躲在角落不动了? 这就是强化学习的日常。训练一个强化学习模型,和训练小狗几乎没有区别:Agent(小灰)在环境(草坪)里不断试错,靠奖励信号(零食)引导策略。但 RL 训练出名地不稳定、难调试——模型可能突然崩盘,也可能表面上应付过去、实际上什么也没学会。 这篇文章不讲枯燥理论,只讲实用技巧:怎么监控回报和损失、怎么判断收敛还是发散、怎么用 TensorBoard 和 Wandb 做可视化、怎么检查策略行为、怎么排查梯度爆炸和奖励不变这类高频 bug。读完你就能像专业训犬师一样,蹲在训练场边,一眼看出小灰到底哪里不对劲。

岗位关联

对 AI 从业者:RL 实验 80% 的时间花在调试上。掌握系统化的调试与可视化方法,能让你从“猜谜式调参”升级为“数据驱动定位问题”,把周级别的排查缩短到小时级。

目录
  1. 可视化演示
  2. 指标监控:像训犬师一样记训练日记
  3. 收敛判断:小灰是真学会了,还是碰运气
  4. 可视化工具:给训练过程装一台行车记录仪
  5. 策略审查:蹲下来看小灰怎么接盘子
  6. 梯度故障:小灰突然僵住或发狂
  7. 奖励诊断:小灰为什么躺平了
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

动态演示强化学习训练调试与可视化实用的核心机制,通过总览/传输/转换/输出四种模式展示关键概念与交互流程。

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

强化学习训练调试与可视化实用:RL训练 RL训练关键监控指标体系 训练收敛与发散的判断方法 核心机制可视化 强化学习训练调试与可视化实用整体架构与关键组件

指标监控:像训犬师一样记训练日记

训练小灰时,真正有经验的训犬师手里总有个小本本。里面记的不是“今天表现不错”这种模糊感受,而是一串冷冰冰的数字:第 3 轮接住 4 个飞盘扣 2 分,第 7 轮接住 7 个飞盘加 5 分,第 12 轮冲去追猫扣 10 分。每个数字都对应一次真实的“打分”。没有这个小本本,你只会觉得“小灰时好时坏”;有了它,你才能看清它是每天进步一点,还是在原地瞎折腾。

强化学习里的“小本本”就是指标监控。训练一个 RL 智能体,至少要盯住三个数字:episode 回报、损失值、梯度范数,外加一个训练速度(每秒能跑多少个环境步)。episode 回报是本轮总共拿到的奖励——小灰这轮的总分;损失值衡量模型当前“想不通”的程度;梯度范数是网络学习步伐的“冲击力”;训练速度则是硬件吃得消的节奏。四个仪表盘缺一不可。

回报不是简单把每一步奖励相加,因为未来奖励的不确定性更高(小灰现在接住盘子,不代表下一秒也能接住)。RL 用“折扣回报”把每一步奖励折现到当下:

把每轮的 $G_t$ 画成折线图,就有了训练曲线——这就是 RL 调试的第一块基板。再叠加 value loss、policy loss 和 grad norm 三条曲线,当回报异常时,后三者能帮你快速圈定问题范围:是学不到(回报不涨)、学得乱(损失震荡),还是步子太大扯到蛋(梯度范数暴涨)。

Gt=∑k=0TγkRt+kG_t = \displaystyle\sum_{k=0}^{T} \gamma^k R_{t+k}
公式通俗说明:从第 t 步开始,把这一轮后续每一步的奖励都加起来,但越靠后的奖励越要打个折扣。折扣因子 $\gamma$ 越接近 1,说明越有耐心、越看重长远收益。
  1. 回报符号 $G_t$表示从第 t 步开始,未来累计的“折扣后总奖励”。相当于小灰从第 t 秒钟开始,接下来能拿到的所有零食的折算总值。
    GtG_t
  2. 求和符号 $\displaystyle\sum_{k=0}^{T}$把从当前时刻 (k=0) 一直到本轮结束 (k=T) 的每一步奖励都加到一起,形成本轮的总成绩单。
    ∑k=0TγkRt+k\sum_{k=0}^{T} \gamma^k R_{t+k}
  3. 折扣因子 $\gamma^k$$\gamma$ 是 0 到 1 之间的数(常见 0.99 或 0.999)。$\gamma^k$ 让越靠后的奖励权重越低——就像零食放久了会受潮,今天的奖励比明天的更值钱。
    γk\gamma^k
  4. 即时奖励 $R_{t+k}$第 t+k 个时刻环境给的一小块零食。接住飞盘 +10,绕开障碍 +5,冲去追猫 -10。
    Rt+kR_{t+k}

收敛判断:小灰是真学会了,还是碰运气

小灰第 30 轮拿了 85 分,第 31 轮拿 20 分,第 32 轮又拿 80 分。你会认为它学会了吗?当然不会——它只是时好时坏。真正的训犬师看的是“最近十轮的平均水平稳不稳定”。这就是 RL 里“收敛判断”的第一原则:单次 episode 回报的波动极大,绝不能被一次高分开心得忘形,也不能被一次低谷吓到崩溃。

要滤掉运气成分,最常用的工具是指数移动平均(EWMA),相当于给原始的毛糙曲线蒙上一层“磨砂玻璃”,只留下大趋势:

具体怎么判断?三个信号:第一,平滑回报曲线稳步上升后走平,说明策略在收敛;第二,曲线持续大幅震荡但无单边下行趋势,可能是策略随机性大,也算收敛的一种形态;第三,曲线单边下跌或出现 NaN,就是发散,立即停下排查。还可以在图上叠加一条“理论最优水平线”——如果平滑回报在最优值附近磨蹭,说明快到上限了;如果始终卡在半山腰,大概率是探索不足或奖励设计有问题。记住:看趋势,别看单集。

Rˉt=αRt+(1−α)Rˉt−1\bar{R}_t = \alpha R_t + (1-\alpha)\bar{R}_{t-1}
公式通俗说明:新一轮的平滑值,由“本轮真实成绩”和“上一轮平滑值”按比例混合而成。$\alpha$ 越小,曲线越平滑、越迟钝;$\alpha$ 越大,反应越快、但越毛糙。
  1. 平滑回报 $\bar{R}_t$第 t 轮结束后,我们心里“小灰真实水平”的估计值。它被上一轮的平滑值拽住,不会因单次成绩剧烈跳变。
    Rˉt\bar{R}_t
  2. 平滑系数 $\alpha$取值常在 0.05 到 0.2 之间。$\alpha$ 越大,新成绩权重越高,曲线越灵敏;$\alpha$ 越小,惯性越强,曲线越平滑。
    α∈(0,1)\alpha \in (0, 1)
  3. 当前回报 $R_t$本轮真实成绩。如果小灰超常发挥接住 5 个飞盘,$R_t$ 很大,但因为 $(1-\alpha)\bar{R}_{t-1}$ 的惯性,整体估计值只小幅上移。
    RtR_t
  4. 历史记忆 $\bar{R}_{t-1}$对过去所有轮次的“浓缩记忆”。每次更新只忘掉一点旧记忆,再吸收一点新成绩。
    Rˉt−1\bar{R}_{t-1}

可视化工具:给训练过程装一台行车记录仪

光有小本本还不够。专业训犬室里有一排监控屏,实时显示小灰的心率、奔跑速度、接盘成功率,训练完还能回放录像、对比两套训练方案。RL 训练也需要这样的“监控屏”,否则几千行日志文本看得人头皮发麻。TensorBoard 就是 Google 出品的标准训练仪表盘,Wandb 则是云端增强版。

TensorBoard 能干三件事:标量曲线(scalar)展示回报、损失等指标的走势;图表(graph)展示网络结构;直方图展示参数和梯度的分布。Wandb 更进一步,支持多台机器同步、自动记录超参数、一键生成对比报表——哪个超参组合最优,一目了然。两者都是“行车记录仪”式的存在:既能实时看,也能事后复盘取证。

可视化里最值得盯的一个量是梯度范数——它衡量网络每一步更新要承受的“总冲击力”:

实操建议:每个训练循环至少记录回报、value loss、policy loss、grad_norm、learning_rate 五个指标。TensorBoard 的 smoothing 参数就是上面第二节的 EWMA,默认 0.6,曲线太毛糙可以调到 0.9。用 Wandb 时把超参写进 config,它会自动生成对比矩阵。最有效的技巧:把“收敛曲线”和“发散曲线”截图挂在小黑板上,新实验出来先和它们对形状——5 秒钟就能判断新实验是朝着哪个方向走。监控屏不是装饰品,它是你看清小灰的唯一途径。

∥g∥2=∑igi2\lVert g \rVert_2 = \sqrt{\sum_{i} g_i^2}
公式通俗说明:把所有参数的梯度分量平方相加再开根号,得到一个单值。它告诉你网络这一步是在好好走路,还是被人猛推了一把。
  1. 梯度分量 $g_i$第 i 个参数的反向传播梯度,代表该参数应该往哪个方向、调多大。
    gi=∂L∂θig_i = \frac{\partial L}{\partial \theta_i}
  2. 平方求和 $\sum_i g_i^2$把几百万个梯度分量先平方(消除正负抵消),再求和,得到总能量。
    ∑igi2\sum_i g_i^2
  3. 开根号 $\sqrt{\cdot}$让结果保持和梯度同量纲,得到这个“总冲击力”的标量。
    ∑igi2\sqrt{\sum_i g_i^2}
  4. L2 范数 $\lVert g \rVert_2$记法上称为 L2 范数,也就是监控曲线里常看的 grad_norm。
    ∥g∥2\lVert g \rVert_2

策略审查:蹲下来看小灰怎么接盘子

数字会说谎。有一次小灰的回报曲线一路高涨,你觉得它天赋异禀。结果录像回放发现,它根本不是去接飞盘,而是追着零食袋跑——飞盘没接住几个,倒是把零食袋叼走了。如果不在真实环境里观察行为,你永远发现不了这个“钻空子”。RL 里这种现象叫 reward hacking:智能体找到比预期更省力的方式骗取奖励,却没有学会真正的技能。

所以训练中必须定期做“策略审查”,把当前策略放回环境跑几个 episode,录下来亲眼看。光靠肉眼看还不够,要量化策略是否“病态”,最常用的指标是动作熵——衡量策略输出动作的多样性:

策略审查的三个标准姿势:第一,行为采样——渲染环境、录制几段轨迹,肉眼确认动作是否合理;第二,动作分布——画出动作在各类别上的直方图,如果 60% 以上的步数都在重复同一动作,策略已经僵化;第三,状态覆盖——统计 agent 访问过的状态分布,若大量时间蜷在某个角落(比如小灰一直蹲在零食袋旁边),说明探索不足,需要加熵奖励或调整奖励函数。别只看成绩单,蹲下来看小灰是不是真的在接飞盘。

H(π(⋅∣s))=−∑aπ(a∣s)log⁡π(a∣s)H(\pi(\cdot|s)) = -\sum_{a} \pi(a|s) \log \pi(a|s)
公式通俗说明:熵高 = 动作花样多、探索充分,像活泼的幼犬什么都敢试;熵低 = 动作单一、策略僵化,像受惊的狗狗死咬一个动作。
  1. 策略 $\pi(a|s)$在状态 s 下选择动作 a 的概率。相当于小灰看到飞盘飞来时,选择“起跳”“伸爪”“卧倒”等动作的倾向性。
    π(a∣s)\pi(a|s)
  2. 对数项 $\log\pi(a|s)$概率越小的动作,$-\log\pi$ 越大。$\pi=0.01$ 时 $-\log 0.01 \approx 4.6$;$\pi=0.99$ 时约等于 0.01。
    log⁡π(a∣s)\log \pi(a|s)
  3. 负号与求和 $-\sum_a$把所有动作的 $-\pi\log\pi$ 累加,得到整个动作分布上的“混乱程度”。
    −∑aπ(a∣s)log⁡π(a∣s)-\sum_a \pi(a|s)\log\pi(a|s)
  4. 熵值 $H$H 越大策略越多样;H 趋近 0 说明策略坍缩成“只会做一个动作”。
    HH

梯度故障:小灰突然僵住或发狂

训练到第三周,小灰突然从活蹦乱跳变成两个极端:要么原地僵硬一动不动(梯度消失),要么疯狂原地转圈停不下来(梯度爆炸)。训练了好几万步,回报不升反降,有时甚至直接变成 NaN——像狗狗的体温计爆表了。这类故障的根源都在“梯度”:神经网络反向传播时梯度逐层相乘,数值过大就指数级放大(爆炸),过小就指数级衰减趋近于零(消失)。

梯度爆炸时参数被一步“撞飞”,训练曲线断崖式崩盘;梯度消失时网络永久“冻结”,曲线像心电图拉平。应对梯度爆炸最常用的武器是梯度裁剪——给梯度的“冲击力”绑上牵引绳,允许跑但限制最大加速度:

排查清单:日志里 loss 出现 NaN,先看学习率是否过大,再开裁剪并观察 grad_norm 是否从几千的高位回落;曲线“断崖式崩盘”,往往是某一批数据混入异常值或奖励量级过大,给奖励做归一化;梯度消失,常见于网络过深且激活函数用 sigmoid,在 TensorBoard 的梯度直方图里确认哪一层“失联”;梯度范数连续多轮上涨几个数量级,则是爆炸前兆,趁早降学习率。盯紧“冲击力”仪表,调好牵引绳,训练就会回归可控状态。

gclip=min⁡(1,c∥g∥2)⋅gg_{\text{clip}} = \min\left(1, \frac{c}{\lVert g \rVert_2}\right) \cdot g
公式通俗说明:如果当前梯度范数超过了预算 $c$,就把梯度整体按比例缩小到 $c$ 以内;没超就原样放行。相当于限速器,只降不升。
  1. 原始梯度 $g$网络在当前 batch 上想走的“步子”(更新向量)。
    gg
  2. 裁剪阈值 $c$允许的最大步长,常见取 0.5 到 1.0。相当于训犬师给狗狗套上牵引绳的长度。
    cc
  3. 范数比 $\frac{c}{\lVert g \rVert_2}$当前梯度范数 $\lVert g \rVert_2$ 超过 $c$ 时,这个比值小于 1,按比例缩小;没超过则比值大于 1。
    c∥g∥2\frac{c}{\lVert g \rVert_2}
  4. min 函数 $\min(1,\cdot)$保证结果永远不会大于原始梯度,只会缩小、绝不放大——牵引绳只限制速度上限,不拖着狗狗跑。
    min⁡(1,c∥g∥2)\min\left(1, \frac{c}{\lVert g \rVert_2}\right)

奖励诊断:小灰为什么躺平了

还有一种更隐蔽的失败:小灰训练了好久,“回报”始终是一个不变的数字——比如永远是 0。不是它不努力,而是它发现无论怎么做,零食都一样多。既然躺着也是 0 分,干嘛还要跳起来?这种“奖励恒定”是 RL 最常见的假死现象之一:环境没有提供任何有区分度的信号,agent 学了个寂寞。

怎么诊断?看 TD 误差——智能体预测的回报和实际回报之间的落差,相当于小灰每走一步的“惊喜或失望量”:

三种常见病征:第一,TD 误差长期接近 0 且奖励方差为 0——奖励恒定,先在日志里打印原始奖励的 min/max/std,再给环境写单元测试,确认 reward 函数没写错(比如 done 条件写反,导致终止奖励永远发不出来);第二,奖励极度稀疏(上千步才给一次)——学不动,对策是奖励重塑(Reward Shaping),每一步给一点“顺路”的引导,或者用课程学习先易后难;第三,TD 误差正负剧烈交替——奖励尺度太大,把奖励除以标准差归一化。小灰躺平不可怕,可怕的是你发现不了它在躺平。盯着 TD 误差和奖励的方差,就能嗅出奖励设计哪里不对劲。

δt=rt+γV(st+1)−V(st)\delta_t = r_t + \gamma V(s_{t+1}) - V(s_t)
公式通俗说明:TD 误差 = 这一步实际拿到的奖励 + 下一步局势的折算价值 - 当前局势的预期价值。长期接近 0,说明智能体已经对环境“毫无意外”,训练信号枯竭。
  1. TD 误差 $\delta_t$时刻 t 的“意外程度”。小灰预判能拿 50 分,结果只拿了 30,$\delta_t$ 为负——它感到失望。
    δt\delta_t
  2. 即时奖励 $r_t$这一小步实际拿到的零食,是环境给的原始反馈。
    rtr_t
  3. 折扣未来价值 $\gamma V(s_{t+1})$对“接下来局势好坏”的直觉评价,折算到当下。小灰看到飞盘还在空中,就知道还有得赚。
    γV(st+1)\gamma V(s_{t+1})
  4. 当前价值估计 $V(s_t)$进入当前状态前的心理预期。整个式子就是“实际发生 − 预期”,也叫惊喜值或失望值。
    V(st)V(s_t)

AI 应用场景

自动驾驶仿真的策略监控与熔断

阶段:模型训练与调试

解决的问题:传统方式靠下车肉眼观察车辆行为,无法定位“是感知错了还是决策错了”;训练中途跑偏几小时才发现,浪费大量算力。用回报曲线 + 梯度范数实时监控,异常时自动触发熔断(降学习率或暂停),再通过行为采样录像定位问题环节。

具体案例:某自动驾驶团队在仿真器里训练变道策略时,回报曲线震荡发散。他们在 TensorBoard 上叠加了 grad_norm,发现梯度范数在 200 轮内从 1 涨到 1e5,立即启用梯度裁剪并将学习率从 3e-4 降到 1e-4,曲线随即回归正常。全程只用了 20 分钟。

游戏 AI 的 reward hacking 检测

阶段:策略评估与验证

解决的问题:奖励曲线好看不等于行为正确。传统做法只看数值指标,容易漏掉 agent 钻漏洞的行为(如重复暂停翻倍刷分),导致上线的 AI 表现出怪诞行为。

具体案例:某游戏公司训练 NPC 对战策略,episode 回报显著超过人类水平,但回放录像发现 NPC 学会了“面向墙壁连按攻击键”来刷 hitbox 判定。团队通过策略审查中的动作分布直方图,发现 70% 的动作集中在同一键位,随即修改奖励结构并补充行为约束。

推荐系统强化学习的实验对比

阶段:超参数调优与实验管理

解决的问题:RL 推荐系统超参众多(学习率、熵系数、奖励折扣),手工记录易混乱、难复现。用 Wandb 自动记录每组实验的 config 和指标曲线,一键生成对比报表,大幅缩短调参周期。

具体案例:某电商推荐团队用 Wandb 并行跑了 12 组超参实验,通过对比报表发现“熵系数 0.02 + 奖励折扣 0.95”的组合在长期回报上领先第二名 8%,而该组合在传统单实验模式下需要两周才能测完。

Python 演示

python56 行
import csvimport numpy as np  class MetricsTracker:    """模拟 TensorBoard 的指标记录器: 记录回报, 损失, 梯度范数"""     def __init__(self, log_path):        self.log_path = log_path        self._step = 0        self._ewma_return = 0.0        self._return_log = []        self._metric_log = []     def update(self, episode_return, value_loss, grad_norm):        self._step += 1        alpha = 0.05        self._ewma_return = alpha * episode_return + (1 - alpha) * self._ewma_return        self._return_log.append([self._step, episode_return, self._ewma_return])        self._metric_log.append([self._step, value_loss, grad_norm])     def judge_convergence(self, window=30):        if len(self._return_log) < window:            return "训练不足, 继续观察"        recent = np.array(self._return_log[-window:])[:, 1]        std = float(np.std(recent))        mean = float(np.mean(recent))        if np.isnan(self._ewma_return) or std > 50:            return "发散: 回报剧烈波动, 建议检查奖励与学习率"        if std < 15:            return "收敛中: 回报稳定在 {:.1f} 附近".format(mean)        return "震荡: 回报未稳定, 继续训练"     def save_csv(self):        with open(self.log_path + "_return.csv", "w", newline="") as f:            writer = csv.writer(f)            writer.writerow(["step", "episode_return", "ewma_return"])            writer.writerows(self._return_log)        print("日志已保存:", self.log_path + "_return.csv")  if __name__ == "__main__":    tracker = MetricsTracker("/tmp/rl_demo")    rng = np.random.default_rng(42)    for ep in range(100):        trend = 180 * min(ep / 70.0, 1.0)        noise = rng.normal(0, 8)        if ep >= 80:            reward = float("nan")        else:            reward = trend + noise        loss = max(0.6 - ep * 0.005, 0.05) + rng.normal(0, 0.02)        grad_norm = 0.8 + rng.normal(0, 0.15)        tracker.update(reward, loss, grad_norm)    print(tracker.judge_convergence(window=20))    tracker.save_csv()
目的:实现一个轻量级训练指标追踪器,模拟真实 RL 训练中回报、损失、梯度范数的记录与收敛判断,跑完输出诊断结论并保存 CSV 日志。
  1. self._ewma_return = alpha * episode_return + (1 - alpha) * self._ewma_return这正是正文第二节的 EWMA 公式:用本轮回报和上一轮平滑值做指数加权,过滤单轮噪声。
  2. np.isnan(self._ewma_return)快速检测训练是否爆掉:一旦回报出现 NaN,平滑值也会变 NaN,这就是梯度爆炸后的第一症状。
  3. std = float(np.std(recent))用最近 N 轮回报的标准差判断稳定性,对应“看稳定不看单集”。
  4. writer.writerows(self._return_log)把日志写成 CSV,后续可直接导入 Excel 或 Pandas 二次分析,相当于简易版 TensorBoard 落盘。
  5. trend = 180 * min(ep / 70.0, 1.0)构造“前 70 轮上升、之后走平”的健康训练趋势,模拟 PPO 的典型收敛过程。
  6. reward = float("nan")从第 80 轮起注入 NaN,模拟训练后期梯度爆炸导致的异常,用来测试诊断逻辑是否灵敏。

常见误区

误区我看到 episode 回报越练越低,一定是我代码写错了,赶紧推倒重来。

正解RL 训练有探索期,前期回报低非常常见;曲线天然带噪声,必须平滑后看趋势才能定性。真正需要警惕的是“持续单边下跌、触底不反弹、出现 NaN”。就像小灰刚学接飞盘时摔得比不学还惨——那是在试探各种动作,不是退化。

为何常见:人脑对“下降”的直觉反应是“坏了”,忽略了 RL 探索阶段本身就有大起大落。

误区我的 policy loss 在稳定下降,训练肯定很健康,坐等模型变强就行。

正解RL 不是纯监督学习,策略损失下降可能只是策略熵坍缩——所有动作概率挤到同一个动作上,回报反而崩盘。要四个表一起看:回报、损失、熵、梯度范数。就像小灰学会了“趴着不动”,损失是降了,但飞盘一个也接不到。

为何常见:从分类和回归任务迁移过来的思维惯性,把 loss 当成了唯一健康指标。

误区边训练边盯着图也没用,不如等它跑完再一起分析 TensorBoard 截图,省心。

正解RL 训练成本高,等跑完才发现跑偏,几小时甚至几天就浪费了。正确做法是实时监控加自动熔断:梯度范数超阈值就触发降学习率或停止。就像训犬师发现小灰冲向马路必须立刻拉住绳子,而不是等它跑完再复盘。

为何常见:把可视化当作事后分析工具,没有体会实时监控的止损价值。

误区训练好久奖励都是同一个数,是不是奖励太小了?把奖励乘 100,学得就快了。

正解奖励恒定的根因通常是环境 bug:done 条件写反、reward 计算写死、状态更新遗漏。先给环境写小测试,确认奖励有变化再谈缩放。如果把数值乘 100,只是把错误信号放大 100 倍。就像你认为小灰嫌零食不香,其实是它面前根本没有飞盘。

为何常见:把“数值大小”当成了“学习动力”,忽略了信号本身的有无。

误区我的回报曲线又高又平,训练完美收官,策略一定非常聪明。

正解高回报可能是 reward hacking——agent 钻了奖励漏洞作弊拿分。必须做策略审查:采样轨迹亲眼看、统计动作分布、检查状态覆盖。小灰可能学会了偷零食袋而不是接飞盘,回报很高,但绝不是你要的行为。

为何常见:只盯汇总指标,不验证行为本身,是 RL 调试中最昂贵的疏忽。

面试题

Q1. 下面哪个指标最直接衡量强化学习 agent 本轮表现的好坏?

单选题 · easy

  • A.策略网络的层数
  • B.回报平滑曲线走势← 正确答案
  • C.训练时的 batch 大小
  • D.环境的观测维度数

答案:B。episode 回报是环境给 agent 的本轮总成绩单,相当于小灰这轮拿到的全部零食折算。网络层数、batch、观测维度都是配置参数,不直接反映表现好坏,因此 B 正确。

Q2. 在回报曲线上看到单轮突然冲高或暴跌,应当怎么做?

单选题 · easy

  • A.立即停止训练
  • B.判定训练已成功
  • C.平滑处理看趋势← 正确答案
  • D.调大学习率再试

答案:C。单轮波动是探索随机性造成的,就像小灰某次超常发挥或突然后腿抽筋。正确做法是用 EWMA 平滑后看大趋势,而不是被单次数据牵着走,因此选 C。

Q3. 训练日志中出现 loss = NaN,第一反应应该是什么?

单选题 · easy

  • A.立即重启整个训练
  • B.查看梯度与学习率← 正确答案
  • C.减小 batch 继续练
  • D.更换随机种子再练

答案:B。loss 出现 NaN 最常见的根源是梯度爆炸或学习率过大。先看 grad_norm 是否爆表,再降低学习率并启用梯度裁剪,这如同小灰突然抽搐时先确认它吃了什么,而不是盲目重训,因此选 B。

Q4. 关于梯度裁剪的作用,下列说法正确的是?

单选题 · mid

  • A.防止梯度范数爆炸← 正确答案
  • B.消除模型过拟合
  • C.显著加快数据收集
  • D.替代奖励归一化

答案:A。梯度裁剪等价于给更新步长绑上牵引绳,防止梯度爆炸时一步撞飞参数。它不解决过拟合、不加速数据收集、也不能替代奖励归一化,因此选 A。

Q5. 训练日志中梯度范数从 0.1 持续增长到 1e6,最可能发生了什么?

单选题 · mid

  • A.模型正在正常收敛
  • B.梯度即将发生爆炸← 正确答案
  • C.奖励正在趋于恒定
  • D.策略正在发生坍缩

答案:B。梯度范数持续增大是网络去往“爆炸”方向的预警信号,就像小灰越跑越快即将失控。正常收敛时范数应平稳或下降,因此选 B。

Q6. TensorBoard 中 smoothing(平滑)参数的底层原理是什么?

单选题 · mid

  • A.对曲线傅里叶变换
  • B.指数移动平均计算← 正确答案
  • C.使用卡尔曼滤波处理
  • D.滑动窗口回归拟合

答案:B。TensorBoard 的 smoothing 就是正文第二节讲的 EWMA:新值 = α × 当前值 + (1-α) × 旧平滑值。曲线毛糙时把平滑系数调高到 0.9,趋势更清楚,因此选 B。

Q7. 某 agent 回报曲线又高又平,但行为录像显示它在原地转圈刷分,这种问题属于?

单选题 · mid

  • A.梯度爆炸已经发生
  • B.奖励恒定导致停滞
  • C.奖励钻空子的行为← 正确答案
  • D.状态覆盖不够充分

答案:C。回报高但行为异常是 reward hacking 的典型症状——小灰叼走零食袋,分数好看但完全偏离训练目标。梯度爆炸、奖励恒定、状态覆盖不足都不是对“分数好看但行为错”的最佳描述,因此选 C。

Q8. 判断 RL 训练是否收敛,下列做法正确的有哪些?

多选题 · mid

  • A.看平滑回报曲线← 正确答案
  • B.算近期回报标准差← 正确答案
  • C.对比最优水平线← 正确答案
  • D.只关心单次回报

答案:ABC。判断收敛要看平滑趋势、近期回报的标准差、以及和理论最优值的对比。单次回报噪声太大,不能说明问题——就像判断小灰是否学会要看最近十轮平均水平,而不是某一次碰巧接住五个盘子。

Q9. 下列哪些现象可能是梯度爆炸导致的?

多选题 · hard

  • A.损失函数变成 NaN← 正确答案
  • B.梯度范数急剧飙升← 正确答案
  • C.曲线呈现断崖下跌← 正确答案
  • D.动作概率趋于均匀

答案:ABC。梯度爆炸的典型现象包括 loss 变 NaN、grad_norm 指数级飙升、训练曲线断崖式崩盘。动作概率趋于均匀通常是熵过高或探索过度,和梯度爆炸没有直接因果关系,因此排除 D。

Q10. PPO 训练中回报稳定但动作熵从 1.2 骤降到 0.02,正确的应对有哪些?

多选题 · extreme

  • A.调大熵正则系数← 正确答案
  • B.检查策略是否坍缩← 正确答案
  • C.把学习率降为零
  • D.增加动作探索噪声← 正确答案

答案:ABD。熵骤降是策略坍缩的典型信号,像小灰突然只会做同一个动作。调大熵系数、检查策略是否坍缩、增加探索噪声都是正确手段;把学习率降为零等于完全停止学习,属于错误操作。