深入解析SmolVLA:VLM與動作專家間的注意力機制交互

在機器人學習領域,如何有效地將視覺語言模型(VLM)的強大感知能力與低級動作控制相結合,是實現通用機器人智能的關鍵挑戰。SmolVLA(Small Vision-Language-Action)架構正是在這一背景下應運而生,它通過一種新穎的交錯注意力機制,實現了視覺語言特征與機器人動作生成之間的緊密耦合。本文將深入探討SmolVLA架構中VLM與動作專家(Action Expert)之間的信息交互,特別是其注意力機制中KV和QKV的設計原理,并結合官方代碼進行詳細解析。

一、SmolVLA架構概覽

SmolVLA由兩大部分組成:一個預訓練的視覺語言模型(VLM)和一個動作專家。VLM負責處理多模態輸入,包括語言指令、RGB圖像和機器人本體感受狀態,并提取高級特征。這些特征隨后被送入動作專家,由其生成一系列低級動作塊(action chunks)。與傳統的Transformer架構不同,SmolVLA的動作專家采用了交錯式的自注意力(Self-Attention, SA)和交叉注意力(Cross-Attention, CA)層,而非在每個解碼器塊中同時包含兩者。這種設計旨在優化性能并提高推理速度。
在這里插入圖片描述

圖1 | SmolVLA架構圖

二、注意力機制基礎回顧

在深入SmolVLA的細節之前,我們先簡要回顧一下Transformer中自注意力和交叉注意力的基本概念:

  • 自注意力(Self-Attention):在自注意力機制中,輸入序列中的每個元素都會與同一序列中的所有其他元素計算注意力權重。它通過將輸入表示轉換為查詢(Query, Q)、鍵(Key, K)和值(Value, V)三個向量來實現。Q與K的點積決定了注意力權重,然后這些權重作用于V,得到加權和的輸出。自注意力允許模型捕捉序列內部的依賴關系。

  • 交叉注意力(Cross-Attention):交叉注意力通常用于處理兩個不同的輸入序列。其中一個序列提供查詢(Q),而另一個序列提供鍵(K)和值(V)。例如,在編碼器-解碼器架構中,解碼器的查詢來自解碼器自身的輸出,而鍵和值則來自編碼器的輸出。這使得解碼器能夠“關注”編碼器輸出中的相關信息。

三、SmolVLA中VLM與動作專家的信息交互

SmolVLA的核心創新之一在于其VLM與動作專家之間獨特的信息交互方式。如圖1所示,VLM的輸出特征(通常是其最后一層或中間層的隱藏狀態)被傳遞給動作專家。這種交互通過注意力機制實現,其中VLM的特征充當了動作專家注意力層的鍵(K)和值(V)的來源。

3.1 動作專家中的交叉注意力(Cross-Attention)

在SmolVLA的動作專家中,交叉注意力層(圖1中金色塊)負責將動作令牌(action tokens)與VLM提取的視覺語言特征進行融合。根據論文描述:

In our setup, CA layers cross-attend the VLM’s keys and values, while SA layers allow the action tokens in vθv_θvθ? to attend to each other.

這意味著在交叉注意力層中:

  • 查詢(Q):來自動作專家自身的當前動作令牌的表示。這些令牌代表了模型正在嘗試生成的動作序列。
  • 鍵(K)和值(V):來自VLM的輸出特征。VLM已經處理了圖像、語言指令和機器人狀態,并生成了包含這些多模態信息的豐富表示。這些VLM特征作為外部信息源,為動作令牌提供了上下文。

因此,交叉注意力層接收的是VLM的KV以及動作專家自身的Q。這種設計使得動作專家能夠根據VLM提供的感知信息來調整和生成動作。例如,如果VLM識別出圖像中的特定物體或理解了語言指令中的特定動詞,這些信息將通過KV傳遞給動作專家,指導其生成相應的抓取或移動動作。

讓我們看看smolvlm_with_expert.py中的forward_cross_attn_layer函數,它負責處理交叉注意力邏輯。雖然代碼中直接計算了expert_query_stateexpert_key_statesexpert_value_states,但關鍵在于expert_key_statesexpert_value_states的來源。它們是通過expert_layer.self_attn.k_projexpert_layer.self_attn.v_proj對VLM的key_statesvalue_states進行投影得到的。這明確體現了VLM作為KV源的機制:

            _key_states = key_states.to(dtype=expert_layer.self_attn.k_proj.weight.dtype).view(*key_states.shape[:2], -1)expert_key_states = expert_layer.self_attn.k_proj(_key_states).view(*_key_states.shape[:-1], -1, expert_layer.self_attn.head_dim)  # k_proj should have same dim as kv_value_states = value_states.to(dtype=expert_layer.self_attn.v_proj.weight.dtype).view(*value_states.shape[:2], -1)expert_value_states = expert_layer.self_attn.v_proj(_value_states).view(*_value_states.shape[:-1], -1, expert_layer.self_attn.head_dim)expert_query_state = expert_layer.self_attn.q_proj(expert_hidden_states).view(expert_hidden_shape)

這里的key_statesvalue_states實際上是VLM層在處理其自身輸入時生成的KV對。動作專家通過對其進行線性投影,將其適配到自己的維度空間,從而在交叉注意力中作為外部信息源。

3.2 動作專家中的自注意力(Self-Attention)

自注意力層(圖1中淺黃色塊)在動作專家內部運作,其目的是讓動作令牌之間相互關注,捕捉動作序列內部的時間依賴性。根據論文:

SA layers allow the action tokens in vθv_θvθ? to attend to each other. We employ a causal attention mask for the SA layers, ensuring that each action token can only attend to past tokens within the chunk, preventing future action dependencies.

這意味著在自注意力層中:

  • 查詢(Q)、鍵(K)和值(V):全部來自動作專家自身的當前動作令牌的表示。每個動作令牌都生成自己的Q、K和V,并與其他動作令牌的K和V進行交互。

自注意力層接收QKV的原因是它需要捕捉序列內部的依賴關系。動作專家在生成動作序列時,需要考慮之前生成的動作對當前動作的影響,并確保動作序列的連貫性和流暢性。因果注意力掩碼(causal attention mask)的引入,進一步確保了每個動作令牌只能關注其之前的令牌,從而避免了未來信息泄露,這對于序列生成任務至關重要。

smolvlm_with_expert.pyforward_attn_layer函數中,我們可以看到Q、K、V都是從inputs_embeds(即動作令牌的隱藏狀態)中計算出來的:

        query_states = []key_states = []value_states = []for i, hidden_states in enumerate(inputs_embeds):layer = model_layers[i][layer_idx]if hidden_states is None or layer is None:continuehidden_states = layer.input_layernorm(hidden_states)input_shape = hidden_states.shape[:-1]hidden_shape = (*input_shape, -1, layer.self_attn.head_dim)hidden_states = hidden_states.to(dtype=layer.self_attn.q_proj.weight.dtype)query_state = layer.self_attn.q_proj(hidden_states).view(hidden_shape)key_state = layer.self_attn.k_proj(hidden_states).view(hidden_shape)value_state = layer.self_attn.v_proj(hidden_states).view(hidden_shape)query_states.append(query_state)key_states.append(key_state)value_states.append(value_state)query_states = torch.cat(query_states, dim=1)key_states = torch.cat(key_states, dim=1)value_states = torch.cat(value_states, dim=1)

這里的inputs_embeds在動作專家內部的自注意力層中,就是動作令牌的嵌入表示。通過對這些嵌入進行Q、K、V投影,模型能夠計算動作令牌之間的相互依賴關系。

四、交錯注意力機制的優勢

SmolVLA采用交錯式的交叉注意力和自注意力層,而非在每個解碼器塊中同時包含兩者,這與許多標準VLM架構(如Transformer解碼器)有所不同。論文指出:

Empirically, we find that interleaving CA and SA layers provides higher success rates and faster inference time. In particular, we find self-attention to contribute to smoother action chunks A, something particularly evident when evaluating on real robots.

這種設計選擇的優勢在于:

  • 效率提升:通過交錯使用,而不是在每個層都同時計算兩種注意力,可以減少計算開銷,從而實現更快的推理速度。
  • 性能優化:實驗結果表明,這種交錯方式能夠帶來更高的成功率。自注意力層有助于生成更平滑、更連貫的動作序列,這對于真實機器人控制至關重要。
  • 明確職責:交叉注意力層專注于融合外部視覺語言信息,而自注意力層則專注于建模動作序列內部的依賴關系,職責更加明確,可能有助于模型更好地學習各自的特定任務。

五、總結

SmolVLA通過交錯注意力機制,在VLM與動作專家之間建立了高效且富有表現力的信息交互通道。交叉注意力層允許動作專家從VLM中獲取豐富的感知上下文(KV),從而指導動作的生成;而自注意力層則使動作專家能夠捕捉動作序列內部的依賴關系(QKV),確保動作的連貫性和流暢性。這種獨特的設計不僅提升了模型的性能和推理速度,也為機器人學習領域提供了一種新的注意力機制范式,使其在復雜任務中展現出卓越的潛力。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/94323.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/94323.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/94323.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring Security 認證與授權實現機制

Spring Security 是一個功能強大且高度可定制的身份驗證和訪問控制框架,其認證和授權實現機制如下:一、認證(Authentication)實現 1. 核心組件 AuthenticationManager:認證入口點,委托給AuthenticationProviderAuthenticationProv…

開源的時間跟蹤工具TimeTagger

簡介 什么是 TimeTagger ? TimeTagger 是一個開源的時間跟蹤工具,旨在幫助用戶記錄和分析他們的時間使用情況。它提供了一個互動的用戶界面和強大的報告功能,適合個人和自由職業者使用。 主要特點 直觀的用戶界面:基于互動時間線…

學習游戲制作記錄(角色屬性和狀態腳本)8.4

1.實現簡單的角色屬性創建CharactorState腳本:掛載在敵人和玩家身上public float damage;//角色傷害public float maxHp;//最大生命[SerializeField] private float currentHealth;//當前生命void Start(){currentHealth maxHp;//初始化將當前生命設置為最大生命}p…

04-Chapter02-Example01

文章介紹 1、完善項目結構 1.1 新建第二章對應模塊Chapter021.2 新建模塊Chapter02對應包com.itheima1.3 在包com.itheima下新建class類 ,類名稱Example01.java項目結構如下:2、編寫Example01.java代碼 P38 package com.itheima;public class Example01…

【達夢MPP(帶主備)集群搭建】

達夢MPP(帶主備)集群搭建 為了提高MPP系統可靠性,克服由于單節點故障導致整個系統不能繼續正常工作的問題,DM在普通的MPP系統基礎上,引入數據守護主備機制,為每一個MPP節點配置一個實時備庫作為備份節點&a…

Java基礎學習(一):類名規范、返回值、注釋、數據類型

目錄 一、類名規范二、返回值三、注釋四、數據類型 1. 基本類型2. 引用類型3. 強制數據類型轉換4. 進制5. 進制的轉換6. 超范圍運算 相關文章 Java基礎學習(二):Java中的變量和常量、final(重點)、運算、字符串 了…

Nginx相關實驗(2)

nginx的一些高級配置 nginx狀態頁 基于nginx 模塊 ngx_http_stub_status_module 實現, 在編譯安裝nginx的時候需要添加編譯參數 --with-http_stub_status_module 否則配置完成之后監測會是提示語法錯誤 #檢查模塊是否配置 如果不存在需要添加模塊重新編譯 nginx …

2.Java和C++有什么區別

2.Java和C有什么區別 1.在C中,支持操作符重載,而在Java里是不允許的 2.C支持多繼承,而Java不可以,但Java可以單繼承多實現 3.Java內置多線程機制,而C沒有 4.Java里面自帶了垃圾回收機制,可以自動清理緩存等…

MLIR Introduction

簡介 MLIR 項目是一個構建可重用和可擴展編譯器基礎設施創新項目,旨在解決軟件碎片化問題,顯著降低構建特定領域編譯器的成本。 基于MLIR,可以實現: 數據流圖表達(如TensorFlow),包含dynamic…

[找出字符串中第一個匹配項的下標]

代碼思路分析: 1. 邊界情況處理 代碼中沒有顯式處理以下邊界情況,但邏輯已隱含支持: needle 為空字符串:應返回 0(但題目通常保證 needle 非空)。haystack 比 needle 短:直接返回 -1&#xff08…

深入剖析RT-Thread串口驅動:基于STM32H750的FinSH Shell全鏈路Trace分析與實戰解密(上)

0. 概述 這是cherryusb代碼trace分析系列文章之七。 RT-Thread串口驅動框架與FinSH Shell運行機制深度解析:針對STM32H750 ART-PI平臺,本文獨辟蹊徑采用創新的代碼trace分析方法,破解龐大串口框架下的復雜運行邏輯。通過精確trace日志與drv_u…

Python與C++通信教程:C++打包dll,供Python調用(1)

目錄 1,新建一個工程 math_functions.cpp內容: 先編譯一下看是否可以正常運行: 2,編譯成dll,并用Python調用 有兩種方式: 命令 1(使用靜態鏈接): 可移植性: 命令 2(動態鏈接): 可移植性: 這里我使用的是靜態鏈接的方式: python調用實例 test_dll.py 1,…

編程與數學 03-002 計算機網絡 19_網絡新技術研究

編程與數學 03-002 計算機網絡 19_網絡新技術研究一、軟件定義網絡(SDN)(一)SDN的基本原理與架構(二)SDN的應用場景與優勢二、網絡功能虛擬化(NFV)(一)NFV的概…

uniapp 跨端開發

一、創建uniapp項目 1. 項目架構2. 初始化項目3. pages.json 和 tabBar 案例4. uni-app和原生小程序開發區別5. 用命令行創建uni-app項目 官網鏈接:https://uniapp.dcloud.net.cn/quickstart-cli.html#創建uni-app6. 用vscode開發uni-app在uni-app中只有manifest.js…

區塊鏈支付技術的核心原理

區塊鏈支付利用分布式賬本技術(DLT)實現點對點的價值轉移,無需傳統銀行或支付網關的中介。核心特點是去中心化、透明、可追溯。? 基本流程:1. 用戶發起交易:通過加密貨幣錢包發送支付請求(例如用ETH支付&a…

linux中 多進程 導致cuda錯誤的問題解決

問題總結與解決方案 核心問題 在使用 Linux 系統時,多進程并行計算中加載模型到 GPU 時出現錯誤:_MODEL SentenceTransformer( model_path, device "cuda" if torch.cuda.is_available() else "cpu" )根本原因: CUDA 上…

智能感知的新入口:AIGC 與低延遲視頻通路的深度融合

?? 引言:AIGC,正在重構視覺智能的“生成邏輯” AI生成內容(AIGC)正在從“內容創作工具”躍升為計算機視覺系統的新引擎。它不再只是“文生圖”、“圖生文”的演示技術,而是實實在在地改變著我們構建、處理和理解視覺…

Ubuntu 內網多臺服務器時間同步方案(適用于臨時能上外網的環境)

哎,最近項目是運行在內網環境下的,出現了由于時間不同步導致的bug。一般來講,幾臺服務器的時間不一致,會帶來很多問題,比如日志時間對不上、分布式服務出現異常,等等。項目上現在有三臺服務器,其…

延長電池壽命的低Iq技術

本文章是筆者整理的備忘筆記。希望在幫助自己溫習避免遺忘的同時,也能幫助其他需要參考的朋友。如有謬誤,歡迎大家進行指正。一、概述隨著電池供電型應用的激增,人們對質優價廉的電池和電池包的需求持續猛漲。電池制造商們不斷采用新的化學物…

QT 如何實現enum與字符串的互轉

將enum中定義的枚舉值,以字符串的形式寫入文件,同時也能從字符串轉為枚舉值。舉例說明: ColorSelector中的Colors枚舉,我們希望 kColorRed 這個寫入到本地文件時,可以直接保存“kColorRed”,而非kColorRed對…