論文導讀: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 本體):把抽取到的特徵序列 餵給一個時序模型,預測當下的失敗分數 。論文測試了兩種 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 , and therefore 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 之前的特徵 |
需要特別注意:抽出來的 是一個矩陣, 對應生成的 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 .」
這裡有一個容易混淆、需要特別澄清的地方:論文只在 π0-FAST 上明確消融了「RMSNorm 前 vs 後」這個更細緻的位置差異,沒有證據顯示對 OpenVLA 也做了同樣的區分——OpenVLA 部分,論文只明確寫「最後一個 transformer block 的輸出,解碼成 token 之前」,並沒有更細緻地指明究竟是 RMSNorm 之前還是之後,這個顆粒度的消融實驗是 π0-FAST 獨有的。
特徵聚合方式:把矩陣 壓成單一向量
因為抽出來的是矩陣(多個 token 位置各一個向量),SAFE 需要把它聚合成單一向量才能輸入後續的失敗分數預測器。論文消融了以下幾種聚合方式,依驗證集表現挑選最佳者:
- First:取第一個向量,
- Last:取最後一個向量,
- Mean:對所有向量取平均,
- First & Last:串接第一個與最後一個向量,
對照 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)內部構造如下:
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 結構:
輸入(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 倍 ()再壓縮回 ,這個係數是為了在使用 SwiGLU(需要兩條投影路徑,參數量天生比單路徑設計多)的情況下,跟傳統 4 倍擴張的單路徑 FFN 設計打平總參數量。
SAFE 精確抽取的位置,是整個「Decoding Layer N」(最後一層)完整跑完一輪之後,第二個 Add(殘差連接)完成後輸出的 Output Tensor——不是 Attention Map(注意力權重矩陣),不是 Self Attention 單獨的輸出,也不是 Feed Forward 單獨的輸出,而是這一層從頭到尾的最終輸出結果:
... 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 的關注權重」 | 向量,代表「這個位置最終的語意/情境理解內容」 |
| 形狀 | (序列長度 × 序列長度) | (序列長度 × 隱藏維度 ) |
| 產生位置 | Self Attention 運算「內部」的中間產物,不會被傳遞到下一層 | 每一層運算完畢後,實際往下傳遞的張量 |
| SAFE 用哪個 | 不使用 | 使用 |
Attention Map 是計算 Self Attention 時內部產生的權重分佈,運算完成後就在這一層被消化掉,不會作為張量被傳遞到下一個 block;Hidden State 則是每個 Decoder Layer 真正往下傳遞、也是整個殘差流(residual stream)承載資訊的載體——SAFE 選擇抽取的是後者,因為它才是真正累積了模型對「目前這個時間步、這個任務進展狀況」完整理解的表示。
完整資料流總覽(以 OpenVLA 為例)
[視覺影像 + 語言指令]
↓(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 模型的內部表示本身就攜帶任務執行狀態的訊號,差異主要在於怎麼從這個訊號裡更穩健、更不依賴監督資料地把失敗判斷萃取出來。
相關論文推薦
- 論文導讀:OpenVLA——70 億參數的開源 VLA,用七分之一參數打敗 RT-2-X——SAFE 論文實際測試的三種 VLA 主幹模型之一,本文中對 Decoder 架構的逐層拆解即以 OpenVLA 的 Llama 2 骨幹為例
- 從 RT-1 到 RT-2:機器人+大型模型的發展脈絡——理解 VLA 模型「動作即語言 token」這條技術脈絡的起點,是 SAFE 論文裡「token logits 解碼」這條路徑的技術源頭
參考資料
- 專案網站:vla-safe.github.io
- arXiv:2506.09937