想象你是一家全国快递公司的调度总监。你每天最重要的工作不是亲自开车,也不是按门铃,而是把“十万件包裹按时送达”这个大目标,拆成一条条城市路线:先到杭州,再到上海,再到苏州。城市分拣中心再把路线拆成片区任务;快递员则只关心自己手里的几十个包裹和一条街道。三个层级各管各的时间尺度:总监看明天,分拣中心看半天,快递员看脚下。这个再自然不过的分工,正是分层强化学习的核心直觉——复杂的长期任务不该由一个策略从头管到尾,而应该分成“高层定目标、底层做动作”的多个层级。分层强化学习(Hierarchical RL)让智能体学会这种“总经理—部门经理—一线员工”式的协作,从而在稀疏奖励、长周期任务中更快、更稳地学到策略。
学懂分层强化学习,你就能用“目标分解 + 层级执行”的思路设计复杂机器人决策系统,让稀疏奖励任务从“学不动”变成“学得快”,是进阶强化学习工程师的必修课。
目录
可视化演示
展示分层RL的管理者-工作者层次架构、Options时间扩展动作框架与扁平RL对比,理解层次化决策核心方法。
本节配有交互动效(进入视口后自动加载,约 3KB)。
管理者-工作者层次架构 管理者输出子目标方向,工作者执行原子动作 时间抽象缩短决策周期,提升样本效率 Manager → goal → Worker → action 层次分解降低信用分配难度
背景动机:为什么单层智能体被长期任务逼疯
如果快递公司只有一位“总调度”,他要同时盯住全国每一条街道、每一辆车的油门刹车,很快就会精神崩溃。强化学习智能体在复杂任务中也有同样困境:所有决策都压在一个策略上,既要想“去哪”,又要管“怎么迈腿”,长期目标的信息很容易在几千步动作中被稀释。
技术上这被称为稀疏奖励问题。比如让机器人从房间一端走到另一端,只有最终到达才有奖励。中间每一步都在“黑暗”中摸索,连接“今天的动作”和“最终奖励”就像让仓库工人猜到底是哪个环节让包裹准时到达。与此同时,探索空间巨大。如果动作空间有几十个维度,要靠随机尝试找到正确序列,概率会指数下降。分层的思想就是不让一个策略承担所有复杂度。
单层调度最头疼的地方,是把每一小步都塞进“长远回报公式”里计算;分层调度则把公式拆给不同层级:高层看长程回报,低层看局部反馈。
- 未来奖励列表把从现在开始每一步获得的奖励依次取出,作为长期回报的原料。
- 折扣因子\(\gamma\) 是 0 到 1 之间的数,让越遥远的奖励对当前决策影响越小,相当于“远方的好处看得淡一点”。
- 累加得回报将全部折扣奖励相加,便得到这条轨迹的长期回报值。
核心思想:把目标与动作分层
真正的三层快递体系不是“多设几个办公室”,而是不同层级讲不同语言:总部说城市名,分拣中心说片区名,快递员说门牌。这种语言隔离让每个层级只关注自己时间尺度的事。分层强化学习的核心,正是把“目标”和“动作”分开。
高层策略负责选择子目标或宏动作,低层策略负责在当前子目标下选择具体动作。高层决策频率低,低层决策频率高,形成时间抽象。一个宏动作可以持续很多个时间步,高层不用在每个时刻都做决策,因此高层看到的决策问题规模变小,低层学习的任务更加局部。
这种分工可以用总策略公式描述:总策略是“先由高层选期权、再由低层选动作”的复合结果。
分拣中心不替快递员开门,但快递员必须知道“这栋楼属于哪个片区”;两个层级各司其职,长期任务才变得可学习。
- 高层选期权高层策略根据当前状态 \(s\),以一定概率选出期权 \(o\),类似总部决定“下一站去南京”。
- 低层做动作给定状态和期权,低层策略再决定具体动作 \(a\),类似司机在“去南京”的目标下打方向盘。
- 组合全策略对所有可能期权求和,得到智能体实际执行动作的总概率。
数学建模:从 MDP 到期权式决策
把分工写成合同,算法才能计算。单层强化学习建立在马尔可夫决策过程(MDP)上,而分层强化学习引入“期权/宏动作”后,会升级到半马尔可夫决策过程(SMDP)。
智能体执行一个期权时,会持续若干步,直到满足终止条件。这期间的奖励不是每步单独对账,而是把整个期权期间当作一个整体来结算。于是 Q 值更新从“单步”变成了“宏动作步”的版本:
这就像分拣中心记录“这一批包裹共花费 10 小时翻完一整车”,而不是每盒包裹都单独对账。一次宏观动作批量结算,高层才学得动。
- 当前价值在状态 \(s\) 下选择期权 \(o\) 的价值估计。
- 期权总回报执行整个期权共 \(k\) 步,得到总奖励 \(r\),再用 \(\gamma^{k}\) 对后续价值打折。
- 优势比较用结束状态 \(s'\) 处最优下一期权的价值,减去当前估计,形成误差信号。
- 学习率更新\(\alpha\) 决定每步更新多少,避免价值估计一步到位导致振荡。
Options 框架:可执行的宏动作
Option 就是“城市级路线方案”。比如“从上海分拣中心开到南京高速口”是一个期权,内部有司机的驾驶策略:加速、变道、减速;什么时候算完成,由终止条件决定。
在学术上,期权定义为一个三元组:“可用集合 + 内部策略 + 终止条件”。
高层看到的是“几个城市名”,低层看到的是“方向盘和油门”。高层价值函数因此更容易收敛,低层也能反复打磨同一条路线的驾驶技能。
- 可用集合期权在哪些状态下才能被高层选用,类似“只有到了上海,才能选上海到南京路线”。
- 内部策略期权内部如何选择动作,这是完成子目标的“手艺活”。
- 终止概率在状态 \(s\) 以概率 \(\beta(s)\) 结束期权,把控制权交还给高层。
FeUdal 网络:Manager 与 Worker 的默契配合
如果 Options 是“显式的宏动作”,FeUdal 网络(FuN)则更柔性:Manager 不直接说“去南京”,而是给出一个方向向量,Worker 自己领会如何朝这个方向前进,非常像老板只写一句“往东偏北 30 度走”,员工自己决定迈左脚还是右脚。
FuN 结构分为 Manager 和 Worker 两层:Manager 在较粗的时间尺度上输出目标向量 \(g_t\);Worker 在每个时间步输出具体动作。为了让 Worker 理解方向,FuN 用状态差分定义内在奖励:
老板不必说出“南京”这个名字,员工只要朝方向走就能拿到“私房零花钱”。这种内在奖励把稀疏的外部信号变成稠密的导航提示。
- 状态差分高层把当前表示与 \(c\) 步前的表示相减,得到“想往哪个方向走”。
- 归一化目标把差分向量除以模长,去掉大小、只留方向。
- 一致性奖励低层的状态迁移与目标方向越一致,点积越大,内在奖励越高。
训练机制:两套层级如何协同更新
两套班子一起培训,复杂度自然翻倍。高层策略与低层策略需要协调:高层通常靠外部奖励学习“选哪些子目标”,低层则靠内部奖励学习“如何完成当前子目标”。
训练设计上常见两种路线:一是先固定低层,用预训练技能稳定后,再训练高层;二是让高低层同步优化。低层常用策略梯度或 Q 学习,高层同理,关键是给低层一个综合奖励信号:
训练过程就像快递公司先让快递员熟悉本地路况,再让分拣中心学习排路线。层级互相成就,但又不过度干扰。
- 外部奖励环境给的最终反馈,稀疏但真实,像客户的签收确认。
- 内在奖励与子目标方向的接近程度相关,稠密但主观,像快递员手机里的导航提示。
- 平衡系数\(\lambda\) 调节外部与内在奖励的相对权重,太小等于没分层,太大容易钻牛角尖。
挑战与局限:层间衔接不是魔法
分层不是银弹。总部若给一个“去火星”的目标,快递员再能干也无济于事;或者快递员技能更新后,总部还沿用旧地图,调度就会失灵。这就是分层强化学习著名的非平稳性问题。
具体来说,同一状态、同一动作,由于高层目标不断变化,低层观察到的转移和奖励分布会不稳定。目标设定困难、层间奖励系数难调、训练不稳定,都是常见挑战。研究者通常用稳定的目标表示、预训练低层技能、限制高层更新频率等手段缓解。
总调度用旧地图指挥新建成的绕城高速,司机就会怀疑人生。解决的关键是让层级之间有稳定接口,或者先固化低层技能。
- 低层动作动作 \(a\) 仍然来自同一个动作空间,没有变化。
- 转移概率变化因为高层目标改变,环境对低层动作的反馈模式发生变化,所以两个时刻的转移概率不同。
- 训练后果低层模型不断被推翻,训练像是在移动的沙地上盖楼。
应用前景:层次化思维落地场景
一旦尝到分层的甜头,你会发现几乎所有复杂决策都有层次:国家规划引导地方执行,地方执行落到基层行动。分层强化学习也是如此,它把“总目标—子目标—具体动作”的接力赛带进现实。
机器人导航中,高层规划房间序列,低层规划轮速与避障;游戏 AI 中,高层选择“推塔还是打野”,低层负责施放技能与走位;自动驾驶中,高层规划换道策略,低层控制油门刹车。分层结构的统一特征是时间尺度差异大:
快递公司的三层调度是一场时间尺度上的接力赛。分层强化学习,正在把这场接力赛交给机器人、游戏与自动驾驶。
- 高层周期高层几秒甚至几分钟才重新决策一次,像总监每天只看一次全国线路。
- 低层周期低层每帧或每 0.1 秒输出一次动作,像司机每时每刻都在微调油门。
- 尺度比时间尺度差异越大,分层带来的收益就越明显。
AI 应用场景
巡检机器人路径规划与导航
阶段:分层决策与训练
解决的问题:工厂走廊长、点位多,单层策略难以同时记住全局任务和局部避障。传统方式用全局路径规划加局部控制,但遇到动态人和移动障碍物时切换僵硬。分层 RL 让高层负责“下一站去哪”,低层负责“当前怎么走”,决策更自然。
具体案例:四足巡检机器人在园区中执行巡逻任务。高层每 5 秒重新选择一个目标点,如“去 3 号仓库门口”;低层以 12Hz 频率输出关节力矩,实时避让行人。即使某个目标点临时取消,低层仍能平稳过渡到新目标。
MOBA 游戏 AI 的战术执行
阶段:多智能体决策与训练
解决的问题:MOBA 游戏中英雄的攻击距离远、技能组合复杂,单层策略容易陷入“只顾打小兵”的局部最优。分层 RL 让高层理解宏观战局,低层专注操作细节。
具体案例:在 5v5 对战 AI 中,高层判断“应该推塔还是集合打团”,低层负责技能连招和走位躲技能。教练通过内在奖励引导低层先学会“接近目标英雄”,再让高层学会“选择正确的团战时机”。
自动驾驶的行为决策与控制
阶段:决策规划与运动控制
解决的问题:从 A 点到 B 点,如果每毫秒都直接决策方向盘转角,规划会不稳定;如果只做全局规划,又无法应对红绿灯与行人。分层 RL 将决策拆成“路线选择—行为选择—底层控制”。
具体案例:自动驾驶系统在高速场景中,高层把“跳过拥堵路段”作为目标,中层输出“换到左侧车道”的决策,低层再执行转向和油门。高层目标变化时,低层控制模块保持稳定,大大减少驾驶顿挫感。
Python 演示
import random GRID = 4GOALS = [(0, 0), (0, 3), (3, 0), (3, 3)]ACTIONS = [(-1, 0), (1, 0), (0, -1), (0, 1)]START = (2, 2)ALPHA = 0.3GAMMA = 0.9EPS = 0.3PLAN_LEN = 5 Qh = {} # high-level: (state, goal_id) -> valueQl = {} # low-level: (state, action) -> value def qh(s, g): return Qh.get((s, g), 0.0) def ql(s, a): return Ql.get((s, a), 0.0) def in_grid(p): return 0 <= p[0] < GRID and 0 <= p[1] < GRID def choose_goal(s): if random.random() < EPS: return random.randrange(4) values = [qh(s, g) for g in range(4)] return values.index(max(values)) def choose_action(s): if random.random() < EPS: return random.randrange(4) values = [ql(s, a) for a in range(4)] return values.index(max(values)) def move(s, a): ns = (s[0] + ACTIONS[a][0], s[1] + ACTIONS[a][1]) if not in_grid(ns): ns = s return ns def manhattan(a, b): return abs(a[0] - b[0]) + abs(a[1] - b[1]) def run_episode(): s = START total = 0.0 for _ in range(100): gid = choose_goal(s) goal = GOALS[gid] for _ in range(PLAN_LEN): a = choose_action(s) ns = move(s, a) r_ext, done = 0.0, False if ns in GOALS: r_ext = 1.0 if ns == GOALS[0] else -1.0 done = True old_d = manhattan(s, goal) new_d = manhattan(ns, goal) r_int = 1.0 if new_d < old_d else -0.5 r_low = r_int + r_ext targets = [ql(ns, a2) for a2 in range(4)] Ql[(s, a)] = ql(s, a) + ALPHA * (r_low + GAMMA * max(targets) - ql(s, a)) if done: Qh[(s, gid)] = qh(s, gid) + ALPHA * (r_ext - qh(s, gid)) s = ns total += r_low if done: break if done: break return total if __name__ == "__main__": for ep in range(300): score = run_episode() if ep % 60 == 0: print(ep, score)
Qh = {}高层 Q 表:以「状态+子目标」为键,记录选择每个目标的长期价值。Ql = {}低层 Q 表:以「状态+动作」为键,记录每个原始动作的局部价值。def choose_goal(s):高层决策入口:用 epsilon 贪心在候选子目标中选择。r_int = 1.0 if new_d < old_d else -0.5低层每走一步都收到稠密的内在奖励,距离目标越近奖励越高。Ql[(s, a)] = ql(s, a) + ALPHA * (...)低层用 Q 学习更新动作价值,融合内在奖励与外部奖励。if done:` 下的 `Qh[(s, gid)] = ...只有子目标完成或失败,高层才更新,体现时间抽象与层级解耦。
常见误区
误区分层RL的核心是把奖励函数分成几小段,每层各拿一段,这样每层都能收到奖励,问题就解决了。
正解分层RL的核心是时间抽象和策略分解,不是奖励分段。即使把奖励切成多段,单层策略依然要管所有动作决策,探索效率不会提升。真正的分层让高层选择“期权/子目标”,让低层在这些子目标下执行动作,奖励只是辅助信号。
为何常见:看到“子目标”“内在奖励”等字眼,容易误以为分层只是把奖励工程化,忽略了策略结构变化。
误区既然高层更聪明,它就应该告诉低层每一步怎么走,否则低层学不会。
正解高层只提供子目标或方向向量,低层自行决定具体动作。若高层直接控制每个动作,分层就退化成了单层智能体,既丢掉了时间抽象,也失去了“不同层级讲不同语言”的优势。
为何常见:惯性思维认为“越上层越万能”,忽略了抽象层级需要信息压缩才能规模化。
误区一个 Option 的终止条件就是整个任务完成,比如“到达终点”或“通关”。
正解终止条件指该 Option 内部宏动作何时结束,比如“到达中转站”“时间超时”或“遇到障碍”。它只是交接点,不一定是全局终点。全局任务可能由多个期权依次完成。
为何常见:把“宏动作结束”等同于“任务结束”,混淆了局部抽象与全局目标。
误区既然两层比一层好,那么十层一定比两层好,层级越深越强大。
正解层级增加会引入更多非平稳性、误差累积和训练难度。实践中 2-3 层最常见,超过这个深度往往收益递减甚至崩溃。分层的关键是“合适地分解”,而不是“尽可能多地分层”。
为何常见:把复杂度当成能力,忽视了层间接口设计和训练稳定性成本。
误区只要用分层RL,任何任务都会比普通RL学得快,性能一定更好。
正解分层RL的优势集中在长期、稀疏奖励、时间尺度差异大的任务中。如果任务本身很短、奖励稠密,分层带来的额外接口设计和训练开销反而可能导致更慢、更难收敛。
为何常见:将“某个领域的成功”过度泛化,忽略了分层是一种匹配问题结构的方法,而不是万能加速器。
面试题
Q1. 分层强化学习最想解决的核心困难是?
- A.稀疏奖励与长程目标难对齐← 正确答案
- B.模型过拟合导致泛化变差
- C.数据样本数量总是太少
- D.网络层数无法继续加深
答案:A。长程任务中奖励稀疏,单层策略难以把“某一步动作”与“最终奖励”联系起来。分层把长程目标拆成子目标,就像总调度先分城市、再分街道,让稀疏奖励变得可学习。
Q2. Options 三元组 ⟨I, π, β⟩ 中的 β 代表什么?
- A.内部策略的动作概率
- B.期权可用的起始集合
- C.期权结束的终止概率← 正确答案
- D.环境状态的转移概率
答案:C。β(s) 表示在状态 s 时结束当前期权、把控制权交还给高层的概率,类似于分拣完成后把包裹交接给下一个环节。A 是 π,B 是 I,D 是环境模型。
Q3. SMDP 的 Q 更新公式中 γ^k 里的 k 表示什么?
- A.本次期权执行的持续步数← 正确答案
- B.状态空间的总维数大小
- C.动作空间的候选数量
- D.随机种子生成的次数规模
答案:A。期权会持续 k 步后才结束,因此总奖励要按 γ^k 打折。这体现“宏动作”的时间抽象:一次期权等于一批小步批量结算,而不是每步单独更新。
Q4. 以下哪些属于典型的分层强化学习框架?
- A.Options框架← 正确答案
- B.FeUdal网络← 正确答案
- C.生成对抗网络
- D.搜索引擎算法
答案:AB。Options 和 FeUdal Networks 都是分层强化学习的代表方法;生成对抗网络属于生成模型,搜索引擎算法属于信息检索,与分层决策无关。
Q5. 在 FeUdal 网络中,Manager 输出的核心内容是什么?
- A.一个目标方向向量← 正确答案
- B.每个关节的力矩
- C.终止动作的概率值
- D.环境的预测奖励值
答案:A。Manager 只给目标方向向量 g_t,Worker 自己决定如何执行动作。类似总部只说“先到南京”,而不替司机踩油门。B 是低层控制量,C 是 Options 的 β,D 是价值估计。
Q6. Worker 的内在奖励通常被设计为与什么相关?
- A.与目标向量的一致性度量← 正确答案
- B.与动作数值的绝对值大小
- C.与环境奖励的平方差值
- D.与模型参数的梯度范数
答案:A。低层的状态变化与高层目标方向越一致,内在奖励越高,这样低层即使收不到外部奖励也能自主探索。动作本身大小、环境奖励平方、参数梯度范数都不是 FuN 的设计思路。
Q7. 分层训练中的“非平稳性”可由哪些原因引起?
- A.高层目标随时间切换← 正确答案
- B.低层策略更新改变语义← 正确答案
- C.折扣因子被设置为零
- D.奖励值被除以常数
答案:AB。高层切换子目标会改变低层看到的任务分布;低层策略更新也会让同一状态动作的含义漂移,二者都造成非平稳。折扣因子和奖励缩放只是固定超参数,不产生层级间动态干扰。
Q8. 下列哪一项能有效缓解分层结构的非平稳性问题?
- A.同步高频更新高低层
- B.先固化低层再训练高层← 正确答案
- C.取消内在奖励机制
- D.把折扣因子调到极大值
答案:B。低层先学成稳定技能,高层再基于稳定技能学习目标,可以减少低层语义漂移。同步高频更新会互相干扰;取消内在奖励会丢失分层优势;调大折扣因子只是改变价值估计尺度。
Q9. 设计层间接口时,常用哪些方式表达子目标?
- A.连续的目标向量← 正确答案
- B.状态差分的方向← 正确答案
- C.完全随机的噪声
- D.图像像素的颜色
答案:AB。FuN 用连续目标向量和状态差分方向来给低层指引方向,Options 则用离散状态集合描述子目标。随机噪声没有语义,图像像素颜色也不是通用的目标表达方式。
Q10. 把 Options 当作宏动作的决策过程对应哪种数学模型?
- A.半马尔可夫决策过程← 正确答案
- B.贝叶斯网络模型
- C.马尔可夫随机场
- D.隐马尔科夫链模型
答案:A。期权会持续多步并改变决策节奏,因此需要用半马尔可夫决策过程(SMDP)描述,折扣中就出现了 k。贝叶斯网络、马尔可夫随机场和隐马尔可夫模型都没有“动作持续多步”的时间抽象机制。