Zubnet AI学习Wiki › 注意力
模型

注意力

别名:注意力机制、自注意力
Transformers 中的核心机制,使模型能够确定输入中哪些部分彼此最相关。与早期模型从左到右逐字阅读不同,注意力机制使每个词能够同时“审视”其他所有词,以理解上下文。

为什么重要

注意力机制是现代大型语言模型(LLMs)能够理解“river bank”(河岸)与“bank account”(银行账户)中“bank”含义不同的原因。这也是为什么更长的上下文窗口成本更高—注意力机制的计算量与序列长度呈二次方增长。

深度解析

注意力机制的核心是计算加权求和。对于序列中的每个标记,该机制会问:“此时其他所有标记对我而言有多相关?”它通过三个学习到的投影——查询(query)、键(key)和值(value)(即你在每篇论文中看到的Q、K、V)来实现这一点。一个标记的查询会与所有标记的键进行点积运算,从而生成一组分数,这些分数经过softmax函数转换为权重,然后用这些权重将值混合成一个上下文感知的表示。整个操作是可微的,因此模型在训练过程中可以学习哪些关系是重要的。多头注意力机制会并行运行多个这样的操作,使用不同的投影,使模型能够同时关注不同类型的关系——一个头可能跟踪句法,而另一个头可能跟踪代词指代。

并行性的突破

自注意力机制的实用突破在于并行性。像LSTM这样的循环网络逐个处理标记,这意味着训练过程本质上是顺序且缓慢的。注意力机制则可以一次性处理整个序列,将训练转化为GPU擅长的大规模矩阵乘法。这就是为什么Transformer能够扩展到数十亿参数和数万亿训练标记——硬件早已为这种工作负载做好准备。你今天交互的每一个大型语言模型,从GPT-4到Claude到Llama 3到Mistral,都归功于这种并行性优势。

二次方问题

房间里的大象是二次方扩展问题。标准注意力机制为每对标记计算一个分数,因此将上下文窗口翻倍会使计算和内存消耗增加四倍。一个4K上下文窗口的模型每层每头需要1600万个注意力分数;跳到128K上下文窗口,这个数字就达到了160亿。这就是为什么扩展上下文窗口一直是一个巨大的工程挑战。Tri Dao开发的Flash Attention通过重构计算方式,避免在GPU HBM中显式生成完整的注意力矩阵,从而在不改变数学原理的情况下使长上下文成为可能。Llama 2及更新模型中使用的组查询注意力(GQA)通过在查询头之间共享键值头,减少了生成过程中累积的KV缓存。

交叉注意力是一种值得单独理解的变体。在编码器-解码器模型和条件生成(如文本到图像)中,查询来自一个序列,而键和值来自另一个序列。这就是Stable Diffusion根据你的文本提示进行条件生成的方式——图像侧的查询会关注文本编码器的输出。这也是原始Transformer处理翻译的方式:解码器会关注编码器的输出以决定下一步生成什么。

注意力机制不是什么

一个常见的误解是注意力机制是“理解”。其实不是。注意力机制是一种路由机制——它决定信息流向哪里,但实际的处理发生在每个注意力块之后的前馈层中。Anthropic的“Transformer Circuits”等研究显示,注意力头会发展出专门的角色(如归纳头、前一标记头),但这些是学习到的模式,而不是编程逻辑。另一个实际需要注意的问题是:注意力机制本身并不知道标记的顺序。如果没有位置编码(正弦、学习到的或类似RoPE的旋转位置编码),它会将序列视为一组无序的标记。正确的位置编码对于长上下文性能至关重要,这也是为什么ALiBi和RoPE等方法持续演进的原因。

相关概念

← 所有术语
← AssemblyAI 自动化 →
ESC