当前位置: 首页 > java >正文

块三角掩码(Block-Triangular Masking)

在视频或时序数据(如帧序列)处理中,块三角掩码(Block-Triangular Masking) 是一种通过限制注意力机制的可视范围来强制实现 因果性(Causality) 的方法。其核心思想是:当前帧的查询(Query)只能关注到当前帧及之前帧的键(Key)和值(Value),而不能看到未来帧的信息。以下是具体实现原理和步骤的详细解释:


1. 因果性的定义

在时序数据处理中,因果性 要求:

  • 未来不能影响过去:即生成或预测帧 ( t+1 ) 时,只能使用帧 ( 1 ) 到 ( t ) 的信息,不能使用帧 ( t+1 ) 之后的信息。
  • 数学表达:对于注意力矩阵 ( A ),其元素 ( A_{ij} ) 表示查询 ( q_i ) 对键 ( k_j ) 的注意力权重。因果性要求:
    Aij=0ifj>i(即未来帧的键不能影响过去帧的查询) A_{ij} = 0 \quad \text{if} \quad j > i \quad (\text{即未来帧的键不能影响过去帧的查询}) Aij=0ifj>i(即未来帧的键不能影响过去帧的查询)
    在分块场景下,需扩展为 块级因果性

2. 块三角掩码的实现原理

(1) 分块处理
  • 将视频帧序列划分为多个 块(Block),每个块包含固定数量的帧(如 ( b ) 帧/块)。
  • 例如,序列 ( [f_1, f_2, f_3, f_4, f_5, f_6] )(共6帧)按块大小 ( b=2 ) 划分为:
    B1=[f1,f2],B2=[f3,f4],B3=[f5,f6] B_1 = [f_1, f_2], \quad B_2 = [f_3, f_4], \quad B_3 = [f_5, f_6] B1=[f1,f2],B2=[f3,f4],B3=[f5,f6]
(2) 块级因果性约束
  • 目标:确保块 ( B_k ) 中的查询只能关注到块 ( B_1 ) 到 ( B_k ) 的键,而不能关注到块 ( B_{k+1} ) 及之后的键。
  • 掩码规则
    • 对于查询 ( q_i )(位于块 ( B_m ))和键 ( k_j )(位于块 ( B_n )):
      Mij={1if n≤m(允许关注当前及之前块)0otherwise(禁止关注未来块) M_{ij} = \begin{cases} 1 & \text{if } n \leq m \quad (\text{允许关注当前及之前块}) \\ 0 & \text{otherwise} \quad (\text{禁止关注未来块}) \end{cases} Mij={10if nm(允许关注当前及之前块)otherwise(禁止关注未来块)
    • 分块索引计算
      • 块索引:(m=⌊(i−1)/b⌋+1( m = \lfloor (i-1)/b \rfloor + 1(m=⌊(i1)/b+1),(n=⌊(j−1)/b⌋+1( n = \lfloor (j-1)/b \rfloor + 1(n=⌊(j1)/b+1)。
      • 例如,( i=3 )(帧 ( f_3 ))位于块 ( B_2 ),( j=5 )(帧 ( f_5 ))位于块 ( B_3 ),则 ( n=3 > m=2 ),故 ( M_{35}=0 )。
(3) 掩码矩阵示例

以块大小 (b=2( b=2(b=2) 和序列 ([f1,f2,f3,f4]( [f_1, f_2, f_3, f_4]([f1,f2,f3,f4]) 为例:

  • 块划分:(B1=[f1,f2]( B_1 = [f_1, f_2](B1=[f1,f2]),(B2=[f3,f4]( B_2 = [f_3, f_4](B2=[f3,f4])。
  • 掩码矩阵 ( M )(行是查询,列是键):
    M=[1100110011111111] M = \begin{bmatrix} 1 & 1 & 0 & 0 \\ 1 & 1 & 0 & 0 \\ 1 & 1 & 1 & 1 \\ 1 & 1 & 1 & 1 \\ \end{bmatrix} M=1111111100110011
    • 解释
      • 查询 ( f_1 ) 和 ( f_2 )(块 ( B_1 ))只能关注 ( B_1 ) 的键(( f_1, f_2 ))。
      • 查询 ( f_3 ) 和 ( f_4 )(块 ( B_2 ))可以关注 ( B_1 ) 和 ( B_2 ) 的键((f1,f2,f3,f4( f_1, f_2, f_3, f_4(f1,f2,f3,f4))。

3. 如何应用到注意力机制中

在自注意力(Self-Attention)中,注意力权重 ( A ) 通过以下步骤计算:

  1. 计算原始注意力分数
    Sij=qiTkj/dk S_{ij} = q_i^T k_j / \sqrt{d_k} Sij=qiTkj/dk
    其中 ( q_i ) 是查询,( k_j ) 是键,( d_k ) 是键的维度。

  2. 应用块三角掩码
    Sij′=Sij⋅Mij S'_{ij} = S_{ij} \cdot M_{ij} Sij=SijMij

    • 掩码 (Mij( M_{ij}(Mij) 将未来帧的注意力分数强制置零。
  3. Softmax归一化
    Aij=eSij′∑j′eSij′′ A_{ij} = \frac{e^{S'_{ij}}}{\sum_{j'} e^{S'_{ij'}}} Aij=jeSijeSij

    • 由于 (Sij′=0( S'_{ij}=0(Sij=0) 对所有 ( j > i )(按块划分),未来帧的贡献被完全排除。

4. 为什么能保证因果性?

  • 信息流限制:块三角掩码确保 信息只能从过去块流向当前块,而不会反向流动。
  • 生成顺序一致性:在自回归生成(如视频预测)中,帧 ( t+1 ) 的生成仅依赖于已生成的帧 ( 1 ) 到 ( t ),符合物理世界的因果律。
  • 对比全注意力:若不使用掩码,未来帧的信息可能泄漏到当前帧的预测中,导致逻辑错误(如“看到未来”)。

5. 实际应用场景

  • 视频预测:预测未来帧时,只能使用过去帧的信息。
  • 实时流处理:如语音识别、股票预测,需保证低延迟且不依赖未来数据。
  • 自回归Transformer:如GPT、VideoGPT等模型中,通过块三角掩码实现高效的因果自注意力。

6. 扩展:块内因果性

若需进一步限制 块内帧的因果性(即帧 ( t+1 ) 不能看到同一块内帧 ( t ) 之后的信息),可调整掩码为 严格下三角矩阵
Mij={1if ⌊j/b⌋<⌊i/b⌋or(⌊j/b⌋=⌊i/b⌋ and j≤i)0otherwise M_{ij} = \begin{cases} 1 & \text{if } \lfloor j/b \rfloor < \lfloor i/b \rfloor \quad \text{or} \quad (\lfloor j/b \rfloor = \lfloor i/b \rfloor \text{ and } j \leq i) \\ 0 & \text{otherwise} \end{cases} Mij={10if j/b<i/bor(⌊j/b=i/b and ji)otherwise
此时掩码矩阵为:
M=[1000110000100011] M = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 1 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 1 & 1 \\ \end{bmatrix} M=1100010000110001
(但通常块内允许全局交互,仅块间严格因果。)


总结

块三角掩码通过 分块索引比较注意力分数置零,强制实现了 时序数据的因果性,确保模型在生成或预测时仅依赖过去信息。这种方法在视频、语音等时序任务中广泛应用,是自回归模型的核心组件之一。

以上内容由文心人工智能生成

http://www.xdnf.cn/news/17033.html

相关文章:

  • Java 中也存在类似的“直接引用”“浅拷贝”和“深拷贝”
  • feign日志学习记录
  • k8s+isulad 国产化技术栈云原生技术栈搭建1-VPC
  • VUE-第二季-01
  • python批量gif图片转jpg
  • 【DL学习笔记】深入学习tenser
  • Claude Code入门学习笔记(一)--Claude Code简介
  • ICCV 2025 | EPD-Solver:西湖大学发布并行加速扩散采样算法
  • 多线程异步日志系统与实现及 TCP/IP C/S 模型
  • 解剖 .NET 经典:从 Component 到 BackgroundWorker
  • AD方案(OpenLDAP或微软AD)适配信创存在的不足以及可能优化方案
  • Redis面试精讲 Day 9:Redis模块开发与扩展
  • 【数据迁移】Windows11 下将 Ubuntu 从 C 盘迁移到 D 盘
  • 每日面试题20:spring和spring boot的区别
  • Spring MVC 九大组件源码深度剖析(一):MultipartResolver - 文件上传的幕后指挥官
  • Go语言实战案例:TCP服务器与客户端通信
  • Uniapp一根数据线实现真机调试运行【uniapp如何把项目运行在手机上】
  • 昇思学习营-开发版-模型推理和性能优化
  • Kaggle 竞赛入门指南
  • Jetson Orin NX/NANO+ubuntu22.04+humble+MAVROS2安装教程
  • LeetCode - 合并两个有序链表 / 删除链表的倒数第 N 个结点
  • Nginx相关实验(2)
  • Linux服务器运维告警系统搭建完整指南
  • 使用AssemblyAI将音频数据转换成文本
  • Elastic 9.1/8.19:默认启用 BBQ,ES|QL 支持跨集群搜索(CCS)正式版,JOINS 正式版,集成 Azure AI Foundry
  • uni-app学习笔记01-项目初始化及相关文件
  • 控制建模matlab练习10:滞后补偿器
  • sqli-labs:Less-25关卡详细解析
  • Go语法:闭包
  • 【银行测试】银行票据项目业务+票据测试点分析(二)