本节摘要:把"别撞人、别爆仓、别过热"写进强化学习,标准的期望回报最大化不够用——它允许"平均赚钱但偶尔爆仓"。安全强化学习(Safe RL)给出三种形式化:约束马尔可夫过程(硬约束期望代价)、风险敏感目标(管尾部不管均值)、安全层兜底(运行时过滤危险动作)。本节讲清三者的数学形态、适用边界,以及"探索本身就是风险"这个无模型方法特有的安全难题。
回顾全书,所有算法都在优化同一件事:期望回报最大。这个目标对"灾难"是盲的——期望把小概率大损失稀释成平均值。仓库机器人学出穿行货柜间的窄缝(省两秒,撞柜率百分之一),训练环境里这一步看起来完美;部署后百分之一的事故率就是每天三次碰撞。问题不在算法算错,而在我们没把安全写进优化目标——期望回报是个错误的问题陈述。安全强化学习的立场:在真实系统上,"绝不越线"优先于"平均更优",两者冲突时前者赢。
最直接的写法是给优化问题加约束(CMDP):在满足期望代价约束的前提下最大化回报:
maximize J(π) subject to J_c(π) = E[Σ γ^t c(s_t, a_t)] ≤ κ
c 是代价函数(碰撞、超温、资金回撤),κ 是预算。拉格朗日松弛把它变回无约束问题:J(π) − λ·J_c(π),训练中自适应调 λ(约束快被违反就加大惩罚)。实现上几乎零门槛——把代价当第二张价值表学(critic 双头),超参只有一个 κ。它的局限也要说透:约束的是期望代价,"平均安全但偶尔越线"仍然合法;对"一次都不能出"的场景(医疗、核电),期望约束不够,需要下面的风险敏感或安全层。
数字例子感受期望与尾部的差别:策略 A 每步省 1 单位代价但千分之一概率损失 5000;策略 B 每步多花 0.5 但零事故。期望上 A 完胜(−1+5000×0.001 = 每步净 +4),风险调整后 A 是灾难。CMDP 若把 κ 设小可以封死 A,但 κ 的"小"要靠人工拍——这正是拉格朗日系数难调的根源。
把"对尾部敏感"直接写进优化准则的两条路。风险度量变换:优化 E[Σγ^t r] 换成优化 CVaR(条件风险价值)——"最差的 α 比例回合里的平均回报",α 取 0.05 就是盯住最惨的百分之五。CVaR 优化天然保守,但梯度估计方差巨大(尾部样本稀少),训练成本高。折扣的曲线族变换:对回报做非线性变换 σ(凹函数 = 风险规避),如指数变换下的"熵风险"。工程上更常打擦边球:奖励塑形时对大额负奖励做超线性放大(撞一次的罚金不是线性 100 而是二次 10000),让期望优化器"天然怕尾"。这不严格等价于 CVaR,但便宜有效,是工业界的主流擦边打法。
前两种把安全写进学习目标,安全层则把安全放在学习之外——运行时硬过滤:
动作提议 a_proposal = policy(s) if 安全验证器(s, a_proposal) 不可行: a = 投影到最近的安全动作集合 执行 a
验证器可以是一个控制屏障函数(CBF:存在一个可证的"安全集",使轨迹永不离开)、一个预训练的模型预测控制(MPC)检查器、或简单的一组物理互锁。它的最大优点是可证明的运行时安全——不管策略多疯,出不了安全集;代价则是提议动作被频繁改写后,RL 学到的策略与实际执行的行为脱节(信用分配混乱:被改写的动作带来的结果,账算在谁头上)。实践中安全层常作为最后一道保险与 CMDP 并用:学习时约束引导,执行时屏障兜底。
无模型安全学习有一个绕不开的死结:探索即冒险。ε-greedy 的乱选、熵正则的鼓励尝试,在训练环境里是学习信号,在真实系统里就是事故源。缓解路线按成本排:仿真器预训(把探索放在仿真里,sim-to-real 迁移时策略已收敛,真实交互只做微调——机器人领域主流);离线预训(第 6 章离线 RL 天然零探索风险,先从历史数据学出基线策略再谨慎在线化);保守探索(把探索幅度当约束的一部分,悲观初始化——未知动作先假设有代价)。一个诚实的工程判断:在安全攸关场景,无模型探索几乎总该被关在仿真器或离线数据里,真实系统上跑的应当是已经收敛的策略加安全层。
把本节的形式化落到一个两动作玩具上,看约束系数 λ 如何翻转策略。设定:每步两个可选动作,γ 取 0.9,普通回报与碰撞代价如下——激进动作期望回报 +1.0、期望碰撞代价 0.6;保守动作期望回报 +0.4、期望碰撞代价 0.1。无约束的期望最大化显然选激进。加上 CMDP 约束"期望代价不超过 0.3"后,拉格朗日目标变为回报减 λ 倍代价:λ=1 时激进得 1.0−0.6=+0.4,保守得 0.4−0.1=+0.3,激进仍勉强占优;λ=2 时激进得 1.0−1.2=−0.2,保守得 0.4−0.2=+0.2,策略翻转。解 1.0−0.6λ = 0.4−0.1λ 得翻转点 λ=1.2——这就是"安全预算"的市场价:κ 收得越紧,λ 越大,智能体为安全付的税越高。自适应 λ 的做法正是让这个价格自动发现:每轮检查约束是否被违反,违反就上调 λ,富余就下调,几个回合后 λ 稳定在边界附近。放大到真实任务,你就能理解为什么约束 RL 的训练曲线常呈现"回报先降后稳"——那是 λ 在爬坡、策略在换轨。
真实项目很少单用一道防线,组合方式本身有章法。低风险场景(推荐、调度):CMDP 单防线足够,代价函数宽松定义即可。中风险场景(机器人作业、仓储物流):CMDP 管学习期,安全层管执行期——学习期的约束让策略"默认安全",执行期的屏障兜住万分之一的长尾;两道之间的缝隙用"策略输出限幅"填补(动作幅度硬上限)。高风险场景(人机物理接触、医疗):加第三道——运行时风险监控,实时估计当前轨迹的风险指标,超阈值就降级到保守策略或直接停机。验收清单四条,逐条打勾再上线:约束满足率(在整个评估分布上统计,不能只看均值);最坏回合的代价(尾部,不是平均);扰动鲁棒性(传感器噪声、模型参数漂移下重测);人工审计(录屏逐段看,机器指标过了人眼不过也不上线)。这份清单的本质是把"安全"从形容词变成可统计的名词——每一项都有数字、有阈值、有签字人。