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

各种各样的Self-attention学习下(第二十一周周报)

摘要

        本文系统性地阐述了优化自注意力机制计算效率的核心思路与方法。文章首先指出标准自注意力N×N矩阵存在低秩冗余,并介绍了​​Linformer​​等模型通过线性投影压缩键/值序列来利用这一特性。接着,文章探讨了通过筛选或聚合来​​减少键或查询的数量​​,从而直接缩小注意力矩阵规模的方法。

文章的重点在于揭示自注意力计算的数学本质,并展示如何通过​​改变计算顺序​​来优化。通过公式推导,文章阐明可以将昂贵的“逐个交互再求和”过程,转变为“先总和再交互”的策略。即预先将序列中所有键和值的信息聚合为一个全局的“上下文概要”,此后每个查询只需与该概要进行一次交互即可得到输出。这种​​计算复用​​的策略避免了重复计算,是实现线性复杂度的关键。最后,文章通过示意图直观对比了这种高效计算范式与标准计算的差异。

Abstract

        This article systematically explains the core concepts and methods for optimizing the computational efficiency of the self-attention mechanism. It begins by highlighting the low-rank redundancy inherent in the standard N×N self-attention matrix and introduces models like ​​Linformer​​ that leverage this property through linear projection to compress the key/value sequences. The article then explores methods to directly reduce the scale of the attention matrix by ​​reducing the number of keys or queries​​ via selection or aggregation.

A central focus is the mathematical underpinning of self-attention and how optimization can be achieved by ​​changing the order of computation​​. Through formulaic derivation, the article demonstrates how the costly process of "interacting with each element and then summing" can be transformed into a strategy of "aggregate first, then interact." This involves pre-computing a global "context summary" by aggregating information from all keys and values in the sequence. Subsequently, each query only needs to interact with this summary once to produce its output. This strategy of ​​computational reuse​​ avoids redundant calculations and is key to achieving linear complexity. Finally, schematic diagrams are used to visually contrast this efficient computational paradigm with the standard approach.

目录

1  N×N是否冗余

2  Self attention运作,解释是否冗余

3  总结


1  N×N是否冗余

        标准的多头自注意力矩阵虽然是 N×N 的大小,但本质上是​​低秩(Low Rank)​​ 的,这意味着它包含大量冗余信息,可以被有效地压缩。

        Linformer 的创新在于,它不再直接计算和存储庞大的 N×N 矩阵,而是通过对键(Key)和值(Value)序列进行线性投影,将它们从长度 N 映射到一个低维空间(例如长度 k,k << N)。这样,注意力计算的核心就变成了在一个 k 维空间中进行,从而将计算复杂度从序列长度 N 的平方量级成功地降低到了线性量级。简而言之,该图论证了我们并不需要完整的、稠密的注意力矩阵,利用其内在的低秩特性进行压缩是提升效率的有效途径。

        减少查询成功是case by case的。减少查询数量​​来优化自注意力计算效率的核心思想。其关键在于改变输出序列的长度,从而大幅降低计算复杂度。

        具体而言,该方法首先对原始序列中数量为N的键进行筛选或聚合,得到K个具有代表性的关键键。与此同时,查询的数量也不再与输入序列长度N强绑定,而是对应地减少到K个。这样,原本需要在N个查询和N个键之间计算的、规模为N×N的注意力矩阵,就被简化为在K个查询和K个代表性键之间进行计算。

        减少要选出代表性的KEY。优化自注意力计算效率的核心方法如下所示。

        图左侧是 ​​Compressed Attention​​ 的方法,它通过对原始的 N 个键(Key)向量进行卷积(Conv)等操作,将它们压缩或聚合为数量更少的一组代表性键。图右侧是 ​​Linformer​​ 模型采用的核心技术,它通过一个线性投影(图中 “Linear combination of N vectors” 和 “N×K” 的矩阵表示),将长度为 N 的序列直接映射到一个长度为 K(K << N)的低维表示。

2  Self attention运作,解释是否冗余

        计算注意力权重(图中以 α 表示)。具体来说,一个位置的查询向量(如 q¹)会分别与所有位置的键向量(如 k¹, k², ...)进行点积运算,并通过 Softmax 函数进行归一化,从而得到一系列权重分数(如 α‘₁,₁)。这些权重分数代表了在计算当前节点的输出时,应该“关注”或“分配”多少重要性给序列中的其他每个节点。

        由公式如下图所示。可以看到比较麻烦,但是我们可以拆解一下。

        化简之后,单独拎出来b1可以得到。

        我们先观察比较简单的分母。

        可以发现左半部分可以是两个矩阵相乘。我们再观察分子。

        将昂贵的“查询-键”交互与“值”的加权求和这两个步骤分离开​​。通过先聚合所有键值信息,再让查询与该聚合结果交互,避免了序列长度的平方次计算,从而实现了线性复杂度。

        用形象的图可以得知,左侧无需再次进行计算。

        我们不需要为每个查询(如 ​​φ(q¹)​​ 和 ​​φ(q²)​​)都独立地、重复地计算这个公共模块。相反,这个复杂的中间结果​​只需要被计算一次​​,然后就可以被缓存起来,供序列中所有位置的查询计算时复用。

        我们再来看老师的,更加简便的计算方式。

        一个查询向量 q¹ 通过函数 φ 进行映射,然后将映射后的结果 φ(q¹) 与一组已经预先计算好的“键-值”聚合向量进行简单的点积操作,从而直接得到输出。这个聚合向量是图中的关键,它由下方的 M 个向量(代表序列中所有位置的信息)汇总而成。

        具体来说,这个高效过程分为两步:

        ​​预先聚合​​:模型会先将序列中所有位置的键向量 φ(kⁱ) 和对应的值向量 vⁱ 进行加权组合,形成一个全局的“上下文概要”或“记忆库”。这一步只需要对整个序列做一次。

        快速查询​​:当需要计算某个位置(例如 q¹ 对应的位置)的输出时,只需将映射后的查询 φ(q¹) 与这个预先聚合好的“上下文概要”进行一次性交互即可,而无需再与序列中的每一个键逐个比较。

        这种将“逐个交互再求和”转变为“先总和再交互”的策略,避免了昂贵的 N×N 注意力矩阵计算,使得模型即使处理极长序列也能保持高效。图中下方的 M 个向量及其连接线,正形象地表示了所有输入信息被压缩到这个高效的聚合结构中。

        q2也是如此。

3  总结

        高效自注意力的实现主要依赖于两大策略:规模缩减:通过低秩近似或筛选/聚合,直接减少参与计算的键或查询的数量,从源头上缩小问题规模。计算优化:利用数学恒等式改变计算顺序,将核心计算步骤转化为可被所有查询复用的公共操作,通过“预先聚合,一次性查询”避免重复的逐点计算。本质上是将计算复杂度从O(N²)降至O(N)的不同技术路径。

http://www.dtcms.com/a/550645.html

相关文章:

  • 网站前台功能模块介绍郑州网站建设一汉狮网络
  • 网站开发服务 税社交系统开发
  • 简单聊一下vue中的#app
  • 网站空间支持下载但不能下载文件简单门户网站开发
  • 厦门市小学生信息学竞赛(C++)初赛总复习(第二章 算法知识与数据结构 -第四节 队列)
  • 化工类网站建设推广网站备案后下一步做什么
  • 做网站一般需要哪些文件夹?兰州网站开发公司
  • 获取 Excel 工作表的名字【Java 图文详解】
  • 邢台专业做网站贝斯特专业网站
  • 惠州网站建设公司上海企业宣传片制作
  • 网站 建设文档提供邢台专业做网站
  • Gradle Groovy 和 Kotlin kts 语法对比
  • 做网站维护有什么要求物联网开发软件有哪些
  • 普陀做网站特色的岑溪网站开发
  • 对重庆电子政务网站建设评价wordpress模板里写php
  • 企业网站的网络营销功能包括还没做域名解析如何访问ftp的网站文件
  • 免费开网站自己家的电脑做网站需要备案没
  • 心理咨询网站后台学设计常用的网站
  • 安卓开发学习10-中级控件
  • 公司网站升级改版方案wordpress 一级目录
  • Rust 日志级别与结构化日志:从调试到生产的日志策略
  • 建英文网站有用吗自动外链发布工具
  • 从BSP到DFP和RTOS---专业的嵌入式开发工具Keil备忘
  • 【SpringBoot从初学者到专家的成长25】认识SpringBoot中的Spring Expression Language (SpEL)
  • IntelliJ IDEA配置Tomcat教程
  • 北京做网站建设的公司排名网页qq登陆保护在哪里
  • 广东省网站集约化建设做外贸如何建立网站
  • Rust 中的 if let 与 while let 语法糖:简化模式匹配的优雅工具
  • 基于GBR原理的叠腮技术生物学基础
  • 网站备案找哪个部门制作一个网站能多少钱