LaViT:这也行,微软提出直接用上一层的注意力权重生成当前层的注意力权重 | CVPR 2024 - 晓飞的算法工程笔记

💡 原文中文,约8600字,阅读约需21分钟。
📝

内容提要

该文章介绍了一种名为LA-ViT的新型视觉Transformer架构,通过引入少注意力层和注意力残差模块来减少注意力计算的复杂性和饱和问题。实验证明,LA-ViT在各种视觉任务中表现出色,并具有较低的计算复杂度。

🔎

延伸解读

注意力饱和:ViT 的隐藏问题

文章指出,随着 ViT 层数加深,注意力矩阵往往保持大部分不变,重复前面层中观察到的权重分配,即注意力饱和。这导致计算冗余,且可能限制模型性能。LA-ViT 通过重用先前注意力来缓解这一问题,为 ViT 设计提供了新思路。

少注意力机制:如何降低计算复杂度

LA-ViT 在每个阶段的前几层使用标准自注意力(VA 层),后续层则通过线性变换重用先前注意力(LA 层)。由于 LA 层避免了计算查询-键内积,其注意力计算复杂度从 O(N^2 D) 降至 O(N^2),且仅需计算查询嵌入,K-Q-V 转换复杂度减少 3 倍。

对角性保持损失:维护注意力语义

对注意力矩阵进行线性变换可能破坏其对角性和对称性,从而影响 token 间关系的表示。为此,作者引入对角性保持损失,强制注意力矩阵满足对称性和对角元素大于非对角元素的性质。该损失与交叉熵损失结合,确保变换后的注意力仍能准确反映 token 相对重要性。

注意力残差下采样:保留跨阶段上下文

在分层 ViT 中,下采样可能导致上下文信息丢失。LA-ViT 设计注意力残差模块,通过深度卷积和 1x1 卷积将前一阶段的注意力矩阵下采样并融入当前阶段,从而保留重要语义信息。该模块仅需少量代码修改,可无缝集成到现有 Transformer 架构中。

❓

Q&A

LA-ViT架构的主要创新点是什么?

LA-ViT通过引入少注意力层和注意力残差模块,减少了注意力计算的复杂性和饱和问题。

LA-ViT如何提高计算效率?

LA-ViT通过重复使用先前的注意力计算和引入保持对角性的损失函数来提高计算效率。

LA-ViT在视觉任务中的表现如何?

LA-ViT在多个视觉任务中表现优异,且计算复杂度较低,超越了现有的最先进的ViT变种。

注意力残差模块的作用是什么?

注意力残差模块帮助保留重要的上下文信息,避免信息丢失,并有效引导当前阶段的注意力计算。

对角性保持损失函数的目的是什么?

对角性保持损失函数旨在确保注意力矩阵的基本属性,维护语义完整性,确保准确反映输入标记之间的相对重要性。

LA-ViT如何解决注意力饱和问题?

LA-ViT通过在每个阶段使用原始注意力层和少注意力层,减少了与自注意力机制相关的平方计算开销,从而解决了注意力饱和问题。

🏷️

标签

➡️

继续阅读