Transformer數學推導——Q27 證明時序注意力(Temporal Attention)在視頻模型中的幀間依賴建模

該問題歸類到Transformer架構問題集——注意力機制——跨模態與多模態。請參考LLM數學推導——Transformer架構問題集。

在視頻理解任務中,捕捉幀與幀之間的時間依賴關系(如動作的連貫性、物體的運動軌跡)是核心挑戰。時序注意力(Temporal Attention)如同 “視頻的時間顯微鏡”,能動態聚焦關鍵幀并建模長距離依賴,成為視頻模型的核心組件。以下從數學原理、幀間依賴建模、LLM 中的多模態應用及代碼實踐展開,帶您揭開時間序列建模的神秘面紗。

1. 時序注意力:視頻幀間依賴的 “動態連接器”

核心目標:給定視頻的幀序列?\mathbf{X} = [\mathbf{x}_1, \mathbf{x}_2, \dots, \mathbf{x}_T](T?為幀數,\mathbf{x}_t \in \mathbb{R}^D?為第?t?幀的特征),時序注意力計算每一幀?t?與所有幀?s?的依賴權重?\alpha_{t,s},使模型能聚焦對當前幀最關鍵的歷史或未來幀。

與空間注意力的區別

  • 空間注意力關注單幀內像素 / 區域的關系(2D 空間);
  • 時序注意力關注跨幀的時間關系(1D 時間軸),核心是建模?t?和?s?之間的時間距離?|t-s|對依賴的影響。
2. 數學理論:從基礎公式到幀間依賴推導
2.1 基礎注意力公式

時序注意力遵循 Transformer 的縮放點積注意力框架:\text{Attention}(\mathbf{Q}, \mathbf{K}, \mathbf{V}) = \text{softmax}\left(\frac{\mathbf{Q}\mathbf{K}^\top}{\sqrt{d_k}}\right)\mathbf{V}

  • 查詢(Query, Q):當前幀的特征?\mathbf{q}_t = \mathbf{x}_t \mathbf{W}^Q
  • 鍵(Key, K):所有幀的特征?\mathbf{k}_s = \mathbf{x}_s \mathbf{W}^K
  • 值(Value, V):所有幀的特征?\mathbf{v}_s = \mathbf{x}_s \mathbf{W}^V
  • d_k?是鍵的維度,用于縮放防止梯度消失。
2.2 幀間依賴權重推導

對于第?t?幀,其注意力權重?\alpha_{t,s}?表示第?s?幀對?t?幀的重要性:\alpha_{t,s} = \frac{\exp\left(\frac{\mathbf{q}_t \cdot \mathbf{k}_s}{\sqrt{d_k}}\right)}{\sum_{s'=1}^T \exp\left(\frac{\mathbf{q}_t \cdot \mathbf{k}_{s'}}{\sqrt{d_k}}\right)}

時間距離的隱式建模

  • 若兩幀內容相關(如連續動作的兩幀),其特征點積?\mathbf{q}_t \cdot \mathbf{k}_s?更大,權重?\alpha_{t,s}?更高;
  • 無需顯式輸入時間戳,依賴特征本身的時間相關性(如動作的運動向量、物體的位置變化)。
2.3 帶位置編碼的增強公式

為顯式建模時間順序(如早期幀與后續幀的因果關系),引入時間位置編碼?\mathbf{p}_t

\mathbf{q}_t = (\mathbf{x}_t + \mathbf{p}_t) \mathbf{W}^Q, \quad \mathbf{k}_s = (\mathbf{x}_s + \mathbf{p}_s) \mathbf{W}^K

  • 位置編碼示例:正弦曲線編碼?\mathbf{p}_t = [\sin(t/1000^{2i/d}), \cos(t/1000^{2i/d})],使模型區分幀的先后順序。
3. 幀間依賴建模的三大核心能力
3.1 長距離依賴捕捉:超越 3D 卷積的時序建模
  • 傳統方法局限:3D 卷積通過固定窗口(如 3 幀)建模短期依賴,難以捕捉跨數十幀的依賴(如 “開門” 到 “進門” 的動作間隔);
  • 時序注意力優勢\alpha_{t,s} \propto \exp\left(\frac{\text{Cross-frame Semantic Relevance}}{\sqrt{d_k}}\right) 可直接計算任意兩幀的依賴,例如在視頻問答中,讓 “運動員射門” 的當前幀與 “球進門” 的 10 幀后幀建立高權重連接。

案例:在動作識別任務中,時序注意力能捕捉籃球比賽中 “起跳”(第 5 幀)與 “扣籃”(第 15 幀)的長距離依賴,而 3D 卷積可能因窗口太小丟失關鍵關聯。

3.2 動態關鍵幀聚焦:自適應分配注意力資源
  • 公式體現:權重?\alpha_{t,s}?動態調整,例如:
    • 快速運動場景(如乒乓球擊球):聚焦相鄰幾幀(s \approx t);
    • 緩慢變化場景(如日出過程):均勻分配權重給所有幀。
  • 數學本質:通過 softmax 歸一化,使模型自動忽略無關幀(如靜止的背景幀),聚焦動態變化的前景幀。
3.3 雙向 / 單向依賴支持:適應不同任務需求
  • 雙向注意力(如視頻生成):\alpha_{t,s} = \text{softmax}\left(\frac{\mathbf{q}_t \cdot \mathbf{k}_s}{\sqrt{d_k}}\right), \quad s \in [1, T] 允許當前幀依賴所有過去和未來幀(如生成視頻時參考前后幀的連貫性)。
  • 單向注意力(如視頻實時分析):\alpha_{t,s} = \text{softmax}\left(\frac{\mathbf{q}_t \cdot \mathbf{k}_s}{\sqrt{d_k}}\right), \quad s \in [1, t] 僅允許依賴過去和當前幀(如自動駕駛中不能預知未來幀,需因果約束)。
4. 在 LLM 中的多模態應用:當視頻遇見語言

時序注意力不僅是視頻模型的核心,更是多模態 LLM 處理視頻 - 語言任務的橋梁:

4.1 視頻描述生成:幀序列到自然語言的映射
  • 場景:輸入視頻?\mathbf{X} = [\mathbf{x}_1, \dots, \mathbf{x}_T],生成描述 “運動員起跳后扣籃得分”。
  • 時序注意力作用
    1. 建模幀間依賴:通過?\alpha_{t,s}?連接 “起跳”(第 5 幀)、“空中動作”(第 10 幀)、“扣籃”(第 15 幀)的特征;
    2. 跨模態交互:將時序注意力輸出的視頻特征與文本解碼器的語言特征(如 Transformer 的詞嵌入)通過交叉注意力連接,生成連貫描述。

案例:Google 的 FLAVA 模型中,時序注意力先捕捉視頻幀的動作序列,再通過多模態注意力與文本編碼器交互,實現 “視頻→語言” 的跨模態生成。

4.2 視頻問答:時間敏感型問題的推理
  • 場景:視頻中汽車在第 10 幀左轉,第 20 幀右轉,用戶問 “汽車何時改變方向?”
  • 時序注意力優勢
    • 計算 “改變方向” 相關幀(第 10、20 幀)與問題關鍵詞 “何時” 的依賴權重;
    • 通過幀間依賴權重?\alpha_{t,s}?定位關鍵幀的時間戳,結合語言模型生成答案 “第 10 幀和第 20 幀”。
4.3 視頻檢索:跨模態時間對齊
  • 任務:通過文本 “籃球運動員連續運球后投籃” 檢索對應視頻片段。
  • 時序注意力作用
    • 視頻端:時序注意力建模 “運球→投籃” 的幀間依賴,生成時序特征向量;
    • 文本端:Transformer 建模 “連續”“后” 等時間關鍵詞的語義;
    • 跨模態匹配:通過余弦相似度度量視頻時序特征與文本時間語義的對齊度,實現精準檢索。
5. 代碼示例:PyTorch 實現時序注意力層

以下是支持雙向 / 單向依賴的時序注意力層實現,包含位置編碼增強:

import torch  
import torch.nn as nn  
import math  class TemporalAttention(nn.Module):  def __init__(self, d_model, n_heads, causal=False):  super().__init__()  self.d_model = d_model  self.n_heads = n_heads  self.d_k = d_model // n_heads  self.causal = causal  # 是否為單向因果注意力  # 投影矩陣:Q, K, V  self.q_proj = nn.Linear(d_model, d_model)  self.k_proj = nn.Linear(d_model, d_model)  self.v_proj = nn.Linear(d_model, d_model)  self.out_proj = nn.Linear(d_model, d_model)  # 時間位置編碼(可學習或固定)  self.pos_encoding = nn.Parameter(torch.randn(1, 1000, d_model))  # 假設最大幀數1000def forward(self, x):  B, T, D = x.shape  # 輸入形狀:(批次, 幀數, 特征維度)  device = x.device# 添加位置編碼  pos = self.pos_encoding[:, :T, :].to(device)  # (1, T, d_model)  x_with_pos = x + pos  # 融合位置信息# 多頭拆分:(B, T, d_model) → (B, T, n_heads, d_k)  q = self.q_proj(x_with_pos).view(B, T, self.n_heads, self.d_k).transpose(1, 2)  k = self.k_proj(x_with_pos).view(B, T, self.n_heads, self.d_k).transpose(1, 2)  v = self.v_proj(x_with_pos).view(B, T, self.n_heads, self.d_k).transpose(1, 2)  # 計算注意力分數:(B, n_heads, T, T)  attn_scores = (q @ k.transpose(-2, -1)) / math.sqrt(self.d_k)  # 因果掩碼:僅允許當前幀看過去幀(單向注意力)  if self.causal:  mask = torch.triu(torch.ones(T, T, dtype=torch.bool), diagonal=1).to(device)  attn_scores.masked_fill_(mask, -float('inf'))  # 計算注意力權重并聚合值  attn_probs = nn.functional.softmax(attn_scores, dim=-1)  output = attn_probs @ v  # (B, n_heads, T, d_k)  output = output.transpose(1, 2).contiguous().view(B, T, self.d_model)  return self.out_proj(output)  # 實例化:雙向時序注意力(用于視頻生成)  
video_encoder = TemporalAttention(d_model=512, n_heads=8, causal=False)  
# 單向時序注意力(用于視頻實時分析)  
real_time_attention = TemporalAttention(d_model=512, n_heads=8, causal=True)  # 模擬輸入:32批次,16幀,512維特征  
frames = torch.randn(32, 16, 512)  
output = video_encoder(frames)  
print("輸出形狀:", output.shape)  # (32, 16, 512),每幀包含時序依賴信息  

代碼解析

  1. 位置編碼pos_encoding?顯式編碼幀的時間順序,避免模型僅依賴內容相似性(如兩幀內容相同但時間不同);
  2. 因果掩碼:通過?torch.triu?生成上三角掩碼,實現單向注意力,確保未來幀不依賴當前幀(適用于實時場景);
  3. 多頭機制:不同頭可捕捉不同時間尺度的依賴(如頭 1 關注相鄰幀,頭 2 關注 10 幀間隔的依賴)。
6. 總結:時序注意力如何重塑視頻理解

時序注意力通過數學上的動態權重分配,賦予視頻模型三大核心能力:

  • 理論層面:用?\alpha_{t,s} = \text{softmax}\left(\frac{\mathbf{q}_t \cdot \mathbf{k}_s}{\sqrt{d_k}}\right)?量化幀間依賴,突破固定窗口限制,實現長距離時序建模;
  • LLM 應用:作為多模態橋梁,連接視頻幀序列與語言語義,在視頻生成、問答、檢索中實現時間敏感型推理;
  • 工程實踐:通過因果掩碼、位置編碼等技巧,適應不同任務需求,成為視頻 Transformer(如 ViViT、VideoBERT)的核心組件。

未來,隨著多模態 LLM 的發展,時序注意力將與空間注意力、跨模態注意力深度融合,讓模型不僅能 “看懂” 單幀圖像,更能 “理解” 視頻中的時間故事 —— 就像人類觀看電影時,能自然捕捉鏡頭切換中的情節邏輯。這一數學工具的巧妙設計,正是人工智能邁向視頻級理解的關鍵一步。

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

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

相關文章

服務器和數據庫哪一個更重要

在當今數字化的時代,服務器和數據庫都是構建和運行各種應用系統的關鍵組成部分,要說哪一個更重要,其實很難簡單地給出定論。 服務器就像是一個強大的引擎,為應用程序提供了穩定的運行環境和高效的計算能力。它負責接收和處理來自…

【Android】四大組件之Service

目錄 一、什么是Service 二、啟停 Service 三、綁定 Service 四、前臺服務 五、遠程服務擴展 六、服務保活 七、服務啟動方法混用 你可以把Service想象成一個“后臺默默打工的工人”。它沒有UI界面,默默地在后臺干活,比如播放音樂、下載文件、處理…

pytest 技術總結

目錄 一 pytest的安裝: 二 pytest有三種啟動方式: 三 用例規則: 四 配置框架: 一 pytest的安裝: pip install pytest # 安裝 pip install pytest -U # 升級到最新版 二 pytest有三種啟動方式: 1…

redis 有序集合zrange和zrangebyscore的區別

起因是查詢數據,用了zrangebyscore 但是一直顯示沒數據 具體命令zrangebyscore key 0 -1 withscores, 原有印象中一直是這么用的,但是突然查不出來了, 于是搜了下問題所在。 通過分數查看 不能用0和-1表示最小和最大,只能用分數來…

Tableau 基礎表制作

目錄 1.數據連接 2. 數據可視化 3. 基礎表制作 3.1 對比分析:比大小 1. 柱狀圖 2. 條形圖 3. 熱力圖 4. 氣泡圖 5. 詞云 3.2 變化分析:看趨勢 1. 折線圖 2. 面積圖 3.3 構成分析:看占比 1. 餅圖 2. 樹地圖 3. 堆積圖 3.4 關…

反序列化漏洞1

一、PHP類與對象 1. 類 概念理解: 類是共享相同結構和行為的對象的集合,可以理解為特征的提取。例如將耳朵長、尾巴短、紅眼睛、吃胡蘿卜、蹦跳行走的動物特征抽象為"兔子"類。代碼結構: 使用class關鍵字定義類類名遵循大駝峰命名法包含成員變量(屬性)和…

為什么要對 ACI 網絡進行升級?

一、硬件演進 1. 交換機接口 前面板接口由 1/10G 升級至 10/25/100G fabric 上行鏈路 40G 升級至 100/400G 2. 交換機角色 交換機可以是 spine 或者 leaf,而不是固定角色 3. EOS APIC-SERVER-M2/L2 2024年6月30日 EOS,替換設備為 APIC-SERVER-M4/L4 二、網絡升級參考文…

DeepSeek+Cline:開啟自動化編程新紀元

目錄 一、引言:AI 編程時代的曙光二、認識 DeepSeek 和 Cline2.1 DeepSeek 是什么2.2 Cline 詳解2.3 兩者結合的魅力 三、DeepSeek Cline 安裝與配置全流程3.1 安裝 VS Code3.2 安裝 Cline 插件3.3 獲取 DeepSeek API Key3.4 配置 Cline 與 DeepSeek 連接 四、實戰演…

【展位預告】正也科技將攜營銷精細化管理解決方案出席中睿營銷論壇

在醫藥行業面臨政策深化、技術迭代、全球化競爭的多重挑戰下,第二屆中睿醫藥健康生態生長力峰會暨第三十五屆中睿醫藥營銷論壇將于廣州盛大啟幕。5月19-20日本次峰會以“聚焦政策變革、把握產業趨勢、構建生態共贏”為核心,旨在通過全產業鏈資源整合與創…

【深度學習】評估模型復雜度:GFLOPs與Params詳解

評估模型復雜度:GFLOPs與Params詳解 在深度學習模型設計與優化過程中,GFLOPs和Params是論文中兩個重要的評估指標,它們分別衡量模型的計算復雜度和參數量。本文將詳細介紹這兩個概念及其在實踐中的應用。 1. Params:模型參數量 …

Go語言->練習6例

1.go語言的接口實現 接口(interface)是一種類型,它定義了一組方法的集合。任何類型只要實現了接口中定義的所有方法,就被認為實現了該接口。 在Go語言中,使用接口的最佳實踐可以提高代碼的可讀性、可維護性和靈活性。…

Drivestduio 代碼筆記與理解

Rigid Node: 表示 car或者trucks Deformable Node : 表示一些 分布之外的 non-rigid 的運動物體, 比如遠處的行人等和Cyclist。 在 load_objects 會讀取每一個 dynamic objects 的 bounding box’的信息,具體如下: frame_instances 記錄了每…

《算法筆記》10.5小節——圖算法專題->最小生成樹 問題 E: Jungle Roads

題目描述 The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid money was spent on extra roads between villages some years ago. But the jungle overtakes roads relentlessly, so the large road network is too expensive to mai…

【音視頻】SDL簡介

官網:官網 文檔:文檔 SDL(Simple DirectMedia Layer)是一套開放源代碼的跨平臺多媒體開發庫,使用C語言寫成。SDL提供數種控制圖像、聲音、輸出入的函數,讓開發者只 要用相同或是相似的代碼就可以開發出跨多…

SpringBoot + SSE 實時異步流式推送

前言 在當今數字化時代,實時數據處理對于企業的決策和運營至關重要。許多業務場景需要及時響應數據庫中的數據變化,例如電商平臺實時更新庫存、金融系統實時監控交易數據等。 本文將詳細介紹如何通過Debezium捕獲數據庫變更事件,并利用Serv…

ADS1299模擬前端(AFE)代替芯片——LHE7909

在現代醫療科技的飛速發展中,精確的生物電勢測量設備變得越來越重要。領慧立芯推出的LHE7909,是一款專為心電圖(ECG)和其他生物電勢測量設計的低噪聲24位模數轉換器(ADC),為醫療設備制造商提供了…

如何實現Redis和Mysql中數據雙寫一致性

一、引言 今天我們來聊聊一個在分布式系統中非常常見但又十分棘手的問題——Redis與MySQL之間的雙寫一致性。我們在項目中多多少少都遇到過類似的困擾,緩存是用Redis,數據庫是用MySQL,但如何確保兩者之間的數據一致性呢?接下來我…

面試篇 - Transformer前饋神經網絡(FFN)使用什么激活函數?

1. FFN結構分解 原始Transformer的FFN層 FFN(x) max(0, xW? b?)W? b? # 原始論文公式 輸入:自注意力層的輸出 x(維度 d_model512) 擴展層:xW? b?(擴展為 d_ff2048) 激活函數:Re…

基于Python Flask的深度學習電影評論情感分析可視化系統(2.0升級版,附源碼)

博主介紹:?IT徐師兄、7年大廠程序員經歷。全網粉絲15W、csdn博客專家、掘金/華為云//InfoQ等平臺優質作者、專注于Java技術領域和畢業項目實戰? 🍅文末獲取源碼聯系🍅 👇🏻 精彩專欄推薦訂閱👇&#x1f3…

前端vue2修改echarts字體為思源黑體-避免侵權-可以更換為任意字體統一管理

1.下載字體 npm install fontsource/noto-sans-sc 不知道為什么我從github上面下載的不好使,所以就用了npm的 2.引用字體 import fontsource/noto-sans-sc; 在入口文件-main.js中引用 3.設置echats模板樣式 import * as echarts from echarts; // 在import的后…