論文導讀:SAFE——從 VLA 模型的隱藏狀態裡,直接讀出「這次任務要失敗了」

Qiao Gu, Zhiyuan Ju, Xujin Sun, Igor Gilitschenski, Osbert Nishimura, Maria Itkina, Florian Shkurti · 2025原文連結

論文資訊卡

  • 標題:SAFE: Multitask Failure Detection for Vision-Language-Action Models
  • 作者:Qiao Gu、Zhiyuan Ju、Xujin Sun、Igor Gilitschenski、Osbert Nishimura、Maria Itkina、Florian Shkurti
  • 發表:NeurIPS 2025
  • 專案網站vla-safe.github.io

一句話讀懂這篇論文

VLA 機器人模型在執行任務時,不會主動告訴你「我快搞砸了」——它只會繼續按照原本的計畫動作,即使那個計畫已經偏離軌道。SAFE 做的事情,是幫這類模型裝上一個「儀表板警示燈」:不用重新訓練 VLA 本身,也不需要針對每一種新任務另外寫偵測規則,而是直接去讀 VLA 大腦裡已經算好、但平常沒人去看的一段「內部想法」(hidden state),從裡面判斷這個任務目前的走向順不順利,一旦不對勁就即時亮燈示警。這篇論文的方法核心,某種程度上跟醫生透過驗血報告(而不是直接問病人「你還好嗎」)判斷病情是同一種邏輯——與其看最終行為,不如直接看內部生理訊號更早、更準。

問題背景

VLA(Vision-Language-Action)模型部署到訓練時沒見過的新任務、新環境時,成功率並不穩定——這是這類通用機器人基礎模型目前公認的現實限制。要讓機器人在成功率有限的前提下仍然能安全地跟真實環境互動,系統需要一個失敗偵測器(failure detector),在任務執行過程中即時發出警報,讓機器人有機會停下來、回退到安全狀態,或是主動向人類求助,而不是在偵測不到自己正在搞砸的情況下一路把錯誤動作執行到底。

既有的失敗偵測方法有一個結構性的侷限:它們大多只在單一或少數幾個特定任務上訓練與測試,換到 VLA 這種本身就標榜「通用、跨任務」的模型上,這種偵測器沒有能力泛化到訓練時沒見過的新任務——等於是用一個任務專屬的偵測邏輯,去監控一個本質上任務無關的通用策略,兩者的泛化能力天生不對等。

SAFE 的核心發現,直接針對這個落差:VLA 模型內部的特徵空間裡,已經蘊含了「這個任務目前做得順不順利」的高階知識,而且這個知識在不同任務之間是通用的(generic across different tasks)。這代表不需要重新設計一套跟任務綁定的偵測邏輯,只需要訓練一個小型的探測器(probe),直接從 VLA 模型自己的內部特徵裡把這個訊號讀出來即可——失敗偵測器本身可以繼承 VLA 主幹模型已經具備的跨任務泛化能力。

方法核心:三大組成部分

把 SAFE 想像成一套「體檢流程」會更好理解:先要有辦法把身體裡的訊號抽出來(抽血),再要有人判讀這份報告代表健康還是異常(診斷),最後還要有一個「數值超過多少才算異常」的參考區間(校準)。SAFE 的整體流程也剛好對應這三個階段:

1. Feature Extraction(特徵抽取):從 VLA 模型的最後一層 transformer block,抽取尚未被解碼成輸出(token logits 或 velocity field)之前的 hidden state 向量,作為判斷失敗與否的原始素材。

2. Failure Score Predictor(失敗分數預測器,即 SAFE 本體):把抽取到的特徵序列 e1:te_{1:t} 餵給一個時序模型,預測當下的失敗分數 sts_t。論文測試了兩種 backbone:SAFE-MLP(每個時間步的特徵各自獨立過 MLP,不考慮跨時間步的上下文)與 SAFE-LSTM(用 LSTM 顯式建模時序上下文,讓分數預測能參考過去一段時間的特徵演變趨勢)。

3. Calibration & Deployment(校準與部署):用 functional conformal prediction(函數型保形預測)在保留的校準資料集上,算出一個隨時間變化的門檻值,測試時預測分數一旦超過這個門檻,就判定偵測到失敗。保形預測的價值在於它能提供有統計保證的門檻設定方式,而不是單純憑經驗手動調一個固定閾值。

Feature Extraction 核心細節:精確定位抽取點

這是 SAFE 方法裡工程實作上最關鍵、也最容易被誤解的一個環節,論文在正文 4.2 節與附錄 A.1 有明確定義。簡單說,這一節要回答的問題就是:「體檢要抽血,但到底要從身體的哪個部位、哪一條血管抽?」——VLA 模型內部有很多層、每一層又有好幾種不同的中間產物,SAFE 選的是哪一個,直接決定了抽到的訊號夠不夠乾淨、夠不夠有代表性。

論文對抽取位置的正式定義

論文原文寫道:「We extract the VLA's hidden state vectors from the final layer, before being decoded to token logits [2, 5] or a velocity field [4].」

翻譯成白話:不論 VLA 主幹網路是語言模型式的 decoder 架構,還是 diffusion/flow matching 式的架構,SAFE 抽取的都是這個主幹網路跑完所有層之後、但還沒被輸出頭轉換成具體動作表示之前的那個中介表示(hidden state)。這個定義刻意選在「解碼之前」而不是「解碼之後」,優點是跨架構通用——不管下游是離散 token 還是連續速度場,都能用同一套定義描述抽取點,不需要為每種輸出頭各寫一套規則。

針對三種 VLA 架構的具體對應

論文在 OpenVLA、π0、π0-FAST 三種模型上做了測試,附錄原文進一步釐清了不同架構下這個抽取點的具體位置:

「Both OpenVLA and π0-FAST first predict a sequence of discrete tokens and then convert them into continuous actions. We take feature vectors before being decoded into the output tokens from the last transformer block as ERn×dE \in \mathbb{R}^{n \times d'}, and therefore nn corresponds to the number of generated tokens.」

「Differently, π0 (and π0*) outputs action vectors by flow matching, and we take the feature vectors before being projected into the velocity field.」

模型動作輸出方式抽取位置
OpenVLA離散化 token logits最後一個 transformer block 輸出,解碼成 token 之前
π0-FAST離散化 token(FAST tokenizer)同上
π0(及 π0*)Flow matching 的速度場投影成 velocity field 之前的特徵

需要特別注意:抽出來的 ERn×dE \in \mathbb{R}^{n \times d'} 是一個矩陣nn 對應生成的 token 數量,不是單一向量——這也是下一節「特徵聚合」步驟存在的原因。

額外針對 π0-FAST 的細緻消融

論文對 π0-FAST 做了比其他兩個模型更精細的一層消融:「For π0-FAST, we additionally ablate using the feature vectors before ('encoded') and after ('pre-logits') the final RMS normalization layer as EE.」

這裡有一個容易混淆、需要特別澄清的地方:論文只在 π0-FAST 上明確消融了「RMSNorm 前 vs 後」這個更細緻的位置差異,沒有證據顯示對 OpenVLA 也做了同樣的區分——OpenVLA 部分,論文只明確寫「最後一個 transformer block 的輸出,解碼成 token 之前」,並沒有更細緻地指明究竟是 RMSNorm 之前還是之後,這個顆粒度的消融實驗是 π0-FAST 獨有的。

特徵聚合方式:把矩陣 EE 壓成單一向量 ee

因為抽出來的是矩陣(多個 token 位置各一個向量),SAFE 需要把它聚合成單一向量才能輸入後續的失敗分數預測器。論文消融了以下幾種聚合方式,依驗證集表現挑選最佳者:

  • First:取第一個向量,e=E1e = E_1
  • Last:取最後一個向量,e=Ene = E_n
  • Mean:對所有向量取平均,e=1niEie = \frac{1}{n}\sum_i E_i
  • First & Last:串接第一個與最後一個向量,e=concat(E1,En)e = \text{concat}(E_1, E_n)

對照 Decoder 架構圖,精確定位「最後一個 transformer block」在哪

論文用詞「transformer block」在常見的 Decoder 架構圖裡對應「Decoder Layer」或「Decoding Layer」——兩者是同一件事,只是不同來源的命名習慣不同。這裡需要先釐清一個常見的混淆點:「Transformer」這個詞既可以指整套架構/整個模型,也可以指其中重複堆疊的一個組成單位(也就是一個 block/layer)。論文講的「the last transformer block」,對應到架構圖上就是「Decoding Layer N」這一個積木,不是整個模型。

以類 Llama 2 架構為例,單一 Decoding Layer(= 一個 transformer block)內部構造如下:

shell
Input Tensor(維度 H,如 Llama 2 7B 是 4096)
        ↓
RMSNorm(Pre-Norm)
        ↓
Self Attention
        ↓
Add(第一次殘差連接)
        ↓
RMSNorm(Pre-Norm)
        ↓
Feed Forward(SwiGLU 結構)
        ↓
Add(第二次殘差連接)
        ↓
Output Tensor(維度 H)

Feed Forward 內部採用 SwiGLU 結構:

shell
輸入(H)
  ├─ 路徑 A:Linear(H→2.7H) → SiLU
  └─ 路徑 B:Linear(H→2.7H)(不激活)
         ↓ 兩路徑逐元素相乘
       Linear(2.7H→H)
         ↓
       輸出(H)

幾個設計細節值得留意:RMSNorm 在單一 block 內用了兩次,分別在 Self Attention 前、Feed Forward 前,這是 Pre-Norm 設計,相對原始 Transformer 的 Post-Norm 更利於深層網路訓練穩定;殘差連接(Add)同樣用兩次,確保像 32 層這樣的深層網路梯度能穩定傳遞,不因某個子模組學不好而丟失原始資訊;Feed Forward 內部維度先擴張到約 2.7 倍 HH8/3\approx 8/3)再壓縮回 HH,這個係數是為了在使用 SwiGLU(需要兩條投影路徑,參數量天生比單路徑設計多)的情況下,跟傳統 4 倍擴張的單路徑 FFN 設計打平總參數量。

SAFE 精確抽取的位置,是整個「Decoding Layer N」(最後一層)完整跑完一輪之後,第二個 Add(殘差連接)完成後輸出的 Output Tensor——不是 Attention Map(注意力權重矩陣),不是 Self Attention 單獨的輸出,也不是 Feed Forward 單獨的輸出,而是這一層從頭到尾的最終輸出結果:

shell
... Decoder Layer N-1 的輸出
        ↓
   Decoding Layer N(完整跑完 Self-Attn + FF + 兩次殘差)
        ↓
   Output Tensor ← SAFE 抽取的就是這裡
        ↓
  (架構本身接下來會走 RMSNorm → 投影詞彙表 → Logits,
   但這些步驟是 SAFE 特徵抽取的下游,不在抽取範圍內)

Attention Map vs Hidden State:釐清一個常見誤解

SAFE 論文原文明確使用「feature vectors」一詞,對應的正是 Hidden State,不是 Attention Map,兩者是完全不同的物件:

Attention Map(注意力圖)Hidden State(隱藏狀態,SAFE 抽的東西)
本質矩陣,記錄「每個 token 對每個 token 的關注權重」向量,代表「這個位置最終的語意/情境理解內容」
形狀(序列長度 × 序列長度)(序列長度 × 隱藏維度 HH)
產生位置Self Attention 運算「內部」的中間產物,不會被傳遞到下一層每一層運算完畢後,實際往下傳遞的張量
SAFE 用哪個不使用使用

Attention Map 是計算 Self Attention 時內部產生的權重分佈,運算完成後就在這一層被消化掉,不會作為張量被傳遞到下一個 block;Hidden State 則是每個 Decoder Layer 真正往下傳遞、也是整個殘差流(residual stream)承載資訊的載體——SAFE 選擇抽取的是後者,因為它才是真正累積了模型對「目前這個時間步、這個任務進展狀況」完整理解的表示。

完整資料流總覽(以 OpenVLA 為例)

shell
[視覺影像 + 語言指令]
        ↓(DINOv2 + SigLIP 編碼、MLP Projector 轉 4096 維、Llama Tokenizer 切文字 token)
        ↓
   序列送進 Llama 2 7B(32 層 Decoder Layer)
        ↓
   Decoder Layer 0 → 1 → 2 → ... → N(最後一層)
        ↓
   Decoding Layer N 的 Output Tensor(維度 H,每個生成 token 各一個)
        ├──────────────────────┐
        ↓(原本 OpenVLA 的路徑)    ↓(SAFE 另外抽出這裡)
   RMSNorm → 投影 32000 維        聚合(First/Last/Mean/First&Last)
        ↓                              ↓
     Logits → 動作 token            單一向量 e_t
                                        ↓
                              SAFE-MLP 或 SAFE-LSTM
                                        ↓
                                  失敗分數 s_t
                                        ↓
                        與 conformal prediction 門檻比較
                                        ↓
                                是否判定為失敗

這張資料流圖清楚呈現 SAFE 方法的一個核心工程優勢:它完全不侵入、不修改 VLA 主幹模型本身的前向傳播路徑,只是在「Output Tensor」這個既有的中介張量上「另外接一條線」出去,這也是為什麼 SAFE 能同時適用於 OpenVLA 這種 token 解碼式架構,以及 π0 這種 flow matching 式架構——不論下游輸出頭長什麼樣子,最後一層 transformer block 的 hidden state 這個介面是共通的。

影響與定位:後續研究延伸的方向

SAFE 提出「VLA 內部特徵通用蘊含失敗訊號」這個核心發現後,後續已有幾條延伸研究路線:

  • VLA-FAIL:同樣使用「最後一層特徵表示」的概念,但改採 Mahalanobis distance 做 OOD(out-of-distribution)偵測,不需要額外的失敗資料訓練探測器,是把 SAFE 的特徵抽取思路跟無監督異常偵測結合的路線。
  • SAFECAST:指出 SAFE 這類方法在部署時遇到分布偏移(distribution shift)可能失準,提出用對比集(contrast-set)訓練與校準來加強偵測器的穩健性,是針對 SAFE 泛化能力邊界做的補強工作。
  • Hide-and-Seek(VLA runtime monitoring):類似地從 action token/action head 抽取特徵,但額外做跨層平均與滑動窗口聚合處理時序冗餘,是在 SAFE「單層抽取、時序模型預測」的框架上,進一步探索跨層資訊與時間窗口聚合的變體設計。

這幾條後續路線的共同特徵,是都認同 SAFE 提出的核心洞察——VLA 模型的內部表示本身就攜帶任務執行狀態的訊號,差異主要在於怎麼從這個訊號裡更穩健、更不依賴監督資料地把失敗判斷萃取出來。

相關論文推薦

參考資料