想象一下,你要训练一只导盲犬:你不会在纸上写满公式教它“看懂红绿灯”,而是把它带到真实的训练场,让它用眼睛观察路口,用四肢尝试迈步,走对了给一块肉干,险些撞车就轻轻拉住它。反复练习几百个回合后,狗狗自己就学会了“红灯停、绿灯行”。Unity ML-Agents干的正是这件事——它把强化学习训练管线直接嵌入Unity游戏引擎,让虚拟世界里的NPC、机器人或自动驾驶汽车像那只导盲犬一样,通过不断试错与环境交互,自主进化出聪明行为。你负责搭建“训练场”(Unity场景)、给狗狗装上“感官与四肢”(观测与动作)、制定“赏罚守则”(奖励信号),剩下的重复练习就交给训练器。这套管线已广泛应用在游戏AI、自动驾驶仿真与机器人控制中,是AI从业者把算法落进真实交互场景的桥头堡。
掌握Unity ML-Agents,意味着你既能写强化学习算法,又能把算法训练成看得见、摸得着、能跑进游戏与仿真世界的智能体,是算法工程师走向全栈AI应用的必修课。
目录
可视化演示
展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。
本节配有交互动效(进入视口后自动加载,约 3KB)。
系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T
MLAgents概览:把训练场搬进引擎
导盲犬训练需要一块围起来的空地、一只狗、一位训练师和一套赏罚规则。Unity ML-Agents把这三样东西原封不动搬进了游戏引擎:空地就是Unity场景,狗就是智能体(Agent),训练师就是内置的强化学习算法,赏罚规则就是你编写的奖励信号。而引擎本身扮演的角色,是让“空地”能实时响应狗的一举一动——狗狗迈出一步,场景里的光影、碰撞、物理反馈就跟着更新,形成一个永不停歇的交互闭环。
在这个闭环里,智能体每时每刻都在做三件事:看(观测当前状态)、想(根据策略选择一个动作)、挨罚或领赏(环境返回新状态和奖励)。Unity负责把这三件事串成每秒几十帧的流畅循环,这比在纯Python环境里训练多了一层真实感——物体的重力、碰撞、遮挡都真实存在,训练出来的策略天然适应物理世界。
所谓三大核心组件,对应ML-Agents工具包里的三块拼图:环境通信层(让Unity与Python训练器对话)、智能体框架(Agent脚本,帮你定义观测、动作和奖励)、训练器(内置PPO等算法,负责更新“狗脑”里的网络参数)。三者合起来,就是一套开箱即用的强化学习训练管线。
在Unity里,这个数学世界被具象化成可视化的训练场。你会发现,强化学习并非玄学——它就是给“狗脑”装上一个数学记分牌,让每一次尝试都有据可查。
- 状态集合 \(S\)智能体可能身处的一切处境,相当于导盲犬在训练场上遇到的所有路口、台阶和行人的排列组合。
- 动作集合 \(A\)智能体可执行的所有行为,对应狗狗的“前进、左转、停下”等指令库。
- 状态转移概率 \(P\)执行某个动作后环境变化到下一状态的概率,比如雨天路面湿滑,狗狗“急停”也可能滑出半步。
- 奖励函数 \(R\)环境对动作的即时反馈,走对给肉干,走错被轻拽。
- 折扣因子 \(\gamma\)权衡眼前利益与长远回报,越接近 1 越看中未来,越接近 0 越急功近利。
环境搭建:布置狗狗的训练操场
训练导盲犬之前,你得先把操场围好、路障摆好、终点插上小红旗。在Unity里,这一步叫环境搭建:创建包含地面、障碍物、目标点、可交互物体的场景,再挂上物理碰撞体,让一切都遵循重力与碰撞规则。别忘了给场景命名一个Behavior(行为名称),它是训练器与场景之间的“电话号码”,指定了这场训练由谁来观察、由谁来决策。
环境搭好后,还要写一份训练器配置(trainer_config.yaml)。这份配置文件相当于狗狗的训练计划表:每个回合最多跑多久(max_steps)、学习率设置多少(learning_rate)、探索的随机程度如何(entropy)。ML-Agents正是靠这份配置来告诉训练器“这堂课怎么上”。配置合不合理,直接决定狗狗是稳步进步还是原地打转。
最后一步是启动训练:在终端执行 mlagents-learn config.yaml --run-id=first_run,Unity编辑器按下Play,训练就开始了。训练器每收到一批“狗腿子”的跑动数据,就更新一次网络参数,然后把新策略传回环境。如此循环往复,直到奖励曲线趋平。
环境搭建的功夫深浅,决定了训练出的策略是“考试型选手”还是“实战型选手”。地面摩擦系数、障碍物尺寸、光照变化,这些看似不起眼的细节,最终都会写进狗狗对世界的认知里。
- 当前状态 \(s_t\)狗狗此刻站在哪个路口、眼前有没有障碍物。
- 当前动作 \(a_t\)狗狗根据当前状态选择迈左脚还是迈右脚。
- 转移概率 \(P\)环境对动作的响应并不总是确定,湿滑路面会让动作“打折扣”。
- 下一状态 \(s_{t+1}\)动作执行完毕后,狗狗被引擎“传送”到的新位置。
智能体设计:给狗狗装上眼睛与四肢
导盲犬不是天生会看红绿灯的,它需要眼睛(观测)、四肢(动作)和大脑(策略网络)。在ML-Agents里,这三样东西都写在继承自Agent类的脚本中。观测空间决定狗狗能看到什么:可以是周围物体的距离向量(Vector Observation)、一束束射线扫描的距离信息(Ray Perception),也可以是相机图像(Camera Observation)。观测越贴合任务本质,学习越快。
动作空间决定狗狗能做什么:连续动作让角色可以平滑移动转向,适合操纵类任务;离散动作则输出“左转、右转、前进”等指令,适合棋类或格斗游戏。动作维度一多,“狗脑”需要探索的空间就指数膨胀,训练难度陡增。因此,动作设计要克制——能用3个自由度解决,就不要给10个。
在Agent脚本里,你还要重写OnEpisodeBegin(每回合重置时复位狗狗)和OnActionReceived(拿到动作后执行并给予奖励)。决策频率(Decision Frequency)则控制狗狗多久思考一次:频率太高,引擎每秒被决策刷屏,训练变慢;频率太低,狗狗反应迟钝。通常设为5~10步决策一次,兼顾流畅与效率。
设计智能体是一场“知觉与行动”的平衡艺术:给狗狗的眼睛太多花哨信息,它反而抓不住重点;动作库太庞大,它连起步都困难。好的智能体设计,是让狗狗恰好能看清关键线索、恰好够得着目标行为。
- 策略 \(\pi\)狗脑内部那张“看到A情况就做B动作”的对照表,训练的本质就是打磨这张表。
- 条件概率 \(a \mid s\)在观测到状态 \(s\) 时选择动作 \(a\) 的可能性,训练初期接近随机,后期逐渐集中到好动作上。
- 参数 \(\theta\)神经网络的权重集合,相当于狗脑里无数条神经连接的强弱。
奖励机制:制定赏罚分明的训练守则
训练导盲犬最讲究奖励的分寸。稀疏奖励好比只在狗狗成功穿越整条斑马线时给一块大肉干——目标明确但反馈太少,狗狗前期全靠瞎蒙,训练极慢。密集奖励则是在狗狗每靠近目标一步就奖励一小粒狗粮——反馈及时,但若设计不当,狗狗会学会“原地转圈蹭狗粮”这种钻空子行为,这就是著名的奖励黑客(Reward Hacking)。
奖励塑形(Reward Shaping)就是把稀疏的大目标拆解成一连串小步子的艺术:到达终点给高分,靠近终点给低分,撞车给负分。同时要保证奖励“平稳”,忌大起大落,否则训练曲线会剧烈震荡,像情绪不稳定的训练师让狗狗无所适从。
回合终止条件同样重要:什么时候这一回合结束?到达终点、超时、还是坠崖?终止条件与奖励配合,告诉狗狗“游戏边界在哪”。在ML-Agents中,EndEpisode()方法结束当前回合,AddReward()方法累加即时奖励,一收一放之间,狗狗就慢慢懂得了全局目标。
奖励机制是强化学习里最像“育儿学”的部分:奖励太松,狗狗懒散;太紧,狗狗耍小聪明。一份好的奖励守则,应当让狗狗每走一步心里都有数,而不是做一次题才判一次分。
- 即时奖励 \(r_{t+k+1}\)第 \(k+1\) 步吃到的那颗狗粮,代表当前动作的直接反馈。
- 折扣系数 \(\gamma^k\)时间越久的奖励,在狗狗心里的分量越轻,防止它只顾眼前几十步。
- 累计回报 \(G_t\)从当前时刻起,把所有未来奖励按折扣加总,代表“长期生活质量”。
训练流程:从踉跄到稳行的进阶之路
训练计划表写好了,接下来就是枯燥而神奇的重复练习。ML-Agents默认使用PPO(近端策略优化)算法,它是策略梯度家族里最稳的“训练师”:每次更新策略时,它都强制要求“新策略不能比旧策略偏离太远”,就像训练师每次只纠正狗狗的一个小习惯,而不是推倒重来。这样训练曲线虽缓慢,但稳健向上。
训练过程中,超参数调优是一堂绕不开的必修课:学习率太大,狗狗会“学过火”导致震荡;批次大小决定每次吸取多少经验;熵系数控制探索的热情,太高狗狗像没头苍蝇,太低则早早固步自封。实践中通常先在默认参数上跑通,再借助TensorBoard观察奖励曲线微调。
课程学习(Curriculum Learning)是进阶技巧:先把狗狗放在空旷平地练走直线,再逐渐加入红绿灯、行人、车流。ML-Agents支持自定义课程,通过Curriculum配置按环境参数分档递进。这种“由易到难”的节奏,能让狗狗在简单任务上先建立自信,再面对复杂场景时更快上手——比一上来就地狱难度高效得多。
训练流程是一场耐心的马拉松。狗狗从第一天连站都站不稳,到一百个回合后能瞥一眼路口就从容停下,靠的不是某一次灵光乍现,而是PPO稳扎稳打地引导策略一步步逼近最优。你只需要盯住奖励曲线,在它停滞时微调参数,在它躁动时帮狗狗收收心。
- 网络参数 \(\theta\)狗脑中所有神经连接的集合,训练就是对它反复打磨。
- 目标函数 \(J(\theta)\)衡量当前策略的好坏,数值越高代表狗狗平均每局赚的肉干越多。
- 梯度 \(\nabla_\theta J(\theta)\)指示“往哪个方向调参数能赚得更多”的势能箭头。
- 学习率 \(\alpha\)每次调整的步伐大小,步子太大容易扯着,太小则进步缓慢。
模型部署:毕业狗狗正式上岗
训练收敛后,那只在训练场里表现优异的狗狗要真正上岗了。ML-Agents会把训练好的“狗脑”导出成ONNX格式模型——一种跨平台、跨框架的通用神经网络格式,相当于把狗狗的智慧装进一个标准接口的“黑盒子”,任何平台都能加载它。在Unity中,只需在训练好的模型文件上添加Behavior Parameters组件,把模型拖入其中,按下Play,智能体就会开始用训练出的策略驱动自己行动,不再需要Python训练器作陪。
加载推理有两种选择:在Unity内部把ONNX模型挂进Model槽位,由引擎自带的Unity Inference Engine实时计算动作;也可以把模型部署到云端或边缘设备,由外部程序推理后再把动作指令传回Unity。前者适合单机游戏NPC,后者适合需要集中管控的仿真集群。
部署后还要关注行为控制的稳定性:模型输出的是归一化的动作值,需要映射到角色实际的速度、转向角等物理量上;同时要设置动作的上下限,防止模型输出一个不合理指令让角色飞出地图——就像上岗后的导盲犬仍需约束带,既保留它的判断力,又兜住安全的底。
部署不是终点,而是狗狗第一次走出训练场的起点。训练场再好,也总有没见过的雨夜和坡道。好在ONNX模型的轻量与通用,让这只狗能够被批量复制到不同设备上,从游戏NPC到仿真车,随叫随到。
- 原始输出 \(a_{\text{out}}\)网络输出的原始动作信号,可能超出合理范围。
- 裁剪函数 \(\mathrm{clip}\)把动作值强制限制在 \([-1, 1]\),相当于给狗狗的命令加保险绳。
- 最大速度 \(v_{\max}\)将归一化的动作映射到真实物理量,完成“思想”到“行动”的落地。
调优实践:训练师的进阶锦囊
训练不顺时,训练师该从哪里入手?首当其冲是奖励调优:如果训练曲线涨到平台期就卡住,试试把奖励的幅度调小、把奖励项拆分得更细;如果狗狗学会了钻空子,及时检查是否存在“原地转圈蹭狗粮”式的奖励漏洞,给作弊行为加负分。记住一个原则:奖励的每一次加减,都要问自己“这是在奖励过程,还是奖励结果”。
其次是噪声与种子。强化学习天生带有随机性,同一份配置跑两次,结果可能天差地别。代码里设置固定的随机种子(torch.manual_seed(42)等),可以让训练结果可复现,方便你对照不同配置的优劣。另外,在观测中适当加入噪声进行训练,能让狗狗对真实世界的传感器误差更抗造。
最后是性能监控。训练时打开TensorBoard,紧盯三条曲线:累计奖励(总体进步)、每回合步数(效率变化)、策略熵(探索活力)。熵太低说明狗狗太早“固执己见”,需要调高熵系数;奖励震荡剧烈则要考虑降低学习率。ML-Agents还支持在训练中用--resume断点续训,失败从不过去,一切都可以重来。
调优的本质,是训练师与狗狗之间一场持续的“对话”:狗狗的行为告诉你它对守则的理解,你通过调整奖励与参数告诉它哪里理解偏了。ML-Agents把这场对话的仪表盘、方向盘都交到了你手里,剩下的,就是不断试错、观察、再试错的匠人功夫。
- 目标奖励 \(r_{\text{goal}}\)达到主目标才给的“大肉干”,稀疏却关键。
- 过程奖励 \(r_{\text{alive}}\)每存活一步或前进一点就给的小狗粮,密集但分值低。
- 权重 \(w_1, w_2\)调节结果与过程的相对重要性,训练师手上最关键的两颗旋钮。
AI 应用场景
游戏NPC智能养成
阶段:训练与集成
解决的问题:传统游戏NPC的行为靠手写状态机或脚本,动作僵硬、套路固定,玩家轻易就能摸透规律。用ML-Agents训练NPC,让它们像导盲犬一样在游戏场景中自我摸索,学会追逐、躲避、协作等复杂行为,且每次对局都有新变化。
具体案例:某开放世界游戏中的巡逻守卫,设定红色警戒区为高奖励、巡逻路线覆盖为正奖励、被玩家偷袭为负奖励。在Unity场景中训练数千回合后,守卫学会了分队包抄、利用掩体探头,玩家再难用“绕圈拉仇恨”的旧套路通关。
自动驾驶仿真测试
阶段:仿真训练与安全评测
解决的问题:自动驾驶路测成本高、风险大,极端场景难以在真实道路复现。Unity提供逼真的光照、天气、路面物理,ML-Agents在仿真世界里训练决策模型,先让“虚拟狗”在暴雨、隧道、鬼探头中练胆,再迁移到真实车辆上微调。
具体案例:某自动驾驶团队在Unity中搭建高速公路仿真场景,用ML-Agents训练换道决策模型。奖励函数设计为“安全跟车距离保持+目标车速达成”,并借助课程学习从空旷路段逐步引入密集车流,最终模型在仿真中累积测试里程超过百万公里。
机械臂抓取的仿真预训练
阶段:模型预训练与域迁移
解决的问题:物理机器人上做强化学习试错代价高昂——摔一次就是一笔维修费。先在Unity物理引擎中训练机械臂的抓取策略,成功后把导出的ONNX模型部署到真实机械臂,再结合少量真实数据微调,显著缩短研发周期。
具体案例:某智能仓储团队为分拣机械臂搭建Unity仿真环境,设置“抓取成功+靠近目标”为正向奖励、碰撞为负向奖励,训练出的策略在实验室真实机械臂上首测成功率即达到仿真环境的85%,经过一周真机微调后提升至95%。
Python 演示
# -*- coding: utf-8 -*-"""使用 mlagents_envs 加载训练好的 Unity 环境并运行推理"""from mlagents_envs.environment import UnityEnvironmentfrom mlagents_envs.side_channel.engine_configuration_channel import EngineConfigurationChannel def main(): channel = EngineConfigurationChannel() env = UnityEnvironment( file_name="builds/RobotSim", side_channels=[channel] ) env.reset() behavior_name = list(env.behavior_specs.keys())[0] spec = env.behavior_specs[behavior_name] for episode in range(20): env.reset() decision_steps, terminal_steps = env.get_steps(behavior_name) while True: if len(decision_steps) > 0: obs = decision_steps.obs[0][0] actions = spec.action_spec.random_action(len(decision_steps)) env.set_actions(behavior_name, actions) env.step() decision_steps, terminal_steps = env.get_steps(behavior_name) if len(terminal_steps) > 0: break env.close() if __name__ == "__main__": main()
env = UnityEnvironment(file_name="builds/RobotSim", side_channels=[channel])启动Unity编译出的可执行程序,建立Python与引擎之间的通信通道behavior_name = list(env.behavior_specs.keys())[0]获取场景中注册的Behavior名称,它是Python端与Unity端对接的“电话号码”spec = env.behavior_specs[behavior_name]拿到该行为对应的观测维度与动作空间定义decision_steps, terminal_steps = env.get_steps(behavior_name)获取当前需要做决策的智能体列表,terminal_steps则记录本回合结束的个体actions = spec.action_spec.random_action(len(decision_steps))生成随机动作,真实项目中应替换为加载ONNX模型后的推理输出env.set_actions(behavior_name, actions)把动作写回Unity,驱动虚拟角色的物理运动与交互env.step()推进Unity引擎前进一步,触发新一轮观测、奖励与状态转移
常见误区
误区我以为奖励信号就像游戏里的金币,撒得越多、给得越勤,智能体肯定动力越足学得越快。于是我把每一步的微小进展都设置成正奖励,结果训练曲线一路狂飙到上限后瞬间崩塌,角色开始原地疯狂转圈刷分。
正解奖励密度过高会让智能体沉迷于“刷分捷径”,就像训练师在狗狗每次抬脚都给肉干,狗狗很快学会只抬脚不走路——它发现了拿奖赏的漏洞。正确做法是让奖励“疏密有致”:用稀疏的大奖定义终极目标,用平稳的中等奖励引导过程,并时刻警惕奖励黑客行为。奖励设计遵循小而平稳、疏密结合的原则,必要时用负奖励惩罚作弊捷径。
为何常见:新手很容易把人类直觉里的“即时反馈越多越好”套用到强化学习上,忽视了智能体是纯粹的“利益最大化机器”,它会不择手段地榨取任何可被利用的奖励信号。
误区我总觉得训练时要在Unity编辑器里看着角色跑来跑去才放心,万一跑偏了还得赶紧暂停,结果一上午就盯出一双干涩的眼睛,训练速度还特别慢。
正解ML-Agents支持完全无头(headless)模式,在命令行使用--no-graphics参数就能关闭渲染窗口,让训练器专注跑物理和数学计算。画面渲染本身很耗资源,关掉后训练吞吐量能提升数倍。想观察训练效果,用TensorBoard看奖励曲线就足够了,不必肉眼盯帧。
为何常见:人对“看得见”的东西更安心,加上编辑器的可视化反馈确实直观,容易让人误以为渲染是训练的必要环节,而忽略了它在大部分时间只是性能负担。
误区我用同一份配置跑了两遍训练,奖励曲线却不太一样,我以为自己哪里配置出错了,于是反复重装环境、清空缓存,折腾了很久。
正解强化学习天然带有随机性——网络初始化、动作采样、环境扰动都是随机的,两次训练结果略有差异是正常现象。要提升可复现性,应在代码中显式固定随机种子(如torch.manual_seed(42)),并设置seed参数;但即便固定种子,不同硬件或库版本也可能带来微小偏差。工程上通常每个配置跑多个种子取平均,再判断孰优孰劣。
为何常见:受传统监督学习“同数据同结果”思维的影响,初学者容易把确定性当默认预期,忽略了强化学习中探索与采样的随机本质。
误区我想让智能体“考虑周全”,于是把位置、速度、周围所有物体的坐标、材质、甚至天气都塞进观测向量,以为信息丰富它就能做出完美决策。结果训练了上千回合,角色还在原地打转。
正解高维观测意味着更大的探索空间与更慢的收敛速度,这正是“维度灾难”。狗狗不需要知道路边草的颜色,只需要看到马路牙子和红绿灯。好的观测应该“精简而关键”:只保留与任务直接相关的特征,必要时用射线感知或低维向量替代原始图像,训练效果会立竿见影地提升。
为何常见:人们常把“信息量”与“信息质量”混为一谈,忽略了冗余特征对学习的干扰,以及神经网络拟合高维空间的巨大代价。
面试题
Q1. 在Unity ML-Agents中,扮演“环境”角色、负责提供反馈与状态转移的是?
- A.提供奖励与反馈的游戏场景← 正确答案
- B.承载决策逻辑的智能体脚本
- C.负责渲染画面的主摄像机
- D.导出模型时用的编译工具
答案:A。强化学习中“环境”指智能体之外的一切,Unity场景就是环境——它根据智能体的动作返回新状态与奖励。智能体脚本是“狗脑”,相机只是渲染工具,编译工具与训练无关。可以用导盲犬训练类比:操场是环境,狗是智能体。
Q2. 下列哪个训练超参数主要控制智能体的探索程度?
- A.学习率数值调大
- B.折扣因子变小
- C.熵系数适当调高← 正确答案
- D.批次规模扩大
答案:C。熵系数(entropy_beta)直接惩罚策略的过度确定,熵越高狗狗越爱尝试新动作,探索越充分。学习率控制更新步长,折扣因子控制远见程度,批次大小影响梯度稳定性,都不直接负责探索。类比:熵系数是“好奇心旋钮”。
Q3. 训练完成后,Unity ML-Agents导出的模型格式是?
- A.ONNX 通用格式← 正确答案
- B.Unity 预制体文件
- C.C# 脚本源码文件
- D.纹理贴图素材文件
答案:A。ML-Agents训练出的网络会导出为ONNX格式,它是一种跨平台、跨框架的通用神经网络格式,Unity通过Unity Inference Engine加载它进行推理。预制体、脚本、贴图都不承载训练出的网络权重,类比为把狗狗的“智慧”装进标准黑盒。
Q4. 关于观测空间设计,下列说法正确的是?
- A.观测越丰富越能加速收敛
- B.精简关键观测可加速收敛← 正确答案
- C.观测必须包含全部环境信息
- D.观测只能使用向量形式
答案:B。观测应精简而关键,冗余信息会加剧维度灾难,拖慢收敛;观测也不需要包含全部信息,只需覆盖任务相关的关键特征;观测可以是向量、射线或相机图像。类比:训练导盲犬时只让它关注路况,而不是让它听清每片树叶的响声。
Q5. 下列哪些方式属于ML-Agents中有效的观测手段?
- A.使用射线感知器← 正确答案
- B.使用相机像素图像← 正确答案
- C.使用向量特征拼接← 正确答案
- D.使用游戏日志文本
答案:ABC。射线感知(RayPerception)输出周围物体距离,相机观测输出图像,向量观测直接拼接触发器、速度等数值,三者都是ML-Agents支持的观测方式。游戏日志是训练后的分析材料,不是实时观测输入。类比:狗狗用眼睛(图像)、鼻子(射线)和触觉(向量)感知世界。
Q6. PPO算法中“裁剪率”(clip ratio)的核心作用是?
- A.防止策略更新幅度过大← 正确答案
- B.加快训练数据的采样速度
- C.减小神经网络的参数量
- D.消除奖励函数的噪声影响
答案:A。PPO的核心创新是裁剪目标函数,当新旧策略的比值超出指定范围时截断梯度,从而保证每次更新策略偏离不远。这就像训练师每次只纠正狗狗的一个小习惯,避免行为模式被推倒重来。采样速度、参数量、奖励噪声都不由裁剪率控制。
Q7. 进行奖励塑形时,下列哪些做法比较合理?
- A.使用小而平稳的中间奖励← 正确答案
- B.只保留最终的大额奖励
- C.及时反馈关键步骤进展← 正确答案
- D.惩罚所有非目标的行为
答案:AC。奖励塑形应把大目标拆成小而平稳的中间奖励,并在关键步骤出现时及时反馈,帮助智能体建立渐进式认知。完全只给最终奖励会让稀疏奖励训练难度剧增;惩罚所有非目标行为则过于苛刻,会抑制探索。类比:训练狗狗时每靠近目标一点就奖励一粒狗粮,但不会因为它闻了路边的花就苛责。
Q8. 课程学习(Curriculum Learning)的本质思想是?
- A.从易到难编排训练任务← 正确答案
- B.增加网络隐藏层数量
- C.逐步加大奖励的数值
- D.降低动作空间的维度
答案:A。课程学习模仿人类教育节奏,先让智能体在简化任务上掌握基本策略,再循序渐进地引入更复杂的场景参数,从而加速收敛并提升最终性能。它调整的是任务难度分布,而非网络结构、奖励数值或动作维度。类比:狗狗先练平地直线,再学穿越车流。
Q9. 训练时固定随机种子的主要目的是?
- A.保证实验结果可复现← 正确答案
- B.大幅提升训练速度
- C.减少显存内存占用
- D.简化网络前向计算
答案:A。强化学习包含网络初始化、动作采样等随机环节,固定随机种子后每次训练的随机序列相同,使结果可复现,便于对比不同配置的优劣。它不直接影响速度、内存或计算量。类比:把训练流程“按下快门的一刻定格”,好让训练师复盘对比。
Q10. 下列哪些做法属于有效的训练调优手段?
- A.使用课程学习递进难度← 正确答案
- B.动态调整奖励权重← 正确答案
- C.固定随机种子便于比较← 正确答案
- D.无条件加大所有奖励幅度
答案:ABC。课程学习能降低初期探索难度,动态调整奖励权重可平衡结果与过程目标,固定种子则保证对比实验公平可靠。而无条件加大奖励幅度会造成梯度爆炸与奖励黑客,属于典型误区。类比:训练师聪明地调整训练计划,而不是简单粗暴地加餐。