想象一位保姆带着三岁小孩去游乐场。滑梯、沙坑、喷泉,孩子想玩什么都行,保姆的目标本该是“让孩子玩得越开心越好”。可如果开心指数满分 100 分,直接冲过马路去对面买冰淇淋可能瞬间给到 120 分——那能去吗?当然不能。现实中的工厂机器人也一样:它可能学会了快速搬运零件,却也可能在某次挥臂时撞到旁边的工人。普通强化学习只盯着“开心值”一个数在优化,Safety RL(安全强化学习)则要求:开心可以,但越线的次数必须为零。本文就用“保姆带娃”这个生活场景,带你理解安全强化学习如何让机器人在追求性能的同时,牢牢守住安全底线。

岗位关联

对 AI 从业者而言,安全强化学习是让智能体从“实验室玩具”走向“工业生产力”的关键能力。掌握 CMDP、安全屏蔽与 CPO,你将能设计出既高效又可信赖的机器人决策系统,这是自动驾驶、具身智能等热门方向的核心竞争力。

目录
  1. 可视化演示
  2. 安全RL背景:为什么机器人需要“安全线”
  3. CMDP框架:事先约法三章
  4. 安全屏蔽机制:时刻守护的“保姆之手”
  5. CPO算法:把约束刻进策略
  6. 约束类型:红线和黄线
  7. 机器人应用:安全RL的实战现场
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示安全强化学习的三种核心机制:安全策略导航、约束优化训练曲线与安全屏蔽机制,支持阈值与学习率参数交互调节。

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

安全策略导航 智能体在安全区域内导航,避开危险区域 绿色为目标点,红色为危险区域

安全RL背景:为什么机器人需要“安全线”

想象保姆带着孩子在游乐场。孩子想追皮球,可皮球滚向了马路。开心值会因此暴涨,但保姆必须拦下他——因为安全永远先于开心。传统强化学习就是个“只管开心的保姆”:它只优化累积奖励,完全不知道“马路”意味着什么。对机器人来说,学会快速完成任务是奖励,但探索过程中尝试“撞墙”“碰人”等动作,就像孩子冲向马路,一旦发生就无法挽回。这是安全RL要解决的第一个问题:如何让学习过程本身就不越线。

传统强化学习的目标是最大化期望累计回报:

安全强化学习在此基础上增加一条硬性约束——安全成本的累积期望不能超过阈值:

就像保姆心里有两本账:一本记开心值,一本记违规次数。任何让开心值大涨但会超额违规的方案,一律不许做。安全RL就是给强化学习装上这“第二本账”。

J(π)=Eτ∼π[∑t=0∞γtRt]\displaystyle J(\pi) = \mathbb{E}_{\tau \sim \pi}\left[\sum_{t=0}^{\infty} \gamma^t R_t\right]
JC(π)=Eτ∼π[∑t=0∞γtCt]≤d\displaystyle J_C(\pi) = \mathbb{E}_{\tau \sim \pi}\left[\sum_{t=0}^{\infty} \gamma^t C_t\right] \leq d
  1. 期望回报 JJ 衡量策略 π 长期表现的总得分,像保姆估算“按这套带法,孩子一整天开心值的平均分”。
    J(π)=Eτ∼π[∑t=0∞γtRt]\displaystyle J(\pi) = \mathbb{E}_{\tau \sim \pi}\left[\sum_{t=0}^{\infty} \gamma^t R_t\right]
  2. 轨迹期望 E对“按策略 π 可能走出的所有路线”取平均,避免单次偶然而下结论。
    Eτ∼π[⋅]\displaystyle \mathbb{E}_{\tau \sim \pi}[\cdot]
  3. 安全成本约束C_t 是每一步的安全成本(比如是否靠近危险物),所有步累加后不能超过预算 d。
    JC(π)=Eτ∼π[∑t=0∞γtCt]≤d\displaystyle J_C(\pi) = \mathbb{E}_{\tau \sim \pi}\left[\sum_{t=0}^{\infty} \gamma^t C_t\right] \leq d

CMDP框架:事先约法三章

保姆带孩子出门前会约法三章:“不许碰插座,不许爬窗台,不许吃陌生人给的东西。”规则在出发前就定好,而不是等孩子犯错后才教育。约束马尔可夫决策过程(CMDP)就是强化学习里的“约法三章”——在学习开始前,把安全约束写进问题定义里,让优化过程天然感知这些边界。

普通马尔可夫决策过程(MDP)由状态 S、动作 A、转移概率 P、奖励 R、折扣因子 γ 组成。CMDP 在此基础上增加一个成本函数 C 和一个成本上限 d,把“最大化奖励”变成“在成本不超限的前提下最大化奖励”。目标函数写为:

CMDP 的魅力在于“事前约定”。孩子还没进游乐场,安全清单已经确定;机器人还没开始训练,“哪些动作绝不能做”已经写进优化目标。这份清单不是事后追责,而是事前划界。

max⁡πEτ∼π[∑t=0∞γtRt]s.t.Eτ∼π[∑t=0∞γtCt]≤d\displaystyle \max_{\pi} \mathbb{E}_{\tau\sim\pi}\left[\sum_{t=0}^{\infty}\gamma^t R_t\right] \quad \text{s.t.} \quad \mathbb{E}_{\tau\sim\pi}\left[\sum_{t=0}^{\infty}\gamma^t C_t\right] \leq d
  1. max 最大化在满足安全约束的前提下,找到让累积奖励最大的策略 π。
    max⁡π\displaystyle \max_{\pi}
  2. s.t. 约束条件"subject to" 的缩写,表示后面是必须满足的限制条件。
    s.t.\displaystyle \text{s.t.}
  3. 成本上限 dd 是安全预算,比如“整个搬运任务中,机械臂与工人的最近距离不得小于 0.5 米的次数最多 1 次”。
    Eτ∼π[∑t=0∞γtCt]≤d\displaystyle \mathbb{E}_{\tau\sim\pi}\left[\sum_{t=0}^{\infty}\gamma^t C_t\right] \leq d

安全屏蔽机制:时刻守护的“保姆之手”

即使提前约法三章,孩子依然会瞬间做出危险动作——皮球滚向马路,他猛地冲出去。这时保姆会本能地一把拽住他。这一拽不是孩子自己思考的结果,而是外部力量在关键时刻强行介入。安全屏蔽(Safety Shield)机制扮演的正是“保姆之手”的角色。

屏蔽器是独立于学习策略的外部监督模块。它实时观察策略给出的动作候选,如果发现这个动作会导致进入危险状态,就立即替换成一个安全动作。这种机制不干预正常训练过程,但在执行时提供硬性兜底。修正后动作的选择可以写成:

孩子要冲过马路,保姆拉住他;孩子想走人行道去够气球,保姆就不拦。屏蔽器也是这样——只干预会越界的动作,其余动作尽量不打扰。它是一种“治标”的兜底手段,但对高风险场景来说,这个兜底不可或缺。

πsafe(a∣s)=arg⁡min⁡a′∈AD(a,a′)s.t.QC(s,a′)≤d\displaystyle \pi_{\text{safe}}(a|s) = \arg\min_{a' \in \mathcal{A}} D(a, a') \quad \text{s.t.} \quad Q_C(s, a') \leq d
  1. 替换动作 π_safe屏蔽器在状态 s 下选出一个修正后动作,替代原始危险动作。
    πsafe(a∣s)\displaystyle \pi_{\text{safe}}(a|s)
  2. 距离最小化 DD 衡量两个动作的相似程度,屏蔽器希望替换动作与原始动作尽量接近——像保姆只是轻轻拉回孩子,而不是把他抱离游乐场。
    arg⁡min⁡a′∈AD(a,a′)\displaystyle \arg\min_{a' \in \mathcal{A}} D(a, a')
  3. 安全状态检查 Q_CQ_C(s, a') 是执行动作 a' 后的预期安全成本,只有安全成本不超过 d 的动作才被允许。
    QC(s,a′)≤d\displaystyle Q_C(s, a') \leq d

CPO算法:把约束刻进策略

屏蔽器像“治标”——它总在危机时刻拉一把。但如果保姆能通过日常教育,让孩子在行动之前内心就建立安全线,那才是“治本”。约束策略优化(Constrained Policy Optimization,简称 CPO)正是这种“教育方法”:它在策略更新时就把安全约束写入优化条件,让新策略本身天然不越线,而不是依赖外部拦截。

CPO 是在自然策略梯度方法(如 TRPO)的框架上加入约束条件。每次更新参数 θ 时,它同时考虑两条线:一是奖励要提升,二是安全成本不能超预算。更新规则写成约束优化问题:

CPO 就像保姆的长期教育:不只在危急时刻拉一把,而是让孩子的每一步都自带安全判断。机器人经过 CPO 训练后,即使没有屏蔽器在场,策略输出的动作也天然落在安全域内。

θk+1=arg⁡max⁡θ  gT(θ−θk)s.t.c+bT(θ−θk)≤d,    12(θ−θk)TF(θ−θk)≤δ\displaystyle \theta_{k+1} = \arg\max_{\theta} \; g^T(\theta - \theta_k) \quad \text{s.t.} \quad c + b^T(\theta - \theta_k) \leq d, \;\; \frac{1}{2}(\theta - \theta_k)^T F(\theta - \theta_k) \leq \delta
  1. 奖励梯度方向 gg 是当前奖励函数的梯度,指向让奖励最快增长的方向。
    gT(θ−θk)\displaystyle g^T(\theta - \theta_k)
  2. 安全约束线性化c 是当前策略的安全成本,b 是安全成本的梯度,要求更新后安全成本估算值不超过 d。
    c+bT(θ−θk)≤d\displaystyle c + b^T(\theta - \theta_k) \leq d
  3. 信任域限制F 是 Fisher 信息矩阵,限制参数更新幅度不超过 δ,避免策略突变酿成危险。
    12(θ−θk)TF(θ−θk)≤δ\displaystyle \frac{1}{2}(\theta - \theta_k)^T F(\theta - \theta_k) \leq \delta

约束类型:红线和黄线

游乐场有两种保护线:红色警戒线,绝对碰不得;黄色提示线,碰一下不至重伤,但最好别碰。安全 RL 里的硬约束和软约束,就是这两条线。硬约束要求任何情况下安全成本都不得超过阈值,一旦违反意味着系统进入不可接受状态;软约束允许少量违反,通过惩罚系数把安全纳入优化目标。

硬约束的数学形式是一个严格不等式:

软约束则把安全成本作为正则项合并进目标函数:

保姆对“碰插座”零容忍,这是硬约束;对“稍有咳嗽”只是提醒而非禁止,这是软约束。真实机器人系统往往两类约束并存:不能撞人是不可退让的红线,能量消耗尽量低则是可以权衡的黄线。设计时要用红线锁死底线,用黄线调优效率。

JC(π)≤d,∀π\displaystyle J_C(\pi) \leq d, \quad \forall \pi
max⁡πE[∑γtRt]−λE[∑γtCt]\displaystyle \max_{\pi} \mathbb{E}\left[\sum \gamma^t R_t\right] - \lambda \mathbb{E}\left[\sum \gamma^t C_t\right]
  1. 无条件约束∀π 表示对所有策略都成立,没有例外。
    ∀π\displaystyle \forall \pi
  2. 权衡系数 λλ 决定安全与性能的权重,λ 越大越重视安全。
    λE[∑γtCt]\displaystyle \lambda \mathbb{E}\left[\sum \gamma^t C_t\right]

机器人应用:安全RL的实战现场

一个经验丰富的保姆,无论换到哪个家庭、哪个游乐场,都能守护好孩子。安全 RL 的方法也一样:CMDP 负责定义安全边界,屏蔽器负责执行时兜底,CPO 负责让策略本身诚实,它们被组合用在各种机器人场景中,原理是共通的。在真实应用中,我们可以用安全率这个指标来评估系统的可靠性:

保姆照看孩子的“安全率”也可以用这个公式算:一个月违规次数除以总看护小时,好保姆的目标是让这个比率无限接近 100%。安全 RL 的终极目标,就是让机器人在复杂环境里像经验丰富的保姆一样,既高效完成任务,又牢牢守好安全底线。

---

Safety Rate=1−NviolationNtotal\displaystyle \text{Safety Rate} = 1 - \frac{N_{\text{violation}}}{N_{\text{total}}}
  1. 违规计数N_violation 是整个运行过程中违反安全约束的步数。
    Nviolation\displaystyle N_{\text{violation}}
  2. 总步数比N_total 是运行总步数,两者相除得到违规占比,用 1 减去后就是安全率。
    1−NviolationNtotal\displaystyle 1 - \frac{N_{\text{violation}}}{N_{\text{total}}}

AI 应用场景

场景一:工业机械臂防碰撞

阶段:策略训练 + 部署执行

解决的问题:传统机械臂按固定轨迹运动,在动态工厂环境中可能撞到突然进入工作区的工人。单纯在奖励函数里加惩罚,机械臂在探索期仍可能尝试危险动作。CMDP 把“与人的距离不小于 0.5 米”建模为硬约束,屏蔽器在实时推理时拦截每一个可能导致碰撞的动作。

具体案例:某汽车装配厂的四轴机械臂负责拧紧螺丝,工人偶尔需进入工作区拾取掉落零件。工程师用 CMDP 训练策略,并在控制器外层加装安全屏蔽模块:视觉系统检测到人进入 0.8 米范围时,屏蔽器立即将“快速下探”动作替换为“悬停等待”。部署三个月,安全率保持在 99.7% 以上。

场景二:自主移动机器人导航

阶段:环境感知 + 决策控制

解决的问题:仓储 AGV 与拣货工人共行,既要高效规划路径,又要避免与人和障碍物相撞。CPO 训练出的策略让机器人在路径规划时就避开高人流区域,而不是等到快撞上才急刹车。

具体案例:电商仓库中 200 台 AMR 同时运行,调度系统为每台车设定“拥挤区域通行成本”作为软约束,把“急停次数”作为硬约束指标。上线后 AGV 平均取货时间仅增加 5%,而人机近距离接触事件下降了 80%。

Python 演示

python125 行
"""Safety RL demo: 网格世界 + 安全屏蔽5x5 网格, 起点(0,0), 终点(4,4), 危险格(2,2)对比普通Q-learning与带安全屏蔽的Q-learning"""import numpy as np  class GridWorld:    def __init__(self, size=5):        self.size = size        self.start = (0, 0)        self.goal = (4, 4)        self.danger = (2, 2)        self.n_actions = 4        self.reset()     def reset(self):        self.agent_pos = self.start        return self.agent_pos     def step(self, action):        x, y = self.agent_pos        if action == 0:            y = min(y + 1, self.size - 1)        elif action == 1:            y = max(y - 1, 0)        elif action == 2:            x = max(x - 1, 0)        elif action == 3:            x = min(x + 1, self.size - 1)        next_state = (x, y)        reward = -0.1        done = False        if next_state == self.goal:            reward = 10.0            done = True        elif next_state == self.danger:            reward = -5.0        self.agent_pos = next_state        return next_state, reward, done  class SafetyShield:    def __init__(self, env):        self.env = env     def _next_pos(self, state, action):        x, y = state        if action == 0:            return (x, min(y + 1, self.env.size - 1))        if action == 1:            return (x, max(y - 1, 0))        if action == 2:            return (max(x - 1, 0), y)        return (min(x + 1, self.env.size - 1), y)     def shield(self, state, action):        if self._next_pos(state, action) == self.env.danger:            for a in range(self.env.n_actions):                if self._next_pos(state, a) != self.env.danger:                    return a        return action  def train_q_learning(env, episodes=500, alpha=0.1,                     gamma=0.9, epsilon=0.1, use_shield=True):    q_table = np.zeros((env.size, env.size, env.n_actions))    shield = SafetyShield(env) if use_shield else None    episode_rewards = []    violations = 0    for _ in range(episodes):        state = env.reset()        total_reward = 0        done = False        while not done:            x, y = state            if np.random.random() < epsilon:                action = np.random.randint(env.n_actions)            else:                action = int(np.argmax(q_table[x, y]))            if shield is not None:                safe_action = shield.shield(state, action)                if safe_action != action:                    violations += 1                action = safe_action            next_state, reward, done = env.step(action)            nx, ny = next_state            q_table[x, y, action] += alpha * (                reward + gamma * np.max(q_table[nx, ny]) -                q_table[x, y, action])            state = next_state            total_reward += reward        episode_rewards.append(total_reward)    return q_table, episode_rewards, violations  env = GridWorld()q_plain, _, viol_plain = train_q_learning(env, use_shield=False)q_safe, _, viol_safe = train_q_learning(env, use_shield=True)  def rollout(q_table, env, use_shield=True, max_steps=50):    shield = SafetyShield(env)    state = env.reset()    path = [state]    for _ in range(max_steps):        x, y = state        action = int(np.argmax(q_table[x, y]))        if use_shield:            action = shield.shield(state, action)        next_state, _, done = env.step(action)        path.append(next_state)        state = next_state        if done:            break    return path  path_plain = rollout(q_plain, env, use_shield=False)path_safe = rollout(q_safe, env, use_shield=True)print("无屏蔽训练违规次数:", viol_plain)print("带屏蔽训练拦截次数:", viol_safe)print("无屏蔽执行路径入险:", env.danger in path_plain)print("带屏蔽执行路径入险:", env.danger in path_safe)
目的:在一个 5×5 网格世界中分别训练普通 Q-learning 和带安全屏蔽的 Q-learning,对比二者在“是否进入危险格”这一安全指标上的差异。
  1. class SafetyShield定义安全屏蔽器,在动作执行前检查目标位置是否为危险格。
  2. def shield(self, state, action)若原动作会进入危险格,则返回第一个安全替代动作。
  3. train_q_learning(..., use_shield=True)训练循环中接入屏蔽器,拦截动作的同时累计违规次数。
  4. violations += 1只有在屏蔽器实际拦截了危险动作时才计数,用于量化安全干预频率。
  5. rollout(...)用训练好的 Q 表走一遍完整路径,检查最终是否踩入危险格。
  6. path_plain` vs `path_safe两条执行路径的对比,直观展示屏蔽机制的价值。

常见误区

误区“我只要在奖励函数里把危险行为设成 -100,AI 就不敢做了,为什么还要搞 CMDP?”

正解负奖励是“事后惩罚”,AI 在探索过程中依然会为了试探边界而尝试危险动作,就像孩子不亲眼看到火苗不会相信烫手。安全约束是“事前禁令”,它从根本上排除危险动作的可行性。CMDP 把约束写进优化问题,让策略根本不敢把危险动作纳入候选集。

为何常见:初学者在普通 RL 里习惯了“奖励塑形”这一招,容易误以为调大惩罚系数就能等价实现安全。

误区“屏蔽器会在最后防线拦截危险动作,所以策略本身随便训练没关系。”

正解屏蔽器只能处理已建模的约束(如“不能进入某区域”),无法覆盖所有危险情况。而且它依赖对当前状态的准确感知,如果传感器噪声大,屏蔽判断本身也可能出错。CPO 从策略层面减少危险动作的出现频率,才能给屏蔽器减负。

为何常见:看到屏蔽“一票否决”很直观,容易高估兜底机制的能力,低估状态估计不确定性带来的风险。

误区“安全第一,那把安全阈值 d 设成 0,系统绝对安全。”

正解d=0 意味着任何一步都不允许安全成本,这会让可行策略空间变得极小,机器人可能连任务都完不成——像把孩子锁在房间里,最安全但也失去了玩耍的意义。安全约束的设计是安全与任务可达性之间的折中,需要结合具体场景仔细调参。

为何常见:对安全的理解停留在“越严越好”的直觉上,忽略了约束过紧导致任务不可解的反噬。

误区“正常训练一个策略,部署时在外面套个检查模块,不就实现安全 RL 了吗?”

正解这确实是最简单的安全屏蔽思路,但它在复杂任务中效率很低——策略频繁输出危险动作,屏蔽器不断拦截,机器人行为会变得僵硬笨拙。CPO 等方法从训练源头让策略理解约束,使安全与高效同时出现在策略行为中。

为何常见:训练与部署两阶段的思维惯性,让人忽视了“策略本身是否理解安全”这一关键差异。

面试题

Q1. CMDP相比MDP增加的组成部分是?

单选题 · mid

  • A.增加成本函数与约束阈值← 正确答案
  • B.增加动作空间维度上限
  • C.增加折扣因子的取值范围
  • D.增加环境模型的复杂度

答案:A。CMDP在MDP基础上增加了成本函数 C 和约束阈值 d,把优化目标从“最大化奖励”扩展为“在成本不超限的前提下最大化奖励”。其余选项的“动作空间”“折扣因子”“环境模型”都不是CMDP定义的扩展内容。

Q2. 安全屏蔽机制最核心的作用是?

单选题 · easy

  • A.修改策略中的所有正常动作
  • B.实时拦截并矫正危险动作← 正确答案
  • C.完全替代策略学习过程
  • D.减少环境反馈的奖励信号

答案:B。安全屏蔽是外部监督模块,实时检查动作是否安全,只对危险动作进行替换,不干扰正常动作。A项的“所有动作”、C项的“完全替代”、D项的“减少奖励”均不符合屏蔽器的设计定位。

Q3. CPO策略更新与TRPO的主要区别是?

单选题 · mid

  • A.CPO使用了更深层的神经网络
  • B.CPO在更新时加入安全约束条件← 正确答案
  • C.CPO采用了更快速的梯度优化器
  • D.CPO大幅提高了策略学习率

答案:B。CPO在TRPO的“信任域”更新框架中进一步引入安全成本约束,保证每次策略更新都不会突破安全预算。网络深度、优化器类型、学习率都不是CPO与TRPO的本质区别。

Q4. 硬约束与软约束的本质区别是?

单选题 · easy

  • A.硬约束只适用于仿真环境
  • B.硬约束不可违反而软约束可权衡← 正确答案
  • C.硬约束的奖励值设置更高
  • D.软约束只用于视觉感知任务

答案:B。硬约束要求任何策略都不能超过安全阈值,违反即视为系统失败;软约束允许少量违反,通过权衡系数 λ 调整安全与性能的相对重要程度。A、C、D都不符合两类约束的定义。

Q5. CPO更新规则中Fisher信息矩阵的作用是?

单选题 · hard

  • A.计算奖励梯度的全局平均值
  • B.限制策略更新幅度防止突变← 正确答案
  • C.直接替代安全成本函数
  • D.增大参数更新的噪声干扰

答案:B。Fisher信息矩阵 F 定义了参数的“信任域”,约束策略的KL散度变化不超过 δ,防止单次更新幅度过大导致策略崩溃或安全需求被破坏。

Q6. 哪些场景适合使用安全屏蔽机制?

多选题 · mid

  • A.需要实时响应的机械臂防碰撞← 正确答案
  • B.高风险且模型不完全可靠的系统← 正确答案
  • C.对延迟敏感的触觉反馈控制← 正确答案
  • D.只需在仿真中离线测试的模型

答案:ABC。屏蔽器适合实时、高风险、执行时安全极为关键的场景。D选项的离线测试模型不涉及运行时的安全保障,不需要部署屏蔽器。

Q7. 传统RL在机器人任务中的安全隐患有?

多选题 · mid

  • A.探索阶段可能尝试危险动作← 正确答案
  • B.奖励函数难以覆盖所有安全约束← 正确答案
  • C.策略更新可能瞬间跳入危险区域← 正确答案
  • D.训练速度过快导致硬件过热

答案:ABC。传统RL的探索机制、奖励塑形的局限性以及无约束的策略更新都可能导致危险动作。D项的“硬件过热”是工程问题,并非RL算法本身的安全缺陷。

Q8. 在CMDP目标函数中,安全预算上限d的含义是?

单选题 · hard

  • A.每一步允许的最大即时奖励
  • B.整个轨迹上可接受的安全成本总和← 正确答案
  • C.状态空间的状态总数上限
  • D.折扣因子γ的最大容许值

答案:B。d 是约束阈值,限制了策略在整个交互过程中累积安全成本的总和上限,例如“整个搬运任务中最多出现1次危险接近”。A、C、D都与d的定义不符。

Q9. 软约束中权衡系数λ增大表示?

单选题 · mid

  • A.更看重任务性能的快速提升
  • B.更看重安全约束的满足程度← 正确答案
  • C.训练迭代次数会成倍增加
  • D.环境奖励信号会自动增强

答案:B。λ 是安全成本项的权重,λ 增大时优化器会更努力降低安全成本,即使代价是损失部分任务奖励。这与性能优先或训练次数无关。

Q10. 安全RL在真实机器人落地时面临的挑战有?

多选题 · hard

  • A.仿真到现实的迁移存在鸿沟← 正确答案
  • B.环境不确定性可能导致约束违反← 正确答案
  • C.硬件故障可能引发执行层失控← 正确答案
  • D.计算量一定比普通RL小得多

答案:ABC。仿真训练的策略在真实环境中可能因感知误差违反约束,硬件故障更是安全执行的重大威胁。D项错误,安全RL通常需要额外的监督与验证模块,计算量往往更大而非更小。