想象你是一位餐厅主厨,拿到一份很有潜力的新菜谱,但菜谱上只写了主干步骤,火候大小、调料多少、放盐时机统统没写。你必须自己试出来,才能让这道菜每天稳定出品。强化学习工程师面对的就是同样的处境:算法框架(PPO、SAC)是菜谱,而超参数(学习率、折扣因子、熵系数、batch size、网络结构)就是那一堆等待定夺的“火候”和“调料”。调好了,模型一个晚上学会走路、打游戏、控制机器人;调差了,训练三周曲线纹丝不动,或者刚跑到一半就崩盘重来。 更麻烦的是,RL的超参比普通机器学习敏感得多——回报信号是非平稳的,环境本身在变,你调参时动一个数字,可能让整个训练从天堂掉进地狱。这篇文章将跟随主厨小川的研发日志,把超参数一个个拆开:它们各自控制什么、起手值怎么设、按什么顺序调、用网格搜索还是贝叶斯优化、最坑的陷阱是什么。读完你就能像老厨师一样,闻到味儿就知道下一步该放什么。
对 AI 从业者而言,调参是 RL 工程师的“灶台手艺”:掌握超参机制与系统调优流程,能让你的模型从“能跑”变成“稳定产出先进结果”,这是拉开初级与资深算法工程师差距的核心竞争力。
目录
可视化演示
展示Hardhat与Truffle智能合约开发框架的工作流程,包括Solidity编译、测试与部署的核心环节,直观理解DApp开发工具链的运行机制。
本节配有交互动效(进入视口后自动加载,约 3KB)。
Hardhat/Truffle开发框架 Hardhat:TypeScript原生支持,插件系统灵活,内置Solidity调试器 Truffle:成熟生态,合约迁移管理完善,Ganache本地链集成 共同流程:Solidity编译→单元测试→本地部署→主网上线 Workflow = Compile(.sol) → Test(Mocha) → Deploy(Migration) 开发框架提供从编写到部署的完整工具链
第1节 学习率精调
主厨小川研发新菜时有个习惯:每尝一口,就往锅里调整一点点调料。问题是“一点点”到底是多少。加多了,这一锅彻底咸死,只能倒掉重来;加少了,反复尝了五十次,味道还是原地踏步。学习率 α 在强化学习中扮演的正是这个角色——它决定每次看到训练信号后,策略网络的参数往“更好”的方向迈多大一步。
代码层面,策略网络输出动作的概率分布,环境返还回报,算法算出梯度 ∇J(θ)——一个指明“参数往哪个方向调能提高期望回报”的箭头。学习率就是给这个箭头乘上的缩放系数。RL 和监督学习的最大差异在于:回报信号是非平稳的,这个箭头本身忽左忽右,噪声很大,所以学习率通常要比 CV 任务更保守。Adam 优化器搭配 PPO 时,起手值常取 1e-4~3e-4;SAC 可略微放宽到 3e-4~1e-3。如果训练的 return 曲线像过山车一样剧烈震荡,先别急着改别的,把学习率砍半往往立竿见影。
火候的哲学就是:小川真正端上桌的菜,从来不是靠一次性猛火催出来的。学习率调小一点,多让模型“多尝几口”,很多看似玄学的 RL 失败案例,其实只是步子迈太大了。
- 当前参数θ_t 表示第 t 步训练时,策略网络里所有可学习的权重和偏置。
- 梯度方向∇_θ J(θ_t) 是一个向量,指向让期望回报 J 上升最快的方向。
- 步长控制α 是学习率,它把梯度向量缩放成合适的更新幅度,防止一步迈过头。
- 参数更新新参数等于旧参数加上缩放后的梯度,这就是一次完整的梯度上升。
第2节 折扣因子选择
小川做的是正经宴席,不是街边快餐。设计一道招牌菜时,他得决定:评价这道菜好不好吃,是只看入口的第一口,还是要把前菜、主菜、收尾甜点的整体体验都算进来?这就是折扣因子 γ 的取舍。γ 决定策略优化时智能体愿意为“未来的回报”付出多少注意力。
技术上说,RL 目标函数里的回报不是单步奖励,而是一条轨迹上所有即时奖励的加权和。γ 越接近 1,远处奖励被保留得越多,智能体越“深谋远虑”;γ 越小,智能体越急功近利,只顾眼前几步。看起来“越远视越好”?未必。γ 接近 1 会让回报的方差急剧膨胀——未来充满不确定性,你把遥远的奖励也算得那么重,梯度信号就会被噪声淹没。短回合任务(如走迷宫、单步决策)常用 0.9~0.95;长时程任务(如机器人走 1000 步、打整局游戏)用 0.99~0.995。γ 是刻画任务本身结构的参数,它错了,后面调什么都像是在错误地基上盖楼。
小川的宴席菜单总是先定“宴席规格”——是三道菜的快餐还是十道菜的盛宴,这决定了每道菜在整体体验中的分量。折扣因子就是 RL 里的“宴席规格”,务必要在动手调其他参数之前想清楚。
- 未来奖励R_{t+k+1} 表示往后第 k+1 步拿到的即时奖励。
- 折扣权重γ^k 让越远的奖励权重越小,γ=0.99 时第 100 步奖励的权重只剩约 0.37。
- 累加求和把从当前开始的所有折扣奖励全部加起来,构成轨迹回报。
- 总回报G_t 就是智能体在状态 t 之后追求的“折扣化长远收益”。
第3节 熵系数控制
小川给新菜定完火候和宴席规格后,还得决定一件事:要不要在菜谱里给厨师留一点临场发挥的自由?如果菜谱把每步操作写得死死的,厨师永远按同一种方式翻锅,出品稳定但毫无惊喜;如果完全放飞,厨师天马行空,今天的菜和明天的菜可能完全是两个物种。熵系数 β 就是 RL 里控制“临场发挥自由度”的旋钮。
策略熵衡量策略输出动作分布的随机程度:分布越平坦,策略越随机,探索性越强。训练目标会在原始回报之外加上一项熵的加权,鼓励策略保持一定随机性,防止过早收敛到局部最优。PPO 中熵系数初始值通常取 0.01~0.1;SAC 算法更进一步,它让温度系数自动调节——探索多了就自动收紧,探索少了就自动放松。熵系数设太大,策略一直“疯疯癫癫”随机乱走,奖励曲线迟迟上不去;设太小,策略过早固步自封,困在差动作里出不来。
自由度是一道菜的灵气所在,但小川深知:创新要在可复制的框架内发生。熵系数调得好,模型既不会变成复读机,也不会变成失控的即兴艺术家。
- 策略分布π(a|s) 表示智能体在状态 s 下选择动作 a 的概率。
- 信息量log π(a|s) 反映了“看到这个动作发生”带来的信息量,概率越小信息量越大。
- 加权求和把所有动作的概率乘以信息量再加负号,得到该状态下策略的熵。
- 熵的意义分布越均匀,H 值越大,策略的探索性越强。
第4节 批次规模设定
后厨试菜有个现实约束:一道菜做好后,得分几批端给食客尝。一次只端一碟,意见收集得慢,而且单个食客的口味偏见可能误导你;一口气端五十碟,意见是平均了,但后厨得等很久才能集齐一轮反馈,改菜速度就慢了。RL 中的 batch size 正是“一次端多少份经验上桌”。
训练时,算法从经验池里抽出一批 transition(状态、动作、奖励的转移记录),用这批样本的平均梯度来更新策略。直觉上,批量越大梯度越准——这没错,方差确实随批次增大而下降。但 RL 里批次并非越大越好:样本来自非平稳环境,大批次会稀释近期经验,让策略反应迟钝;更现实的是,显存和计算资源有限。PPO 中经验采集和梯度更新分离,常用 256~4096;SAC 这类 off-policy 算法常用 256。调 batch 时观察两个信号:更新后回报是否平滑上升(批次适中),以及训练是否像“醉酒”一样剧烈抖动(批次太小)。
小川最后定下的上菜节奏是:既不能等到客人走光了才收集完意见,也不能只听一两位客人的片面之词。批次的智慧,是在反馈频率与反馈质量之间找到平衡。
- 单样本梯度方差σ_g² 描述单条 transition 算出的梯度有多不稳定。
- 批次大小B 是一次参数更新实际使用的样本条数。
- 方差反比关系批次越大,平均梯度的波动按 1/B 比例被压平。
- 权衡点方差小不等于效果好,大 batch 让训练稳定但可能错过对新鲜经验的快速响应。
第5节 网络结构配置
小川的餐厅后厨不大,但他见过太多同行:一上来就买了一整套顶级不锈钢设备,结果大部分机器常年吃灰,还占地方。网络结构之于 RL 就像后厨设备——够用、顺手、能快速出菜才是关键。很多刚入门的人习惯把 CV 领域那套“网络越深越宽越好”的直觉搬过来,这在 RL 里往往是灾难。
策略网络和价值网络的常见配置是两层 MLP,每层 256 或 512 个神经元,足以处理 MuJoCo、Atari 等一大票标准环境。网络过深过宽会带来三个问题:训练更慢、更容易过拟合当前经验、对超参数更敏感。激活函数首选 ReLU(中间层),输出层根据动作空间选 Tanh(连续动作)或 Softmax(离散动作)。另一个实用技巧是输入特征归一化——把观测标准化到零均值单位方差,能显著提升训练稳定性。在扩大模型之前,务必先在简化版环境或小预算下验证训练流程本身没问题。
小川的经验之谈是:好餐厅的招牌菜靠的是对火候和食材的理解,而不是堆设备。先跑通一个小网络,再按需加宽加深,是 RL 工程中最省心省力的路径。
- 上一层输出h^{(l-1)} 是前一个隐藏层产出的特征向量。
- 线性变换W^{(l)} 和 b^{(l)} 是本层的权重矩阵与偏置,完成一次仿射映射。
- 激活函数ReLU 把负值压成 0、正值原样保留,引入非线性表达能力。
- 本层输出h^{(l)} 作为下一层的输入,层层堆叠构成整个网络。
第6节 调参顺序策略
小川研发新菜有条铁律:先定食材清单,再定烹饪流程,最后才琢磨摆盘装饰。如果一上来就纠结盘边那朵萝卜花,食材却选错了,整道菜注定失败。超参数的调整同样有严格的优先级顺序——这不是玄学,因为超参数之间存在依赖关系,某些参数选错,会让其他参数的调优结果失去意义。
推荐的顺序是:第一步先定“环境相关参数”——折扣因子 γ 和奖励结构,它们定义了任务的目标函数,错了则全盘皆错;第二步调“训练核心参数”——学习率 α 和 batch size,它们决定梯度信号能否被有效利用;第三步才是“正则与细节参数”——熵系数 β、GAE 的 λ、PPO 的 clip 范围 ε。明白这个顺序,你还需要一个纪律:每次只动一个参数。只有单变量变化,你才能把训练结果的改善或恶化归因到具体某个旋钮上。RL 训练本身噪声就大,同时改三个参数,你永远不知道是哪个改动起了作用。
做菜的因果链决定了下锅顺序:食材定了味道上限,火候决定能否逼近上限,摆盘只是锦上添花。调参也一样,顺序对了,每次调试都在积累可复用的经验。
- 策略损失L_clip(θ) 负责更新策略网络,让动作概率向着更优方向移动。
- 价值损失L_value(θ) 训练价值网络估计状态价值,是策略更新的“评分标尺”。
- 熵正则项-c_2 H(π_θ) 鼓励策略保持探索,系数 c_2 就是熵系数。
- 权重系数c_1、c_2 控制三个目标的相对重要性,也是超参数调优的一部分。
第7节 搜索方法抉择
当新菜涉及的变量太多,小川就不能靠一双手慢慢试了,他需要一套“试菜方法论”。最笨的办法是把所有调料组合成一张大表,挨个试——这就是网格搜索。问题是:如果有 5 个参数,每个取 10 档,组合数是 10 的 5 次方,一辈子也试不完。随机搜索聪明一点,在参数空间随机撒点,高维下比网格更高效,因为它不会把预算浪费在“均匀覆盖”上。而贝叶斯优化是请了一位“食评家”:每试完一道菜,食评家就更新对各参数区域的判断,下道菜专挑最有希望的区域试。
贝叶斯优化的核心是用一个代理模型(通常高斯过程)拟合“超参数到回报”的关系,然后用采集函数决定下一个采样点。采集函数在高回报区域(利用)和不确定区域(探索)之间做权衡。网格搜索适合参数少、预算充足、可大规模并行的场景;贝叶斯优化适合预算在 20~50 次、每轮训练很贵(如机器人训练、大模型 RLHF)的场景。好消息是 Optuna 这类工具已经把贝叶斯优化封装得很友好,你只需要定义搜索空间和目标函数。
小川很感谢这位“食评家”——它让每次试菜的预算都花在刀刃上,而不是在地图上漫无目的地兜圈子。
- 候选参数x 是一个待评估的超参组合,比如 (学习率,折扣因子,熵系数)。
- 预测均值μ(x) 是代理模型对“该参数组合能拿多少回报”的当前估计。
- 不确定性σ(x) 是代理模型对该估计的信心程度,没试过的区域 σ 大。
- 权衡系数κ 大则偏爱探索未知区域,κ 小则死磕已知高回报区域。
第8节 调参陷阱规避
餐厅开久了,小川见过太多后厨翻车现场:有厨师一口气往锅里加了五种调料,结果菜咸了,愣是不知道是哪瓶酱油的问题;有厨师只让一位熟客试菜就断定菜品优秀,换一桌客人全砸了;还有厨师死磕某一道菜,把餐厅所有食材都耗在这道菜上,结果环境一换直接歇业。这些正是 RL 调参最常见的四大陷阱。
第一,同时调多个参数——梯度信号里混入了太多变量,你无法归因,这违背了第 6 节讲的单变量纪律。第二,忽视随机种子——RL 对种子极其敏感,同一配置换一个种子,回报能差出几个标准差。只跑一个 seed 就下结论,相当于只让一个食客评价菜品。第三,在单一环境上过度调优——反复针对某个测试环境精调,相当于为了一道菜把整个菜单绑架了,换环境就失效。第四,忽略热启动——如果之前有个训练到一半的模型,完全可以加载它继续调参,从零开始训练既慢又引入了新的随机性。多 seed 评估是验证超参效果的基本素养。
小川最终总结出一套“开店哲学”:调料一次只改一味,评价要多请几桌客人,菜单要能应对不同季节,老汤底子要懂得续用。做到这四点,后厨才配谈稳定出品——RL 项目也才配谈稳定产出。
- 回报标准差σ_J 表示同一超参配置在多个种子下最终回报的波动程度。
- 种子数量N 是独立重复训练的随机种子数。
- 标准误公式均值估计的误差随 N 增大而变小,4 个种子能把误差减半。
- 工程含义SEM 小才说明超参效果可靠,否则只是某次运气的产物。
AI 应用场景
场景一:游戏 AI 的快速调参
阶段:超参数优化 / 模型训练效率提升
解决的问题:游戏公司在训练 NPC(非玩家角色)时,传统做法是算法工程师手动试学习率和折扣因子,一个组合训练要十几个小时,试几轮就一周过去了。手动调参还常常因为两个参数同时改而搞不清是谁的功劳。
具体案例:某 MOBA 游戏训练英雄对战 AI,工程师先用 Optuna 做贝叶斯优化,搜索空间限定为学习率 1e-4~3e-4、折扣因子 0.95~0.995、熵系数 0.01~0.05,预算 30 次。相比之前网格搜索需 100 次,最终以三分之一预算找到更优配置,胜率提升了 12%。
场景二:机器人步态策略的稳定落地
阶段:策略训练与仿真到真机迁移
解决的问题:四足机器人步态策略训练成本极高,每一次仿真训练都消耗大量 GPU 算力。团队按“先环境参数、再训练参数、后正则细节”的顺序,先用 γ=0.99 锁定长时程任务框架,再单变量微调学习率,避免了多参数同改导致的归因混乱。
具体案例:机器人公司训练后空翻策略时,先跑 5 个随机种子确认基线回报稳定,再用贝叶斯优化调整学习率和批大小,最终把训练周期从两周压缩到五天,且 sim-to-real 迁移成功率从 60% 提升到 85%。
场景三:推荐系统模拟环境中的策略评估
阶段:离线策略评估与超参验证
解决的问题:用强化学习做推荐排序时,线上 A/B 测试太贵,只能在模拟环境里先调参。但模拟环境与真实环境存在偏差,直接按单次模拟结果调参容易过拟合模拟器。
具体案例:电商平台推荐团队用日志数据训练用户模拟器,在调参流程中强制要求“每个超参组合跑 5 个不同随机种子、取 SEM 最小的组合”,并预留 10% 训练预算用于热启动续训。新策略上线后 CTR 提升 3.4%,且周级波动显著降低。
Python 演示
"""对比:网格/朴素均匀搜索 vs UCB贝叶斯优化调超参(模拟黑盒)."""import mathimport random def simulate_return(lr, gamma, entropy): """模拟一次RL训练后的最终回报(带噪声黑盒函数). 真实最优在学习率约1e-3、gamma约0.98、熵系数约0.05附近.""" lr_log = math.log10(lr) x = -(lr_log + 3.0) ** 2 / 0.01 y = -(gamma - 0.98) ** 2 / 0.00004 z = -(entropy - 0.05) ** 2 / 0.001 return 100.0 * math.exp(x + y + z) + random.gauss(0.0, 2.0) class UCB: """最简贝叶斯优化风格搜索器:高斯过程近似+UCB采集函数.""" def __init__(self, bounds): self.bounds = bounds self.history = [] self.values = [] def propose(self, kappa=1.5): best_x, best_s = None, -1e9 for _ in range(300): cand = [random.uniform(a, b) for a, b in self.bounds] score = self._ucb(cand, kappa) if score > best_s: best_x, best_s = cand, score return best_x def add(self, x, y): self.history.append(x) self.values.append(y) def _ucb(self, x, kappa): """用最近邻距离近似高斯过程的均值与方差.""" if not self.history: return random.random() dist = [] for xi, yi in zip(self.history, self.values): d2 = sum((a - b) ** 2 for a, b in zip(xi, x)) dist.append((d2, yi)) dist.sort(key=lambda t: t[0]) mu = dist[0][1] sigma = math.sqrt(max(0.0, dist[1][0] - dist[0][0])) if len(dist) > 1 else 1.0 return mu + kappa * sigma def uniform_budget_search(budget): """朴素均匀搜索:没有反馈利用,近似网格/随机搜索.""" best = (0.0, None) for _ in range(budget): lr = 10 ** random.uniform(-4.5, -2.5) gamma = random.uniform(0.9, 0.999) entropy = random.uniform(0.0, 0.2) r = simulate_return(lr, gamma, entropy) if r > best[0]: best = (r, (lr, gamma, entropy)) return best def ucb_budget_search(budget): """UCB贝叶斯优化:每次按采集函数选点,并更新模型.""" searcher = UCB([(1e-4, 3e-3), (0.9, 0.999), (0.0, 0.2)]) best = (0.0, None) for _ in range(budget): x = searcher.propose() y = simulate_return(*x) searcher.add(x, y) if y > best[0]: best = (y, x) return best if __name__ == "__main__": random.seed(42) budget = 25 g_best = uniform_budget_search(budget) u_best = ucb_budget_search(budget) print("均匀搜索最好回报: %.2f" % g_best[0]) print("UCB搜索最好回报: %.2f" % u_best[0]) print("UCB找到配置: lr=%.5f gamma=%.3f entropy=%.3f" % u_best[1])
def simulate_return(lr, gamma, entropy)用高斯形状黑盒函数模拟一次 RL 训练的最终表现,真实最优值故意设在常见推荐值附近,让搜索有“宝藏”可挖。random.gauss(0.0, 2.0)给模拟回报加测量噪声,还原 RL 训练中“同一参数跑两次结果不同”的真实感。self.history` / `self.values记录每一次已评估的超参组合与回报,这是贝叶斯优化的“记忆”,让后续采样有据可依。def propose(self, kappa=1.5)采集函数在参数空间随机生成 300 个候选,用 UCB 分数挑出最值得一试的那个。def _ucb(self, x, kappa)用最近邻距离近似高斯过程的均值与方差,距离近的历史点贡献高相关度。uniform_budget_search完全没有反馈利用,每次都随机撒点,代表网格/随机搜索这一类“一顿乱试”风格。ucb_budget_search每评估一次就把结果记入记忆,下一次采样自动避开差区域、聚焦好区域,实现“越调越准”。
常见误区
误区我总觉得学习率就像跑步速度,设大一点,模型就能更快收敛。于是我直接把学习率调到 0.01,结果训练曲线像过山车一样上下乱窜,我还以为是环境奖励设计有问题,调了一周奖励函数。其实锅大概率在学习率上。
正解学习率是“步长”而非“速度”。步长太大,参数更新会越过最优区域,在附近来回震荡甚至发散;RL 的梯度噪声本来就大,大学习率会被噪声放大到完全失控。正确做法是从 3e-4 这类安全值起步,若曲线震荡剧烈,优先把学习率砍半观察。
为何常见:监督学习里偶尔用较大学习率配合学习率调度也能收敛,给人留下“大学习率=快”的直觉,但忽略了 RL 非平稳目标带来的噪声放大效应。
误区网上很多 RL 示例代码都写 gamma=0.99,我也就照抄,不管任务是什么。后来训练一个每回合只有十几步的简单导航任务,发现回报方差特别大,明明是很简单的任务,策略却一直不稳定。
正解折扣因子必须匹配任务的时间尺度。短回合任务里,如果 γ 设成 0.99,未来十几步的奖励几乎全被保留,方差被不必要的长远预测放大;而任务本身根本不需要那么长的视野。短任务用 0.9~0.95,长时程任务才用 0.99 以上。
为何常见:公开代码库大多跑的是长时程基准环境,0.99 是这些环境的经验值,被初学者当成万能默认值带走,忽略了任务结构假设。
误区我为了“不漏掉最优解”,把学习率、折扣因子、熵系数、batch size、网络层数全都放进网格里,每维取十档,觉得枚举得越细越不可能错过好参数。结果训练了整整一个月,预算耗尽也没试完组合。
正解网格搜索在参数维度升高时会遭遇组合爆炸——5 个参数各 10 档就是 10 万次训练。且网格均匀采样在低维高效,高维时随机搜索或贝叶斯优化更有优势。正确的姿势是:先用贝叶斯优化锁定期望区域,再在最优区域附近做小网格精修。
为何常见:人类天然偏好“系统全面”的枚举思维,但在高维空间里,“全面”本身就是一个不可能完成的任务,“智能地不全面”才是工程现实。
误区训练一次 RL 要好几个小时,跑多个种子太奢侈了。我觉得只要这个超参组合跑出来的曲线好看,就说明它效果好。结果提交评估时换了环境初始化,效果直接对半砍。
正解RL 对随机种子的敏感度高到令人发指,一次训练结果可能只是“幸运样本”。同一配置至少跑 3~5 个种子,用回报均值和标准误(SEM)来判断。SEM 大说明配置本身不稳定,哪怕均值高也不可轻信。多 seed 验证是 RL 调参的基本职业素养。
为何常见:监督学习中数据量大、评估相对稳定,单次训练结果的可靠性较高,把这种习惯迁移到 RL 就踩了坑。
误区我看到别人的 Transformer 策略网络在复杂环境表现好,也立刻把手上的两层 MLP 换成又深又宽的 Transformer,结果训练速度慢了十倍,回报反而更差。我觉得是训练技巧不行,又开始调学习率。
正解RL 的训练信号比监督学习稀疏得多,大模型在小样本条件下极易过拟合当前经验,且对超参数更敏感。标准做法是先用两层 MLP 256 宽验证任务可行性,确认存在可学习的策略后再渐进式扩网络,同时配合更大预算和更保守的学习率。
为何常见:深度学习时代“大模型=强能力”的直觉深入人心,但 RL 中支配效果的往往是样本效率和探索问题,模型容量只是瓶颈之一,不是越强越好。
面试题
Q1. 强化学习中学习率 α 的核心作用是什么?
- A.控制每步参数更新幅度← 正确答案
- B.决定折扣因子的数值
- C.调整熵系数的衰减速度
- D.控制回放缓冲的大小
答案:A。学习率是策略参数沿梯度方向的步长,α 越大每步参数挪动越多。B/C/D 描述的是折扣因子、熵系数和回放缓冲这些其他组件,与学习率无关。主厨试菜时“每次加多少调料”,就是学习率。
Q2. 折扣因子 γ 接近 1(如 0.99)时,智能体的行为倾向于?
- A.只关注当前即时奖励
- B.更看重长期累积回报← 正确答案
- C.完全忽略未来奖励
- D.只使用离线数据训练
答案:B。γ 越接近 1,未来奖励的折扣权重衰减越慢,智能体越“远视”。γ 小才只顾眼前奖励,C 是 γ=0 的极端情况,D 与折扣因子无关。像主厨考虑整桌宴席体验而非只看第一口菜。
Q3. 在每回合只有十几步的短任务中,折扣因子 γ 的合理选择是?
- A.0.9 左右的较小值← 正确答案
- B.越接近 1 越好
- C.必须严格等于 0
- D.不需要设置该参数
答案:A。短任务未来视野有限,γ 设太大(接近 1)会让回报方差被不必要的远期预测放大,训练不稳定。0.9 左右足够覆盖十几步的规划范围。γ=0 只看当前步,丢失决策深度;γ 是 RL 标准必选超参,不可能不设置。
Q4. 熵系数 β 设置过大时,策略会出现哪些情况?
- A.动作选择更倾向随机← 正确答案
- B.训练过程绝对稳定
- C.收敛后熵值依然偏高← 正确答案
- D.立即过拟合训练环境
答案:AC。β 过大意味着熵正则权重太高,策略被强烈鼓励保持随机,表现为“一直乱走”不收敛,收敛后也维持高熵(C)。随机性强反而使训练更不稳定(B 错);过拟合是熵过小导致过早固化时的现象(D 错)。
Q5. 网格搜索调参最主要的缺点是?
- A.参数维度增加时组合数爆炸← 正确答案
- B.完全无法利用历史评估结果
- C.结果方差永远为零
- D.在低维时比贝叶斯优化更差
答案:A。网格搜索均匀铺满参数空间,维度从 3 维升到 5 维,每维 10 档就从 1000 次变 10 万次。B 描述也很负面,但“无法利用历史”是网格与贝叶斯的本质差异之一,题目问“最主要缺点”指维度灾难。低维时网格未必比贝叶斯差,C 明显错误。
Q6. 贝叶斯优化中 UCB 采集函数的系数 κ 控制什么?
- A.探索与利用的平衡程度← 正确答案
- B.学习率的衰减速率
- C.折扣因子的取值范围
- D.策略网络的隐藏层宽度
答案:A。UCB = μ(x) + κσ(x),均值项代表利用(已知高回报区域),方差项代表探索(未充分评估区域),κ 是二者的权重。κ 大偏爱探索,κ 小偏爱吃老本,和学习率、折扣因子、网络宽度无关。
Q7. 以下哪些属于 RL 调参中的常见陷阱?
- A.同时修改多个超参数导致无法归因← 正确答案
- B.只用单个随机种子评估配置效果← 正确答案
- C.在单一环境上反复精调导致过拟合← 正确答案
- D.每次只改变一个参数进行诊断
答案:ABC。调参铁律是“一次只动一个变量”以便归因(A 是陷阱)。单 seed 评估被 RL 的种子敏感性坑害(B 是陷阱)。单一环境精调会让策略丧失泛化能力(C 是陷阱)。D 是好习惯,不是陷阱。
Q8. 调参时应优先确定折扣因子 γ 和奖励结构,主要原因是?
- A.它们定义了任务的目标函数← 正确答案
- B.它们是最容易调到最优值的
- C.它们对学习率完全没影响
- D.它们的取值固定为全局常数
答案:A。γ 和奖励结构共同刻画了 MDP 的目标语义——智能体在为什么而优化,错了则后续学习率、batch 的调优都建立在错误地基上。它们不是“容易调”或“固定常数”,且通过回报尺度间接影响梯度,B/C/D 均错。
Q9. RL 中网络结构配置的合理做法有哪些?
- A.优先使用小而浅的 MLP← 正确答案
- B.直接用最大最深的网络
- C.在简化原型上验证再扩展← 正确答案
- D.隐藏层越宽必然效果越好
答案:AC。RL 训练信号稀疏,小网络优先(A)能降低过拟合和调参难度;先在小环境验证可行性再渐进扩网络(C)是工程正道。B 和 D 是“大即好”的误区,大网络在 RL 中往往更慢且更敏感。
Q10. 用 N 个随机种子评估超参配置时,回报均值标准误 SEM 的计算公式是?
- A.SEM = σ_J / √N← 正确答案
- B.SEM = σ_J × √N
- C.SEM = √(σ_J) × N
- D.SEM = σ_J² / N
答案:A。标准误是标准差除以样本数的平方根,反映均值估计的可靠程度。N=4 时 SEM 减半,N=16 时只剩四分之一。B 弄反了分母,C 和 D 的运算维度都不对。多条 seed 验证就是让“多请几桌客人试菜”,SEM 越小结论越可信。