WorldSense 技术笔记

政策侧接口(上):Contract 立起来之后、VLA / Diffusion Policy / π0 到底吃什么?

2026年9月15日 · 阅读约85分钟 · 具身智能, 策略学习, VLA, Diffusion Policy, π0, RT-2, OpenVLA, Action Tokenization, Structured State Contract, Consumer Contract, Consumer Contract Triple, Declared Quotient, Query Family, Query Subsumption, Schema Compatibility, Semantic Preservation, Decision-Relevant Preservation, Decision Sufficiency, Conditional Mutual Information, Residual Contract Information, Declared Coverage Loss, Projection Residual Loss, Decision Collapse Rate, Safety Obligation, Contract-Read Primitives, Measurable Decoder, Separately Auditable Failure Sites, Contract Consumer
目录

拼起来不等于看懂:机器人多模态融合缺的不是模型、是接口:那一篇把多模态融合从"融合时机"问题拉回到"融合之后交付什么"、并把这份交付立成一个契约对象——Structured State Contract——一个携带 hypothesis、provenance、observability、availability / validity / age、contact set 与 negative evidence 的结构化状态。收在那句 claim 上:A good multimodal system must represent disagreement, not merely resolve it. 这一篇问它的对偶:如果上游真的按 contract 交付、policy 侧到底能不能吃到

短答:structured estimator output 不意味着 structured policy input。中间存在一层显式的 projection $\Pi_\pi$、它本身就是一个可能破坏语义的接口。VLA 用 tokenizer、Diffusion Policy 用 image-encoder + proprio concat、classical head 用手工 state vector——三种 projection 各自破坏 contract 的不同切片、并且破坏发生得无声无息:loss 曲线照样往下走、eval 分数照样往上涨、你从训练日志里看不出被压掉了什么。这不是模型规模的问题、是接口的问题——但问题不在"哪个模型会 collapse"问题在"没有一种架构对 contract-relevant semantics 作了显式 preservation guarantee"。这一区分是本文与常见 “architecture critique” 类文章的分水岭。

本文不推销某个具体 backbone、不反对 end-to-end learning、也不主张"某族天生比另一族更好"。本文的核心 thesis 更 general 也更可验证:任何 policy architecture 都需要回答——它的 input projection 是否保持上游 contract 中 decision-relevant 的语义? 这个问题一旦被摆到台面上、“VLA 还是 Diffusion Policy"这种表层争论就自动降级成了一个具体设计决策、而不是立场站队。

0. 全文框架:$\mathcal C\to(\mathcal C_\pi,Q_{\mathcal C_\pi})\to q_\pi\to e_\pi\to\pi_\theta\to g_{\mathrm{safety}}$ 是一个可审计的 semantic pipeline

先把整篇的分析框架摆在开头、后面每一节都会回到这张图。这一节立起本文真正的形式对象——三层 quotient 声明链 $\mathcal C\to\mathcal C_\pi\to{\sim_\pi}\to q_\pi$、schema compatibility 规则三档 preservation(full / decision-relevant / decision sufficiency)、conditional-MI 形式的 residual contract information $L_{\mathcal C}^{\pi}$、以及三个 semantic losses + 一个 safety obligation(不再是"三层 loss”)。

0.1 论证主线

Structured State Contract  Ŝ_t                                (9/14 定义)
upstream contract  C                                          (完整语义、estimator 侧交付)
        │  declare + version check
consumer contract  C_π  ⊆ C                                    (policy 声明"我只承担 C 的哪一部分"、附 supported_version)
        │  induce
equivalence  ~_π  on  Ŝ                                        (由声明过的 query family Q_{C_π} 定义)
        │  quotient
declared quotient  q_π :  Ŝ  ↦  [Ŝ]_{~_π}                     (允许丢什么的显式声明、不是神经网络)
neural encoding  e_π :  [Ŝ]_{~_π}  ↦  z_π                     (现有 policy 都在做、但没有 q_π 的语义账本)
policy head  π_θ :  (z_π, o, ℓ)  ↦  a                          (第三个可能被无声绕过的层)
safety layer  g_safety :  (a, evidence_j)  ↦  a_applied          (第四个槽位:不是 information loss、是 obligation)
三个 semantic losses + 一个 safety obligation 分别审计
   ├─ L_declared     q_π  声明覆盖不足(weighted undeclared-query loss)
   ├─ L_projection   Π_π  在侧信息给定的条件下还剩多少 contract 信息
   ├─ L_decision     π_θ  decision-relevant pair 被折叠的 rate
   └─ O_safety       g_safety  invalid / unknown evidence 是否触发保守反应
三条 contract-relevant invariants
   ├─ mode          多 hypothesis 的结构             ──▶  primitive: mode_select
   ├─ temporal      异质 staleness / health 的分布    ──▶  primitive: age_gate
   └─ source        provenance / dependency / 负证据  ──▶  primitives: provenance / dependency / negative evidence
训练(conditional representation-side probe + Type I equivariance / Type II order-constrained / Type III unconstrained)
部署(safety filter 读 constraint-relevant certification、invalid evidence ALONE cannot justify relaxing constraint)
评估(四种 compliance evidence:semantic / representation / decision / safety;CAG 是 decision 层聚合、需 oracle baseline 界定、且必须固定 retraining protocol)

0.2 三层 quotient 声明链:$\mathcal C\to\mathcal C_\pi\to{\sim_\pi}\to q_\pi$

上一版把 $\Pi_\pi$ 拆成 $e_\pi\circ q_\pi$ 两层——那一版接受 reviewer 的批评、$q_\pi$ 的责任仍然过重、“quotient 到底谁定义"没有被回答。v4 把 $q_\pi$ 前面再垫两层、变成一条可审计的三层声明链

$$\boxed{\;\mathcal C\;\xrightarrow{\text{declare}}\;\mathcal C_\pi\;\xrightarrow{\text{induce}}\;{\sim_\pi}\;\xrightarrow{\text{quotient}}\;q_\pi\;}$$

其中:

$$\hat S \sim_\pi \hat S' \quad\Longleftrightarrow\quad Q_{\mathcal C_\pi}(\hat S) \;=\; Q_{\mathcal C_\pi}(\hat S').$$

$Q_{\mathcal C_\pi}$ 是本文真正的接口对象——它把"允许丢什么"从模糊的语义承诺变成一组可以逐条 review 的 queries。典型例子:"$\hat S$ 里第 $c$ 通道的 age 是多少”、“这个 track 的 posterior-weighted top-3 hypothesis 是哪三个”、“contact set 是否包含 pad 面”。

有了这条链、本文的核心主张终于可以写成一句 reviewer 无法追问"quotient 谁定义"的话:

Policy does not need to preserve the entire upstream contract $\mathcal C$. It must explicitly declare a consumer contract $\mathcal C_\pi$ together with a query family $Q_{\mathcal C_\pi}$ — and the resulting quotient $q_\pi$ is exactly the semantic loss the policy is allowed to take.

对比上一版那句"要么保留整个商结构、要么声明 sufficient quotient"——这一版给出了**“quotient 从哪来”的完整答案:它来自一份写下来的** $\mathcal C_\pi$、加上一份可枚举的 $Q_{\mathcal C_\pi}$。

$\Pi_\pi$ 仍然等于 $e_\pi\circ q_\pi$、但 $q_\pi$ 不再是 primitive、它由 ${\sim_\pi}$ 唯一决定、而 ${\sim_\pi}$ 由 $\mathcal C_\pi$ 诱导。工程上这意味着:接口文档里必须能贴出一张 $Q_{\mathcal C_\pi}$ 清单、否则 $q_\pi$ 就退化成 encoder 里的隐式行为——正是本文要攻击的对象。

v6 补·Consumer Contract 的三段式分解。上一版本 $\mathcal C_\pi$ 只写了"$\mathcal C$ 的一个子集 / coarse-graining"、reviewer 抓得对:这只说了 policy 要读什么、没说 policy 对这些 semantics 承担什么义务、也没说 policy 认识哪个 schema version。v6 把 $\mathcal C_\pi$ 明确拆成三段:

$$\boxed{\;\mathcal C_\pi \;=\; \big(Q_\pi,\;\mathcal O_\pi,\;V_\pi\big),\;}$$

其中

这一分解让 Consumer Contract 长得更像真正的 software interface、而不只是一个 ML abstraction:

Consumer Contract  C_π
├── Q_π   Queries       What I read
├── O_π   Obligations   How I must respond
└── V_π   Versions      Which schema I understand

reviewer 后续追问"你说 policy 是 consumer、consumer 到底承诺了什么"、v6 有确切的答案:它承诺 $Q_\pi$ 里的字段它都读、$\mathcal O_\pi$ 里的响应它都遵守、$V_\pi$ 里的 schema 它都兼容。缺任何一段都不算一份完整的 consumer contract。

0.2.3 Schema version / compatibility(v5 新增 · 即 $V_\pi$ 段)

有了 $\mathcal C_\pi$ 与 $Q_{\mathcal C_\pi}$、必须再回答一个 software-interface 层面的问题:Consumer contract 是针对哪个 schema version 的? Estimator 升到 $\mathcal C$ 的 v2(新增 observability / negative_evidence / sensor_health)、如果 policy 的 $\mathcal C_\pi$ 还停在 v1、当前框架就会默默丢掉新增字段——这正是本文全文批评的 undeclared semantic loss。所以接口层再加一条小规则:

$$\boxed{\;\mathrm{schema\_version}(\mathcal C)\;\not\simeq\;\mathrm{supported\_version}(\mathcal C_\pi)\;\;\Longrightarrow\;\;\text{reject / explicit adapter required.}\;}$$

也就是:schema mismatch must fail closed or pass through an explicitly declared adapter——不兼容时要么拒绝加载 policy、要么必须走一份写下来的 adapter(把 v2 新增字段显式映射到 v1 已有 slot 或显式声明丢弃、并附一条 $\mathcal C_\pi^{v2} = \mathrm{adapt}(\mathcal C^{v2},\mathcal C_\pi^{v1})$ 规约)。这一条让 “contract” 这个词真正具有 software-interface 的味道、而不是只停留在 ML abstraction。

0.2.1 三档 preservation:full semantic / decision-relevant semantic / decision sufficiency

这一小节是本文的理论锚点、必须把三个容易混用的性质彻底分开。v6 对这一段做两处关键补定义(reviewer 抓得对):第一、$\equiv$ 在 A 与 A′ 里从未定义、是悬空符号;第二、$Y_\pi$ 到底是什么必须真正绑到 Consumer Contract、不能是一个凭空的 latent variable

v6 补定义 · decision-relevant observable $Y_{\mathcal C}^{\pi}$。上一版写 $Y_{\mathcal{C}}$ / $Y_\pi$、含义模糊。v6 把它锁定:

$$\boxed{\;Y_{\mathcal C}^{\pi} \;=\; \big\{q(\hat S) : q \in Q_{\mathcal C}^{\mathrm{req}},\;\text{$q$ influences consumer decision}\big\}.\;}$$

也就是:$Y_{\mathcal C}^{\pi}$ 是 required queries 里真正影响 consumer decision 的那部分输出——太宽($Y_{\mathcal C}^{\pi}=\hat S$)会退化成"别丢任何 contract 信息"、太窄($Y_{\mathcal C}^{\pi}=\text{current optimal action}$)会变成 decision sufficiency、不再是 contract semantics。$Y_{\mathcal C}^{\pi}$ 恰好是 Consumer Contract 思想应该吃掉的数学对象。

v6 补定义 · representation equivalence $\sim_Z$。A 与 A′ 里的 $\Pi_\pi(\hat S)\not\equiv\Pi_\pi(\hat S')$ 不能只是"数值不同"——否则任何 floating-point rounding 都算"preservation"。v6 定义:

$$Z_\pi(\hat S) \sim_Z Z_\pi(\hat S') \quad\Longleftrightarrow\quad \nexists\;\text{measurable decoder } h_\pi(Z_\pi,O,L)\;\text{s.t.}\; h_\pi \text{ distinguishes } \hat S \text{ from } \hat S' \text{ on } Y_{\mathcal C}^{\pi}.$$

用一句话讲:如果下游 decision 在声明过的 consumer 下无法区分两份 representation、那它们就是 representation-equivalent。这一条与 $L_{\mathcal C}^{\pi}=I(Y_{\mathcal C}^{\pi};\hat S\mid Z_\pi,O,L)$ 天然接线——$L_{\mathcal C}^{\pi}=0$ 等价于 $Z_\pi(\hat S)\sim_Z Z_\pi(\hat S')$ 对所有 $Y_{\mathcal C}^{\pi}$-不等的 $(\hat S,\hat S')$ 都成立。

Property A · Full Semantic Preservation——投影在 contract-equivalent class 之间不做不可逆折叠:

$$\hat S \not\sim_\pi \hat S' \quad \Longrightarrow \quad Z_\pi(\hat S) \not\sim_Z Z_\pi(\hat S').$$

这要求 $q_\pi$ 在 $\mathcal C_\pi$ 定义的商上 injective、且 $e_\pi$ 不把不同 class 映到 $\sim_Z$-等价的 $Z_\pi$。是一个很强的性质、但可能 over-preserving

一个具体的反例(reviewer 提的、v4 接受):两个 hypothesis

$$H_1 = \text{"object at } x = 1.00\text{"},\qquad H_2 = \text{"object at } x = 1.01\text{"}.$$

从 estimator semantic contract 看、$H_1\not\sim H_2$。但如果下游 controller 的 action space 分辨率只有 5 cm、那么

$$\mathcal A^{*}(H_1) \;=\; \mathcal A^{*}(H_2).$$

此时 policy 把 $H_1, H_2$ 折叠起来完全合理——强行要求 full semantic preservation 反而会给接口加上不必要的负担

Property A′ · Decision-Relevant Semantic Preservation(本文真正的接口 criterion)——只在会导致下游 action 或 safety 后果不同的 distinctions 上要求 injective。用 $\mathcal A^{*}$(optimal / admissible action set)与 $\mathcal G^{*}$(safety guardrail consequences)定义一个 decision-level equivalence:

$$\hat S \sim_{\pi,\mathcal D} \hat S' \quad\Longleftrightarrow\quad \begin{cases} \mathcal A^{*}(\hat S) \;=\; \mathcal A^{*}(\hat S')\\[1mm] \mathcal G^{*}(\hat S) \;=\; \mathcal G^{*}(\hat S') \end{cases}$$

decision-relevant preservation 写作:

$$\hat S \not\sim_{\pi,\mathcal D} \hat S' \quad\Longrightarrow\quad Z_\pi(\hat S) \not\sim_Z Z_\pi(\hat S').$$

因为 $\sim_{\pi,\mathcal D}$ 比 $\sim_\pi$ 更粗、Property A 蕴含 Property A′、反之不成立。这就是本文真正想要的接口要求。

Property B · Decision Sufficiency (conditional MI form)——用条件互信息衡量"给定 policy 已经拥有的 side information、projection 后 $Y_{\mathcal C}^{\pi}$ 里还剩多少 contract 信息"。上一版写成 $L_{\mathrm{dec}} = I(\hat S;Y_{\mathcal C}) - I(\Pi_\pi(\hat S);Y_{\mathcal C})$、reviewer 抓到了致命问题:policy 的完整输入是 $\pi(a\mid \hat S, o, \ell, \text{language})$、raw image $o$ 里往往已经带了 age / provenance 的 proxy。差分形式下 $L_{\mathrm{dec}} > 0$ 只说明"$\Pi_\pi(\hat S)$ 单独看对 $Y_{\mathcal C}$ 不是充分统计"、并不说明 policy 真的缺信息(信息可能已经从 $o$ 补回来了)。

v5 把 contract information loss 重定义为条件 MI、v6 把其中的 $Y_\pi$ 锁定为 $Y_{\mathcal C}^{\pi}$:

$$\boxed{\;L_{\mathcal C}^{\pi} \;=\; I\!\big(Y_{\mathcal C}^{\pi}\,;\,\hat S \,\big|\, Z_\pi,\, O,\, L\big),\qquad Z_\pi = \Pi_\pi(\hat S, O, L).\;}$$

(若 projection 只作用在 contract 上、可以把 $Z_\pi$ 简化为 $\Pi_\pi(\hat S)$。)这个定义干净得多:

三者的关系(v5 补上适用条件)

$$\text{Full semantic preservation}\;\Longrightarrow\;\text{Decision-relevant preservation}$$

无条件成立的(因为 $\sim_{\pi,\mathcal D}$ 比 $\sim_\pi$ 更粗、pointwise injective 从前者直接推到后者)。但第二支箭头:

$$\boxed{\;\text{Decision-relevant preservation}\;\Longrightarrow\;\text{Decision sufficiency}\quad\text{only under the declared evaluation distribution.}\;}$$

不再写成 unconditional theorem。原因(reviewer 抓得很准):preservation 是 pointwise distinction statement、sufficiency 是在某个 $P(\hat S, O, L)$ 下的 conditional independence、两者不同类。加上 evaluation distribution 假设之后可以这样说:在 benchmark distribution 下、并假设 $Y_\pi$ 是充分的 decision descriptor、decision-relevant preservation 蕴含 decision sufficiency。少了这个限定、就会被数学 reviewer 拆开问"preservation 是对所有 $\hat S$ 的 statement、你怎么推到 distribution-level conditional independence"。

反过来都不成立。Decision sufficiency 是最弱的性质、$L_{\mathcal C}^{\pi}=0$ 允许 policy 在 $Y_\pi$ 不区分的两个 $\hat S$ 上折叠;decision-relevant preservation 居中、只保护会引起 action / safety 差异的 distinctions;full semantic preservation 最强、是一个 diagnostic property、而不是接口 requirement。

于是本文的 killer 一句应该这么写:

Decision-relevant semantic preservation is the actual interface requirement; full semantic preservation is a stronger diagnostic property; decision sufficiency is a weaker consequence (under the declared evaluation distribution).

Policy 可以丢 information、但必须 either (a) preserve decision-relevant contract semantics, or (b) explicitly declare $\mathcal C_\pi$ + $Q_{\mathcal C_\pi}$、使得丢掉的 distinctions 被 $Q_{\mathcal C_\pi}$ 承认不在其关心的范围里。未经声明地丢掉 decision-relevant contract semantics、才是接口违规。

0.2.2 三个 semantic losses + 一个 safety obligation(v5 重写)

v4 把整条 pipeline 拆到 $q_\pi$ / $e_\pi$ / $\pi_\theta$ 三层、每层配一个 loss——但 reviewer 抓得对:这个"三层 loss"框架有两个 type mismatch、而且把 safety 错当成 loss。v5 一次改三处:

结构层面:pipeline 已经是四层 $\mathcal C\to(\mathcal C_\pi, Q_{\mathcal C_\pi})\to q_\pi\to e_\pi\to\pi_\theta\to g_{\mathrm{safety}}$、其中safety 不是 information loss、是一种 obligation。所以本文最终框架不是"三层 loss"、而是 “三个 semantic losses + 一个 safety obligation”

$$\boxed{\;\mathcal C\;\longrightarrow\;(\mathcal C_\pi, Q_{\mathcal C_\pi})\;\longrightarrow\;q_\pi\;\longrightarrow\;e_\pi\;\longrightarrow\;\pi_\theta\;\longrightarrow\;g_{\mathrm{safety}}\;\longrightarrow\;a.\;}$$

对象层面:v4 的 $L_{\mathrm{declared}}$ 与 $L_{\mathrm{decision}}$ 都是错的、v5 分别重写。

(1) $L_{\mathrm{declared}}$ 从 entropy 差分降级为 weighted undeclared-query coverage(v6 二次升级 · query subsumption)。v4 的 $H(Q_{\mathcal C}(Y_{\mathcal C})) - H(Q_{\mathcal C_\pi}(Y_{\mathcal C}))$ 有三个问题:$Q_{\mathcal C}(Y_{\mathcal C})$ 里的 random variable 从未定义、entropy 差分不一定非负(query 数量 / 编码 / 基数都会改变 entropy)、而且 $q_\pi$ 的核心语义是"声明哪些 distinctions 允许被丢"、天然是一个 coverage / violation set、不是一个 scalar entropy。v5 直接把它写成集合 $\mathfrak D_\pi = Q_{\mathcal C}^{\mathrm{req}}\setminus Q_{\mathcal C_\pi}$——但 v6 reviewer 又抓一步:“两条 query 相等"这件事本身就不是 set membership。例:

所以 $q \notin Q_{\mathcal C_\pi}$ 不能只是字面集合成员。v6 引入 query subsumption 序

$$q_1 \succeq q_2 \quad:\!\!\Longleftrightarrow\quad \text{$q_1$ 所保留的信息足以让 consumer 在任何 side information 下回答 $q_2$}$$

(formally:$\exists$ measurable $h$ 使 $h(q_1(\hat S)) = q_2(\hat S)$、或更弱的 conditional 版本 $H(q_2 \mid q_1) \le \varepsilon$。)于是 coverage 变成:

$$\boxed{\;L_{\mathrm{declared}} \;=\; \sum_{q\,\in\, Q_{\mathcal C}^{\mathrm{req}}} w_q\,\mathbf 1\!\Big[\nexists\, q' \in Q_{\mathcal C_\pi}:\;q' \succeq q\Big]\;}$$

这一步把 $L_{\mathrm{declared}}$ 从一个 checklist 升级成一个 semantic capability lattice——$Q_{\mathcal C}^{\mathrm{req}}$ 与 $Q_{\mathcal C_\pi}$ 都在同一个 subsumption 偏序上、“允许丢什么"变成"consumer 声明的 capability 上界 $\{q' : q' \succeq q \text{ for some } q \in Q_{\mathcal C}^{\mathrm{req}}\}$ 是否覆盖 required 集合”。$w_q$ 是 task-side 权重:frame semantics 高、age 中高、provenance task-dependent、跟当前 controller 完全无关的 diagnostic field 低。最粗的 cardinality 版本 ($q' \succeq q \Leftrightarrow q' = q$) 就是 v5 的 $w_q \equiv 1$ 特例。这样"审 $q_\pi$“就变成对着 $Q_{\mathcal C}^{\mathrm{req}}$ 沿 subsumption 逐条查上界覆盖、不再依赖 entropy 定义、也不再被"字面 query 不等价"这种工程细节误伤。

(2) $L_{\mathrm{rep}}$ 改名 $L_{\mathrm{projection}}$、明确它是 residual contract information 而不是 encoder loss。v4 里 $Z_\pi = \Pi_\pi(\hat S, O, L)$ 已经是"整条 projection 的输出”、不只是 encoder $e_\pi$ 的输出、所以把它叫 representation loss 是把数学对象与 pipeline layer 强行 1:1 绑定。v5 直接改名、v6 把其中的 $Y_\pi$ 锁定成 §0.2.1 已经定义的 $Y_{\mathcal C}^{\pi}$

$$\boxed{\;L_{\mathrm{projection}} \;=\; I\!\big(Y_{\mathcal C}^{\pi}\,;\,\hat S \,\big|\, Z_\pi,\, O,\, L\big),\qquad Y_{\mathcal C}^{\pi} = \{q(\hat S): q \in Q_{\mathcal C}^{\mathrm{req}},\;q \text{ influences consumer decision}\}.\;}$$

语义是 “projection 之后的 residual contract information”——可以 operationalize 为 representation-stage loss、但不宣称它就是 $e_\pi$ 那一段的损失。$Y_{\mathcal C}^{\pi}$ 由 Consumer Contract 定义、不是 benchmark 里凭空的 latent——这是本文 Consumer Contract 思想最应该吃掉的数学对象。

(3) $L_{\mathrm{decision}}$ 从"supremum norm"降级为 action-relevant collapse rate。v4 的 $\sup_{\hat S \not\sim_{\pi,\mathcal D} \hat S'} \|\pi_\theta(\hat S) - \pi_\theta(\hat S')\|_{\text{action-distribution}}^{\!\perp}$ 是类型错误——norm 是距离、不是"pair 集合大小”。v5 把它写成 collapse rate:

$$\mathcal R_{\mathcal D} \;=\; \big\{(\hat S, \hat S') : \hat S \not\sim_{\pi,\mathcal D} \hat S'\big\}$$$$\boxed{\;L_{\mathrm{decision}} \;=\; \mathbb E_{(\hat S,\hat S')\sim\mathcal R_{\mathcal D}}\!\Big[\mathbf 1\!\big(D_{\mathcal A}(\pi_\theta(\cdot\mid \hat S),\,\pi_\theta(\cdot\mid \hat S')) < \epsilon\big)\Big]\;}$$

其中 $D_{\mathcal A}$ 不是普通的 distribution distance——它测的是"两份 action distribution 是否支持不同的 admissible / optimal action set"。这一改把 reviewer 的哲学 objection 一起接了:如果 $\mathcal A^*(\hat S_1) \neq \mathcal A^*(\hat S_2)$、但两个 state 的公共交集里存在一个 action 都 admissible、policy 输出那个共同 action 是合法的、$D_{\mathcal A}$ 应该识别这种情况、不当作 collapse。软阈值版本可以写成 $\mathbb E_{\mathcal R_{\mathcal D}}[\exp(-D_{\mathcal A}(\cdot))]$。$D_{\mathcal A}$ 与 下篇 §2.2 HPC / HSS 的语义闭环:HPC 测 coverage、HSS 测 separation、$L_{\mathrm{decision}}$ 测两者的失败率

(4) $\mathcal O_{\mathrm{safety}}$ 是 obligation、不是 loss。safety 那一层不做"信息损失"的度量、它做的是**“当 evidence 不足或 unknown 时、filter 有没有采取保守反应”**的义务判定(详见 下篇 §1.3 三态 certification 与 下篇 §2.6 safety evidence)。它是第四类量、不能与三个 loss 混称

Slot语义FailureObject
$q_\pi$声明允许丢什么Declared coverage loss:$Q_{\mathcal C_\pi}$ 沿 subsumption 没有覆盖 required query$L_{\mathrm{declared}} = \sum w_q \mathbf 1[\nexists q' \in Q_{\mathcal C_\pi}: q' \succeq q]$
$\Pi_\pi$projection 之后条件 residualProjection residual:条件 MI > 0$L_{\mathrm{projection}} = I(Y_{\mathcal C}^{\pi};\hat S\mid Z_\pi,O,L)$
$\pi_\theta$decision 是否用被保住的 distinctionsDecision collapse rate:action-relevant pair 折叠的比例$L_{\mathrm{decision}} = \mathbb E_{\mathcal R_{\mathcal D}}[\mathbf 1[D_{\mathcal A} < \epsilon]]$
$g_{\mathrm{safety}}$evidence 不足时的义务反应Safety obligation violation:unknown / invalid 时没收紧$\mathcal O_{\mathrm{safety}}$

$\Pi_\pi$ injective 不蕴含 $L_{\mathrm{decision}} = 0$——三个 loss 是三个可分别审计的 failure sites不是三个 statistical independent losses。这一点 v6 reviewer 抓得很准:$L_{\mathrm{declared}}$、$L_{\mathrm{projection}}$、$L_{\mathrm{decision}}$ 在数学上是通过 $q_\pi \to \Pi_\pi \to \pi_\theta$ 顺序耦合的——上游 declaration 变了、下游"允许的 quotient"也跟着变、三者不可能随机变量独立。“independently” 全文改为 “separately auditable”:它们各自定位到一个可打开审计的 pipeline 站点、而不是三者统计独立。下篇 §2 的四种 compliance evidence 与 下篇 §2.0 的 skeleton table 都会直接引用这三个 loss + 一个 obligation。

0.3 本文上半的两条 boxed claim(Claim 3 与下篇见 9/16)

Claim 1 · Contract semantics can be lost at the policy boundary. A structured estimator output does not imply a structured policy input. 完整 pipeline $\mathcal C\to(\mathcal C_\pi,Q_{\mathcal C_\pi})\to q_\pi\to e_\pi\to\pi_\theta\to g_{\mathrm{safety}}$ 是一个可审计的 semantic interface、三个 loss 分别落在 $q_\pi$ / $\Pi_\pi$ / $\pi_\theta$ 上、第四个槽位是 safety obligation 而不是 loss。这就是本文定级 thesis 的雏形——A policy is a contract consumer, not merely a function approximator

Claim 2 · Contract preservation is not architecture-specific. Engineered-state head、latent visuomotor policy、VLA / diffusion / flow policy 用的 conditioning 与 action generator 机制都不一样、但它们作为 contract consumer 都必须回答同一组四个问题——what may I discard ($q_\pi$)? what did I actually retain ($\Pi_\pi$, $L_{\mathrm{projection}}$)? how should decisions respond to contract interventions ($\pi_\theta$, $L_{\mathrm{decision}}$)? what happens when evidence becomes invalid or unknown ($g_{\mathrm{safety}}$, $\mathcal O_{\mathrm{safety}}$)? 攻击的对象是 interface contract、不是模型架构。

1. 两种维度、而不是三个家族:conditioning representation / semantic interface × action head

本文位置说明(v6 P1-18 加):§1–§3 是接口理论的 implementation coordinates、不是核心论证本身。§0 已经把 $\mathcal C \to (\mathcal C_\pi, Q_{\mathcal C_\pi}) \to q_\pi \to e_\pi \to \pi_\theta \to g_{\mathrm{safety}}$ 这条 pipeline、三档 preservation、三个 loss + 一个 obligation 讲清楚;§4 起进 primitives、下篇 §1 起进训练与部署、下篇 §2 起进 benchmark。§1–§3 只是给"现有 policy 到底落在 pipeline 哪一格"提供一个具体坐标、读者若已经熟悉 VLA / Diffusion / flow / ACT / engineered-head 家族、可以直接跳到 §4。这一节的存在不是为了 architecture ranking、是为了让 §0 定义的 pipeline 与实际系统对上号。

旧版把 “VLA / Diffusion Policy / engineered head” 当成三个互斥家族、这个 taxonomy 有点粗糙——π0 就是 VLA + flow matching、既在 VLA 那一列也在 diffusion/flow 那一列。这一节改成两个正交维度、policy 家族的选择就变成 grid 上的一个坐标、而不是一个立场。

1.1 两个正交维度

维度 1 · Conditioning representation / semantic interface——policy 用什么形态读上游信息。注意这一列不是纯 representation 分类、structured contract 那一档同时携带 representation + semantic schema + provenance + validity + semantics、所以列名必须写成 “representation / semantic interface”、否则会被 reviewer 指为混层。四类典型:

维度 2 · Action head——policy 怎么产生 action 分布。五类典型:

上一版把 ACT 塞在 “generative action chunk” 那一栏容易被误读成"ACT 属于 diffusion 家族"、这一版把它单列出来、与 diffusion / flow 并列。

1.2 Grid

代表 policyConditioning representation / semantic interfaceAction head破坏 contract 的位置(本文 schema 下的分析)
Classical SAC/PPO headengineered stateGaussian / deterministic最小、字段人工写;但字段设计本身是艺术、跨任务差
Visual-obs PPO / DrQvisual latentGaussian$z_t$ 一压、provenance / age / hypothesis 通常已经丢
Diffusion Policy (Chi 2023)visual + proprio latentdiffusion本文 schema 下:action-side multimodality OK、但 state-side 多 hypothesis 没有 slot
ACT / ALOHA (Zhao 2023)visual + proprio latentgenerative sequence decoder(CVAE → chunked)与 Diffusion Policy 类似的 conditioning、action generator 是另一族
RT-2multimodal token (VLM)autoregressive action tokensframe / reference_point / convention 会被 tokenize 掉
OpenVLAmultimodal token + proprioautoregressive同 RT-2、proprio 侧多一条通道、但 contract 字段仍无处安放
π0 (Black 2024)multimodal token (VLM conditioning)flow matching(连续 action chunk)本文 schema 下:action 侧连续、但 conditioning 侧仍走 VLM token、无 slot for hypothesis / provenance / age / negative evidence

一句关键区分:Continuous actions do not imply structured state semantics. π0 的 action head 是 flow matching 出来的连续 chunk、听起来很"结构"——但它的 conditioning representation 是 VLM token。注意这里的措辞Under the Structured State Contract defined here, π0’s conditioning interface does not expose an explicit slot for hypothesis, provenance, age, or negative-evidence semantics. 这是本文 schema 下的分析、不是 π0 原论文自己声明的 limitation——π0 论文事实是"预训练 VLA + proprio token + noisy action chunk + flow matching"、contract-level 的批评来自本文的分析视角。同样的 caveat 适用于 Diffusion Policy 与 OpenVLA 那两行的"破坏 contract 位置"栏——它们都是 paper fact + 本文 interface analysis 的混合、不是原论文承认的缺陷

一句 caveat:这不是"哪个组合最好"的排序。本文关心的是每一种组合、它的 $\Pi_\pi = e_\pi \circ q_\pi$ 是否有一个写清楚的 $q_\pi$。答案在多数现有工作里是"没有"——不是某个家族天生不行、是这个 $q_\pi$ 层从来没有被当成接口设计过

2. “State” 在不同 policy 里意味着什么

这一节是术语清障。“state"这个词在具身智能文献里至少有五种互不相同的意思、policy 家族的选择往往就是"它默认哪一种"的选择:

$\pi_{\mathrm{obs}}$:raw observation——图像、点云、力 / 扭矩读数的原始流。绝大多数 imitation learning 训练管线的输入形态、但一般不是 policy 内部实际使用的 state(会被 encode 掉)。

$z_t = f_\phi(o_{:t})$:encoded latent——encoder 之后的低维表示。Diffusion Policy、VLA 的 image tokens、world model 的 RSSM state 都属于这一类。contract 到这里已经经过一次 projection、observability 与 provenance 通常已经丢了。

$b_t$:belief / posterior——POMDP 一脉的显式 belief state。contract 里"多 hypothesis + posterior weight"结构最贴合这个。但主流 VLA / Diffusion Policy 都不显式建模 belief——它被 encoder 隐式近似。

$s_t = (b_t, \pi_t, q_t, h_t)$:9/10 Part 1 定义的 allocation state——belief + policy + budget + hardware。这是决策层的 state、不是 policy 的输入 state。

$\hat S_t$:structured state (contract)——9/14 定义的那个契约对象。

注意、这五样不是同一条流水线上的五个 stage——它们是五种可以互相替代的 abstraction、不同 policy 家族从中挑一种(或几种并联)。上一版画成 $\pi_{\mathrm{obs}}\to z_t\to\hat S_t\to b_t\to s_t$ 一条链、reviewer 抓得对:$\hat S\to b$ 并不是普遍成立的 posterior 关系、而且实际架构常常跳过中间几步——纯 visuomotor 走 $o\to z\to\pi$、engineered head 直接走 $o\to\hat S\to\pi$、端到端 VLA 事实上停在 $o\to\text{token}\to\pi$。更合适的图是一棵abstraction tree

                            ┌── visual latent   z_t         ──┐
                            │                                  │
Raw observation  π_obs  ────┼── multimodal token (VLM)         ├───►  policy π_θ
                            │                                  │
                            ├── structured state  Ŝ_t          │
                            │                                  │
                            └── belief / posterior  b_t        ──┘

一句话 caption:These are alternative abstractions, not stages of a universal pipeline.

回到 §0.2 的语言:policy 侧真正的问题、不是"我能不能吃下更长的 token 序列”、而是它选择树上哪一根枝条作为 conditioning input、并把这个选择写成 $\mathcal C_\pi + Q_{\mathcal C_\pi}$。engineered state 走 $\hat S_t$ 那根、visual latent 走 $z_t$ 那根、multimodal token 事实上走一条 $\pi_{\mathrm{obs}}$ 之后立即 tokenize 的第四根——三种走法对应三种 $q_\pi$、不是一种"更聪明"、一种"更笨"

“多模态融合"这个词在 policy 侧的常见误用就是把某根枝条上的 cross-attention 当成"已经在做多模态状态估计”——它不是。真正的 state abstraction 要求 $\hat S_t$ 里的字段跨传感器家族保持一致的语义、可被 controller / policy / world model / diagnostics 四种消费者共同读——9/14 下篇 §2 已经把这个约定立起来了、本节要做的是从 policy 一侧再问一遍:$q_\pi$ 是不是被显式声明过、还是被 $e_\pi$ 悄悄替代了

3. Interface mismatch 的四种失败模式

一旦 §1 的两维坐标落到具体 policy 上、contract 语义会以四种具体失败模式表现出来。这四条不是理论担忧、是部署里真会翻车的东西。四条都是接口层的事实不是某一族的性格缺陷

3.1 Failure 1:Multi-hypothesis 被无声折叠

contract 里同一物理量可能有多个 hypothesis(“这个 track_id 是不是同一个物体”、“这个接触是 pad 还是 edge”)带不同 posterior weight。如果一个 policy 的 $\mathcal C_\pi$ 与 $Q_{\mathcal C_\pi}$ 里没有为 hypothesis 结构显式声明一个 readout slot、$e_\pi$ 就可能在 concat + MLP 的默认动力下把它折成 posterior mean——问题不在"这个模型一定会 collapse"、问题在**“接口没有为多 hypothesis 结构提供 structural guarantee”。许多常见实现(visual latent 路线与 multimodal token 路线都在内)没有提供显式、typed 的 hypothesis readout contract、因此 hypothesis collapse is an unprotected failure mode——没有 slot 不等于一定 collapse、例如 transformer 完全可以把 H1, H2, H3 + weights 编码进 latent;只是这件事没有接口层担保**、能不能成完全取决于训练分布与归纳偏置。这已经是本文需要的最强 claim、再往前一步就会被 reviewer 击中

需要精确化的一点:diffusion / flow-matching 在 action 侧的多模态性、不自动意味着 state-side 多 hypothesis 被保留。action 分布可以是 multimodal(denoising 出来多条 action 轨迹)、但 conditioning 里如果 $\hat S_t$ 的 hypothesis 结构已经被 $e_\pi$ 折叠、action-side multimodality 只是在已经丢了上游区分的输入上做输出侧采样。这两个 multimodality 不是一回事、不能互相担保。

一句改口径的话:本文批评的不是 Diffusion Policy 会 collapse、是"没有架构显式承诺 hypothesis preservation"这件事

3.2 Failure 2:Semantic correctness 缺乏接口层保证

contract 里的 frame 字段(orientation_frame: "tool_flange"reference_point: "contact_center"convention: "right-handed")进入 policy 时、若被 tokenizer 变成 token 序列——注意、这里的问题不是"transformer 学不到 frame transform"。理论上 transformer 完全可以通过 attention + MLP 学出 $\tau_{p_2} = \tau_{p_1} + (p_1 - p_2) \times f$ 这类硬约束。真正的问题是、tokenization 本身不提供任何"这个变换被以正确方式解释"的接口层保证。模型可以学到、也可能学到、取决于训练分布是否覆盖 frame 变更的对照样本、取决于 architecture 是否归纳偏置友好、取决于有没有 auxiliary constraint 显式施加这一约束。

但更重要的是:这个 failure mode 不是 tokenizer 的专属问题。一个 engineered vector [force_x, force_y, force_z, frame_id] 完全可以被 MLP 学坏——frame_id 变成一个 embedding 之后、MLP 一样可能把它当常量、或者只在训练分布覆盖到的那几个 id 上学对。真正的 abstraction 是 representation + semantic constraint、不是 tokenization 本身。把 Failure 2 归罪于 tokenizer 会掩盖本文 thesis 的 architecture-independence 一面。

一个具体形态:真机部署里把 wrench 的 reference_pointsensor_flange 改成 contact_center——数据前处理管线换了、token 序列几乎一模一样、但 $\tau$ 数值按 transport theorem 变了一大块。VLA 在这两个"看起来同分布"的 dataset 上分别训练、可能分别收敛到相似但都错的 policy。“都错"不是因为 transformer 学不了 frame transform、是因为训练数据里没有足够的 frame-contrast pair 让它学到、并且没有任何约束强制它学。这类 bug 只在部署后、cross-dataset / cross-embodiment 复用时才暴露。

改口径的关键句:tokenization 不抹掉语义、它只是把语义从"接口保证"降级成了"训练经验”——engineered vector 也会做同样的降级。这是本文与"tokenizer 就是不行"这种直觉的分水岭。

3.3 Failure 3:Temporal alignment broken by concat

contract 里不同 channel 的 age 是显式的(例如 proprio 1 ms、F/T 5 ms、vision 100 ms、tactile 30 ms)。若 policy 只看到 concat 后的向量、$\Delta t$ 分布就丢了。表现为 policy 用 vision 的"100 ms 前的世界"与 tactile 的"30 ms 前的接触"作决策、以为它们同步;其实 9/14 §4 已经强调过 timestamp sync ≠ causal sync、更不等于 decision-time causal consistency。concat 掩盖的是 $\Delta t$、不是 $\Delta t$ 的语义

3.4 Failure 4:Safety-blindness to validity vs staleness

contract 明确区分 availability(这个通道今天有没有数据)、validity(这个数据是否有效、例如 calibration 是否过期)、age(有多旧)。policy 若只看数值、就把"stale 但 valid"与"missing 但 valid"混成一类、把"calibration drift 后无效"与"传感器掉线"当成同一种降级。9/14 下篇 §4.5 的 degradation chain 已经拆开了——masking ≠ missing ≠ staleness ≠ latency ≠ bias ≠ corruption——policy 若在 input 端不接这个 chain、训练时的 augmentation 与推理时的 guardrail 都会挂错地方。

四条 failure 都是接口问题——换 backbone 不解决、只有把 $q_\pi$ 层显式化才解决。这一点之所以重要、是因为它把"要不要换更大 VLA"这个决策与"policy 侧接口要不要重写"这个决策解耦

4. Policy 需要的三族 contract-read primitives

顺着 §3 的四条 failure、policy 侧真正需要的是三族原语——不是更大的 transformer、不是更多的数据。三族里的第三族(source structure)本身又要再拆三层、见 §4.3。

4.1 mode_select(假设层的读出方式)

面对 contract 里的多 hypothesis posterior、policy 需要在读出时明确选一种:MAP、posterior sample、expected-mixture、或者 mass-preserving top-$k$

$$\text{read}\!\big(\{(\mu_i, \Sigma_i, w_i)\}_{i=1}^{K}\big) \;=\; \left\{\begin{aligned} &\mu_{\arg\max_i w_i} && \text{(MAP、丢弃低权 hypothesis)}\\ &\textstyle\sum_i w_i\, \mu_i && \text{(posterior mean、显式声明的折叠)}\\ &\mu_i + L_i \epsilon,\;\; i \sim w,\;\; \epsilon \sim \mathcal{N}(0, I) && \text{(posterior sample)}\\ &\big\{(\mu_i, \Sigma_i, \tilde w_i)\big\}_{i \in \mathrm{top}\text{-}k} \;\cup\; \{w_{\mathrm{other}}\} && \text{(mass-preserving top-}k\text{)} \end{aligned}\right.$$

v4 把这个 primitive 叫 “calibration-aware top-$k$"、reviewer 抓得准:截断重归一化只解决 probability mass conservation、不解决 calibration。$\sum_i w_i = 1$ 不代表 posterior calibrated。v4 已经把它改叫 mass-preserving top-$k$、calibration 单独走 下篇 §2.2 的评估:

$$\tilde w_i \;=\; \frac{w_i}{\sum_{j \in \mathrm{top}\text{-}k} w_j}, \qquad w_{\mathrm{other}} \;=\; 1 - \sum_{i \in \mathrm{top}\text{-}k} w_i.$$

$\tilde w_i$ 是在 top-$k$ 内部重归一化的权重、$w_{\mathrm{other}}$ 是剩下的残差、两样都保留给下游。

v5 补一句限定(reviewer 抓到 v4 表述过头):$w_{\mathrm{other}}$ 只是一个 aggregate residual mass——它没有告诉下游 residual hypothesis 的位置、covariance、likelihood、component identity。所以 mass-preserving top-$k$ 能保证的是 probability mass accounting(下游至少能区分 retained mass 与 discarded residual mass)、但不能保证 Bayesian update correctness——严格 posterior update 还需要为 residual component 单独定义 sufficient statistics。primitive 层的语义边界就写在这里、不再往前一步。

至于"这份 posterior 到底 calibrate 没 calibrate”、那是评估属性、不是 primitive 的一部分。本文的 calibration diagnostic 挂在 下篇 §2.2 representation-level 上、包含 ECE$_{\text{top-}k}$ / NLL / Brier / calibration curve / coverage-credibility 五条、任何一条都独立于 top-$k$ 截断本身。primitive 层与 evaluation 层完全拆开、reviewer 就不会再问 “What exactly makes your top-$k$ calibration-aware?"。

关键不是"mean 不能用”——mean 是一种完全正当的 readout、只要它是显式声明的折叠。真正的失败模式是"接口没有为 hypothesis 结构提供任何 readout slot、$e_\pi$ 只能靠 concat + MLP 隐式合并、结果把 mean 当成了默认"。这一区分很关键:本文反对的是"无声明的默认折叠"、不是"折叠"本身

4.2 age_gate:observation payload + metadata quintuple + derived trust

接口设计的常见 bug 是把 staleness trust 直接乘进 measurement:$x_c^\pi = \tau_c(\alpha_c) \cdot \mu_c$。这改变了 observation 的物理值——10 N 的力、age 100 ms、被乘成 3 N 之后、policy 输入里"3 N"这个数字看起来就像"3 N 力"、而不是"10 N 力、但 trust 降低"。这直接违反了 contract 想保护的那个 distinction:$(F = 3\,\mathrm{N},\, a = 0)$ 与 $(F = 10\,\mathrm{N},\, \alpha = 100\,\mathrm{ms})$ 是两个不同的语义事件

v4 已经把字段结构重组过、v5 再做一次 notation cleanup(reviewer 抓得好:全文里 $a$ 同时表示 action 与 age、下篇 §2.3 的 $R_\pi(a)$ 特别容易读错)。v5 起、age 字段的符号统一为 $\alpha_c$、availability 字段的符号统一为 $\iota_c$、$\alpha$ 与 $\iota$ 与 $a$(action)不再撞名。

(i) Observation payload——测量值与它的 covariance:

$$\text{payload}_c \;=\; (\mu_c,\;\Sigma_c).$$

只有当 $\iota_c = 1$ 时、这个 payload 存在。$\iota_c = 0$ 意味着 estimator 这一时刻根本没有可以交付的 $\mu_c$、$q_\pi$ 只能读到"no-data"这一 fact。

(ii) Temporal / operational metadata(五元)——描述 payload 是怎么被采集、什么时候、通过哪个传感器、以及时效性的:

$$m_c \;=\; \big(\underbrace{\alpha_c}_{\text{age}},\;\underbrace{\ell_c}_{\text{latency / causal status}},\;\underbrace{h_c}_{\text{sensor health}},\;\underbrace{v_c}_{\text{validity (calibration)}},\;\underbrace{\iota_c}_{\text{availability}}\big).$$

(iii) Derived trust(一条、不是 primitive)——从上面五元算出来:

$$q_c \;=\; \tau_c(\alpha_c,\;\ell_c,\;h_c,\;v_c,\;\iota_c,\;\ldots).$$

省略号允许 task-specific 输入(例如 controller mode、当前 dynamics regime)。$\tau_c$ 具体形态(learned / analytic / piecewise)留在接口外作为 policy-specific 设计决策。

于是完整的 policy input 结构是 “six primitive metadata fields + one derived trust field”——$(\mu_c,\Sigma_c,\alpha_c,\ell_c,h_c,v_c,\iota_c) + q_c$、数得过来、reviewer 不用再问"到底是七个还是八个"。

availability 与 validity 的语义差别——这两个字段 v3 没拉开、reviewer 抓得对。2×2 小表:

$v_c = 1$(valid)$v_c = 0$(invalid)
$\iota_c = 1$(有 payload)正常证据、policy 可以按 §4.1 消费有数据、但不能当 valid evidence 用(例如 calibration 过期)——policy 应该走 下篇 §1.3 safety 侧
$\iota_c = 0$(无 payload)语义上不可能(没数据、validity 位没意义)通道掉线 / masked、policy 读"no observation"这一 fact

一句话:availability $\iota_c$ 说的是"有没有 payload"、validity $v_c$ 说的是"这份 payload 算不算 valid evidence"——两者正交、不能塞进同一个位。下篇 §1.2 的 degradation chain(masking ≠ missing ≠ staleness ≠ latency ≠ bias ≠ corruption)本质上就是这五元 $m_c$ 之间的不同 pattern、这一版把 augmentation 与 slot 一一对上了。

若确实需要在下游做 gating、gating 应该作用在 uncertainty 上、不作用在 measurement 上。但上一版把 $\tilde\Sigma_c = \Sigma_c / \tau_c(\alpha_c)$ 写成"stale ⇒ 有效 uncertainty 被放大"的一般原则、reviewer 也抓到了——真实情况是、stale observation 的正确处理不一定是简单的 inflation、更一般的形式是把 latent state 向前传播

$$p(x_t \mid y_{t-\Delta t}) \;=\; \int p(x_t \mid x_{t-\Delta t})\, p(x_{t-\Delta t} \mid y_{t-\Delta t})\, dx_{t-\Delta t}.$$

机器人静止时 vision age 200 ms、measurement 可能仍然很准;机器人高速运动时同样 200 ms、predictive uncertainty 可能巨大。inflation 与 propagation 是两种不同的处理方式、不是同义词。本文把 $\Sigma / \tau$ 明确定位成 a simple conservative approximation

$$\Sigma_c^{\mathrm{eff}} \;=\; \mathrm{Propagate}\!\big(\Sigma_c,\; \Delta t,\; u_t,\; f_{\mathrm{dyn}}\big) \qquad\text{(一般形式)}$$$$\Sigma_c^{\mathrm{eff}} \;=\; \Sigma_c \,/\, \tau_c(\alpha_c, \ell_c, h_c, v_c, \iota_c) \qquad\text{(一种 conservative approximation)}$$

正确的表述是:staleness should modify the policy’s uncertainty model; uncertainty inflation is one conservative implementation, while predictive state propagation is another。这一版把 $\Sigma / \tau$ 从"canonical"降级为 “one implementation”、并把 Propagate 作为一般形式挂在旁边。$\iota_c$ 与 $v_c$ 并列挂在 metadata 里、不能塞进 $\mu$、也不能塞进 $\tau$。

这一改动看着小、实际上把整个 age_gate 的语义从"打折读数"修正到了"读数 + 关于读数的元信息 + 派生的 trust"——是 §0.2 $L_{\mathcal C}^{\pi}$ 定义的一个具体投影:把 measurement 与关于 measurement 的事实混在一个数值里、就是 $L_{\mathrm{projection}}$ 的直接来源。

4.3 provenance / dependency / negative evidence:三件事拆开、语义层级不同

9/14 下篇 §2.1 里把 contributing_maskcorrelated_withnegative_evidence 都挂在 provenance 下——从 estimator 侧看合理(三者都是"这个字段的来源结构")、但从 policy 侧的读法看、三者的语义层级其实不同:

primitivesemantic rolepolicy 侧怎么读
provenance证据从 wherecontributing_mask 拼进 policy input 作为 conditioning(provenance_harden
dependency证据之间 how statistically relateddependency-aware fusion / conditioning(dependency_aware_fusion
negative evidencewhat expected evidence failed to appearobservability-conditional likelihood ratio(negative_evidence_read

4.3.1 provenance_harden

contributing_mask 直接拼进 policy input。engineered-state head、visual-latent head 都能做(多几维向量)。这一条相对简单、不展开。

4.3.2 dependency_aware_fusion(原 dependency_gate

上一版把 correlated_with 处理成 attention bias、用来 “suppress double-counting”——这个直觉不是总成立的。相关性 ≠ 冗余 ≠ double counting。举个反例:camera depth + tactile contact + F/T wrench 三者高度相关时、恰恰因为它们给出一致证据、才应该得到高 confidence;把这种相关性 suppress 掉是错的。真正的问题是:correlation 有没有在 estimator / uncertainty model 那边被 accounting for——若 $\Sigma_{12}$ 已经在 Kalman-style fusion 里被建模、$P(x \mid y_1, y_2)$ 就自动正确;只有当条件相关结构没建模、才存在 double-counting

因此本文把这条 primitive 从 dependency_gate 升级成 dependency_aware_fusion:它的语义不是"suppress 相关的 token pair"、而是"让 policy 或 fusion 层知道证据之间的统计关系、并做出相应反应"。

attention bias 是众多实现之一、且必须写在 logit-level、不写在 softmax 之后的权重上——v3 写成 $\mathrm{Attn}'_{ij} = \mathrm{Attn}_{ij} - \beta\cdot\mathbb 1[\cdot]$、reviewer 立刻指出:softmax 之后的 attention weight 做减法可能变负、不再是合法概率分布。v4 起把式子挪到 logit 上:

$$L'_{ij} \;=\; L_{ij} \;+\; b(R_{ij}), \qquad A_{ij} \;=\; \operatorname{softmax}_{j}\!\big(L'_{ij}\big).$$

其中 $R_{ij}$ 是从 $Q_{\mathcal C_\pi}$ 里编译出的 field-pair relation 强度(可以是 $\Sigma_{12}$ 相关系数、也可以是 correlated_with 图上的 shortest-path distance)、$b(R)$ 是一个可以是正的、可以是负的、也可以是 learned 的 bias function。

关键差别是:$b$ 的符号与形态不再暗示 “correlated → suppress”——它只是把 dependency relation 作为 operator-level 的输入喂给 fusion、由 $\pi_\theta$ 或下游 loss 决定该怎么反应。这才真正符合 primitive 的名字:dependency-aware fusion、而不是 dependency suppression。

其它实现包括:covariance-aware fusion(把 correlated_with 转成 $\Sigma_{12}$、走 Kalman / factor graph)、hierarchical mixture(把相关字段聚到同一 latent 下、避免被独立采样)、以及让网络自己从 correlated_with 学一个 bias 矩阵(MLP head 的 learned 路径)。

同时老实承认:correlated_with 是 field-level 语义关系、attention bias 是 token-pair relation、两者之间需要一层 $R_{\text{field}} \to R_{\text{token}}$ 的映射、这是一个尚未解决的编译问题、值得作为独立研究方向。本文只把 dependency_aware_fusion 这条 primitive 立起来、上面那条 logit-level bias 公式是"一种实现"、不声称它是 canonical。

4.3.3 negative_evidence_read(likelihood-side evidence)

上一版把 negative evidence 写成 $\Lambda^{-}(H)$、方向硬编码为"没检测到 ⇒ 支持 $\neg H$"——reviewer 抓得对:如果假设 $H$ = “obstacle exists”、$E^-$ = “没有检测到 obstacle”、那么 $\Lambda^-(H) < 0$ 是自然的;但如果 $H$ = “scene is clear”、方向就反过来了。人为规定"negative evidence 一定是正 or 一定是负"是脆弱的。

v4 起把它一般化成一个纯粹的 conditional log-likelihood ratio、负证据只是这个 LLR 的一个特化输入:

$$\boxed{\;\Lambda(E;\,H,\,\mathcal O) \;=\; \log \frac{P(E \mid H,\,\mathcal O)}{P(E \mid \neg H,\,\mathcal O)}.\;}$$

其中 $E$ 是任意一份可观察证据(正证据 $E^+$ = “检测到了”、负证据 $E^-$ = “本应检测到但没有”)、$\mathcal O$ 编码 observability / sensor health / field of regard / calibration status。“negative evidence” 就是把 $E = E^-$ 塞进这个 LLR、不再需要单独定义一个 primitive

文字解释写清一句:sign of $\Lambda$ depends on the hypothesis being tested——$H$ 定义的方向决定同一份 $E^-$ 是 $\Lambda > 0$ 还是 $\Lambda < 0$、这是贝叶斯证据理论的标准约定、不需要本文硬编码。

这才是"本应看到但没有"的正确刻画——只有当 $\mathcal O$ 说该看到的时候、$E^-$ 才对 $H$ 有 likelihood 意义。这也直接接上了 9/14 下篇 §2 里的 observability 字段:negative evidence 是 likelihood-side evidence、不是 provenance

具体到 policy 侧:把 $\Lambda(E;H,\mathcal O)$(或 $\exp(\Lambda)$ 的 logit)作为一个 field 拼进 $[\hat S]_{\sim_\pi}$、让 policy 或 belief update 消费。这条 primitive 目前工程实现最薄、但它对 hypothesis-ranking 的影响往往最大。

三个 sub-primitive 的关系:provenance 讲 where evidence came from、dependency 讲 how evidence is statistically related、negative evidence 讲 what expected evidence failed to appear——三者共同支撑 §0.2 里的 source-structure invariant

4.4 三族 primitives 与三条 invariants 的对应

回到 §0.1 的图:mode / temporal / source 三条 contract-relevant invariants 分别对应 mode_select / age_gate / (provenance_harden + dependency_aware_fusion + negative_evidence_read)。三条 invariant 缺一、§3 的四条 failure 至少复发两条。三族 primitive 也不是"接口设计题的完整答案"——observability / identifiability、frame convention、contact set 这三类 contract 字段还有各自更专门的读法(9/14 下篇 §3、下篇 §4.6 有对应讨论)、本文只处理最容易在 $\Pi_\pi$ 层被无声破坏的这三条

5. 承上启下:本文立 framework、下一篇(9/16)立 evaluation

到这里本文(上半)已经完成它该做的一件事——把 policy 侧接口立成一个可审计的语义对象。回顾一下:

两条 boxed claim 立在这里、作为本文上半的收束:

Claim 1 · Contract semantics can be lost at the policy boundary. A structured estimator output does not imply a structured policy input. 完整 pipeline 是一个可审计的 semantic interface、三个 loss 分别落在 $q_\pi / \Pi_\pi / \pi_\theta$ 上、第四个槽位 $g_{\mathrm{safety}}$ 不是 loss 是 obligation——四个 separately auditable failure sites(v6 措辞、不是四个 statistical independent losses、四者通过 $q_\pi \to \Pi_\pi \to \pi_\theta$ 顺序耦合)。

Claim 2 · Contract preservation is not architecture-specific. Engineered-state head、latent visuomotor policy、autoregressive VLA、diffusion、flow policy 用的 conditioning 与 action generator 都不一样——但它们作为 contract consumer 都必须回答同一组四个问题:what may I discard($q_\pi$;$\mathcal C_\pi$;$L_{\mathrm{declared}}$ via query subsumption)?what did I actually retain($\Pi_\pi$;$L_{\mathrm{projection}} = I(Y_{\mathcal C}^{\pi};\hat S\mid Z_\pi,O,L)$)?how should decisions respond to contract interventions($\pi_\theta$;$L_{\mathrm{decision}}$ via $D_{\mathcal A}$;下篇 §2.2 拆 $E_{\mathrm{contract}}$ / HPC)?what happens when the evidence becomes invalid or unknown($g_{\mathrm{safety}}=\bigcap_j g_j$;safe→relaxation permitted / unsafe→tighten or stop / unknown→conservative fallback)?攻击的对象是 interface contract、不是模型架构。

$$\boxed{\;\textbf{A policy is a contract consumer, not merely a function approximator.}\;}$$

5.1 Claim 3 与本文下半部分(9/16)

本文上半只到"接口应该被读对"这一层。要真正让这一 thesis 可检验、还需要三件事:

  1. 如何测——四类 compliance evidence(semantic / representation / decision / safety)+ 五层 evaluation hierarchy(Retention ≠ Sufficiency ≠ Behavioral use ≠ Utility ≠ Safety、四条不蕴含关系)+ 下篇 §2.2 HPC 拆 $E_{\mathrm{contract}}(T^{\mathrm{contract}})$ / HPC($T^{\mathrm{world}}$) + 下篇 §2.5 CAG matched null control。
  2. 如何训——训练时 representation-side probe + 三类 intervention consistency(Type I equivariance / Type II consumer-declared order-constrained response / Type III unconstrained)+ degradation as causal operator augmentation + 下篇 §1.3 safety filter 三态化 constraint certification。
  3. 如何落地——Python 最小可执行接口骨架、v6 修的三处真实 bug(super().__init__() 缺失、schema fail-open、top-$k$ API 混淆两个正交 knob)。

这三件事都在下篇——《政策侧评估(下):如何测、如何训、如何落地》。下篇的收束 thesis 是本文上半的对偶:

Claim 3 · Contract compliance should be tested by controlled intervention, not inferred from end-to-end success. 端到端 success 衡量 policy 好不好用、不衡量它有没有把 contract 语义读对。合规 argument 需要四类证据合流、需要一条 oracle baseline 界定每个指标的语义范围、需要明确的 retraining protocol(区分 $\mathrm{CAG}^{\mathrm{fixed}}$ 与 $\mathrm{CAG}^{\mathrm{retrained}}$)。Probe ≠ semantic compliance、CAG ≠ semantic compliance、safety pass ≠ representation retention——四类证据不能互相顶替、也不能压成一个 scalar。

一篇文如果既讲 framework 又讲 protocol 又讲 Python skeleton、单文件会到 14000+ 字(本文与 9/14、9/13 同量级)、读者从概念走到落地要一路翻过 30+ 个小节。把 evaluation 与 implementation 拆到下篇、上下两半各自 6000-8000 字量级、读者按需入半:理论读者读完上半就够、工程读者可以直接从下半 §0 的"与前篇分工"起步、只回上半补 §4 primitives

一句收束:“融合"这个词、以后尽量不用——它在时间轴上问的是"什么时候合并”、在语义轴上问的是"合并成什么";9/14 与本文(上半)合起来把第二个问题拆成了上游交付什么 + policy 作为 consumer 声明承担什么 + $q_\pi$ 允许丢什么 + $e_\pi$ 保住什么 + $\pi_\theta$ 用什么 + $g_{\mathrm{safety}}$ 承担什么义务六段。剩下"如何测、如何训、如何落地"三段、交给 9/16 下篇。

Sources

以下 arXiv ID 已联网核过;journal-only 引用不贴 arXiv。按支撑的 section 分组。Uncertainty / calibration / belief-space 参照(Guo 2017 / PlaNet / DreamerV3)与 evaluation protocol 方法学参照在本文下篇(9/16)单独列出、本文不重复

A · VLA 家族(支撑 §1 grid、§3 Failure 1–2、§5.1 类别 B 下篇展开)

B · Diffusion / Generative-Sequence / Flow-Matching Policy(支撑 §1 grid、§5.1 下篇展开)

D · SAC / PPO 与 engineered-state head 的 baseline(支撑 §1 grid 首行)

E · 承接前文(本文与 9/13、9/14、以及本文下篇 9/16 的接口)


相关阅读


← 拼起来不等于看懂:机器人多模态融合缺的不是模型、是接口 政策侧评估(下):如何测、如何训、如何落地——四类 compliance evidence 与最小可执行接口 →

评论

W
侯晓琴

西北工业大学硕士,十余年自动化与 AI 工程经验。著有《Visual C++入门很容易》《C++程序设计经典300例》。目前聚焦世界模型与具身智能方向,记录从传统自动化到机器人 AI 的转型之路。