7000字彻底弄懂注意力机制、Token和嵌入
本文深入解析了注意力机制和Token两大AI核心概念。注意力机制通过QKV模型实现信息动态分配,包括自注意力(序列内部关联)、交叉注意力(序列间交互)及双向/因果注意力。Token作为机器理解的基本单位,涵盖文本分词(单词/子词级)、视觉Patch(图像分块)以及特殊CLS Token(聚合全局信息)。二者共同构成现代深度学习模型处理多模态数据的基础,使AI具备上下文理解、重点聚焦和关联推理能力,
注意力机制、Token和嵌入
第一部分:什么是注意力机制?—— 从“人脑筛选”到“AI放大镜”
1.1 核心思想:资源的智能分配
想象一下,你在一个嘈杂的鸡尾酒会上,周围有很多人同时在交谈。但当你专注于和面前的朋友聊天时,尽管背景噪音很大,你依然能清晰地听到他的声音,而其他人的谈话则变成了模糊的背景音。你的大脑,自动地将有限的“认知资源”分配给了最重要的信息源。 这就是注意力机制最本质的思想。
在人工智能领域,尤其是在处理序列数据(如文本、语音、视频)时,模型也面临着类似的问题:输入信息量巨大,但并非所有部分都同等重要。注意力机制就是一种让模型学会**“在何处投注更多计算资源”** 的机制。
简单定义:注意力机制是一种计算策略,它允许模型在处理信息时,动态地、有区别地关注输入的不同部分,并根据任务目标为这些部分分配不同的重要性权重。
1.2 工作原理:经典的“Query-Key-Value”模型
为了实现上述思想,研究人员设计了一个优雅的数学模型,通常被称为 QKV (Query-Key-Value) 模型。我们可以用一个图书馆找书的类比来理解它:
- Value:图书馆里所有的书本身。它们是信息的原始载体,是我们最终想要获取的内容。
- Key:每本书的索引号或书名。它是用来“标识”和“检索”这本书的标签。
- Query:你的阅读需求或问题。例如,“我想找一本关于‘人工智能’的入门书籍”。
注意力机制的工作流程如下:
- 计算注意力分数:将你的 Query 与图书馆里所有书的 Key 进行匹配度计算(比如计算相似度)。这个过程就是在问:“我的问题(Query)和哪本书的标签(Key)最相关?” 计算出的分数就是“注意力分数”,它表示每本书对于当前Query的重要程度。
- 归一化:使用Softmax等函数将所有注意力分数转化为一个概率分布(所有权重之和为1)。这就像是将“相关程度”转化为了“关注权重”,确保模型关注的是一个相对的比例。
- 加权求和:将归一化后的注意力权重,与对应的 Value (书本内容)相乘并求和。最终得到的就是一个加权平均后的信息。这意味着,与你Query高度相关的书,其内容(Value)在最终结果中占据的比重就越大。
最终输出 = Σ (注意力权重ᵢ × Valueᵢ)
这个输出,不再是简单的原始信息堆砌,而是一个经过信息筛选和聚焦后的精华,它直接针对你的Query(问题)进行了优化。
1.3 详解常见的注意力机制
1.3.1 自注意力机制
核心思想:理解一句话内部的关联
自注意力,顾名思义,是序列内部元素之间的注意力。它的目标是让序列中的每个元素,都与序列中的所有其他元素进行一次“交流”,从而更好地理解自身的上下文环境。
类比:读一句话 - “The animal didn‘t cross the street because it was too tired.”
句子中的 “it” 指的是什么?是人还是动物?我们人类很容易知道“it”指的是“The animal”。因为我们在理解“it”的时候,会下意识地去回顾句子中的其他词,尤其是“animal”和“tired”,并建立连接。
自注意力机制就在做同样的事情。在处理“it”这个词时,它会:
- Query:来自“it”的表示。
- Key/Value:来自句子中所有词(包括“it”自己)的表示。
- 计算:“it”的Query会与“animal”、“tired”、“street”等所有词的Key进行计算。结果很可能是,“animal”和“tired”获得了很高的注意力权重。
- 输出:于是,“it”的新表示,就是由“animal”、“tired”等词的信息加权融合而成的。这样,模型就学会了“it”和“animal”之间的指代关系。
重要意义:自注意力机制使得模型能够捕获长距离依赖关系,无论两个词在序列中相隔多远,都可以直接建立联系。这克服了传统RNN模型在处理长序列时信息衰减的难题。
应用:Transformer模型的核心,BERT、GPT等预训练模型的基础。
1.3.2 交叉注意力
核心思想:两个序列之间的信息桥梁
交叉注意力发生在两个不同的序列之间。一个序列提供Query,另一个序列提供Key和Value。它常用于需要融合多种信息来源的任务。
类比:机器翻译(将英文翻译成中文)。
- 源序列(Source Sequence):
“I love you.”(提供Key和Value) - 目标序列(Target Sequence):
“我” “爱” “你”(提供Query)
当模型要生成目标语言的第二个词“爱”时:
- Query:来自当前已生成的部分“我”以及当前要生成的位置“爱”的表示。
- Key/Value:来自整个源序列
“I”, “love”, “you”的表示。 - 计算:这个Query会与源序列中每个词的Key进行匹配。很可能,“love”这个词会获得极高的注意力权重。
- 输出:生成“爱”这个词时,模型就高度聚焦于源序列中的“love”,从而产生准确的翻译。
重要意义:交叉注意力是实现序列到序列任务的关键,它让模型在生成目标序列的每一个元素时,都能有选择地从源序列中提取最相关的信息。
应用:机器翻译、文本摘要、问答系统(问题Query,文档Key/Value)。
1.3.3 双向注意力 vs. 因果注意力
这是在自注意力基础上的两种掩码策略。
-
双向注意力:在计算注意力时,每个词都可以“看到”序列中的所有词,包括它左边和右边的词。就像我们读完整个句子再去理解每个词一样。
- 应用:BERT等编码器模型。适合做理解类任务,如文本分类、情感分析。
-
因果注意力:在计算注意力时,每个词只能“看到”它左边的词,而不能看到右边的(未来的)词。这就像我们逐字写文章或说话一样,在说出下一个词之前,你只知道已经说出的部分。
- 实现方式:通过一个“掩码”矩阵,将未来位置的注意力权重设置为负无穷,使得Softmax后这些位置的权重为0。
- 应用:GPT等解码器模型。适合做生成类任务,如文本生成、对话。
总结:注意力机制的威力
注意力机制的本质是一种信息筛选和动态加权的机制。它让模型从“一刀切”的处理方式,升级为“具体问题具体分析”的智能方式。通过QKV模型,它赋予了模型三大能力:
- 关联能力:发现数据内部及数据之间的复杂关系。
- 聚焦能力:忽略噪音,关注重点。
- 上下文理解能力:根据全局信息动态地理解局部。
它不仅是Transformer的基石,更是现代深度学习模型实现飞跃的关键组件之一。
第二部分:什么是Token?—— 机器理解的“基本单位”
2.1 核心思想:语言的数字化切片
要让计算机理解文本、图像、声音等非结构化数据,第一步就是将这些数据切分成小块,并转化为数字。这些被切分出来的、被数字化的基本单位,就叫做 Token。
简单定义:Token是模型输入和处理的离散的基本单位。它是连续现实世界(如文本、图像)与离散数字世界之间的桥梁。
2.2 文本中的Token:不只是“单词”
在自然语言处理中,Tokenization(分词)是将文本切分成Token的过程。
- 单词级:
“I love deep learning.”->[“I”, “love”, “deep”, “learning”] - 子词级:这是更流行的方式,能更好地处理未登录词(生僻词)。例如,
“unhappiness”可能被切分为[“un”, “happi”, “ness”]。这样,模型就能学习到“un”表示否定,“ness”表示名词后缀,即使它没见过“unhappiness”也能猜个大概。 - 字符级:将每个字符作为一个Token,如
[“I”, “ ”, “l”, “o”, “v”, “e”, ...]。这种方式词汇表极小,但序列长度极大,建模长期依赖更困难。
2.3 视觉中的Token:图像的“拼图块”革命
在Transformer模型被引入计算机视觉领域(如Vision Transformer, ViT)之前,人们很难想象如何将注意力机制用在图像上,因为图像是一个庞大的像素矩阵。ViT的解决方案非常巧妙:将图像切成小块。
这些图像小块,就是视觉领域的 Token。
-
Patch Token:这是最核心的概念。将一张
224x224像素的图像,切割成16x16个14x14像素的小块。每个小块就被称为一个 Patch。然后将每个Patch展平成一个向量,这个向量就叫做 Patch Token。这样一来,一张图片就变成了一个由196个(16x16)Patch Token组成的“序列”,就像由196个词组成的句子一样,可以直接输入Transformer进行处理。 -
Image Token:Image Token 通常是 Patch Token 的同义词,泛指代表图像信息的Token。在某些语境下,它也可能指通过CNN特征图得到的Token,但在ViT及其衍生模型中,它基本等同于Patch Token。
2.4 特殊的Token:CLS Token
CLS Token 是一个在训练时人为添加到序列开头的特殊Token。
[CLS]是 Classification 的缩写。
它的作用是什么?
在BERT等模型中,设计理念是:由于自注意力机制会让序列中的每个Token都包含所有其他Token的信息,那么位于序列开头的 [CLS] Token,理论上就“看到”了整个序列的信息。因此,它的最终输出状态,可以被视为整个序列的聚合表示或“句子向量”。
类比:就像一篇文章的摘要或标题,它凝练了全文的核心思想。
应用:
- 在文本分类任务中,直接将
[CLS]Token对应的输出向量接入一个分类器,来判断整句话的情感、主题等。 - 在图像分类的ViT中,同样会在Patch Token序列的开头添加一个
[CLS] Token,并用它的输出结果来进行图像分类。
2.5 各种Token的联系与总结
| Token 类型 | 来源 | 作用 | 类比 |
|---|---|---|---|
| 文本Token | 文本分词 | 代表一个单词/子词/字符 | 语言中的“词” |
| Patch Token | 图像切块 | 代表图像的一个局部区域 | 拼图中的“一块” |
| Image Token | 通常等同于Patch Token | 代表图像信息 | 拼图中的“一块” |
| CLS Token | 人为添加,位于序列开头 | 聚合整个序列的信息,用于整体性任务(如分类) | 文章的“摘要”或“标题” |
它们之间的联系:
- 统一的处理范式:无论是文本Token还是图像Patch Token,它们都被转化为向量后,以序列的形式输入到Transformer中。这使得同一个模型架构能够处理多种模态的数据。
- 序列的组成部分:在一个序列中,CLS Token、文本Token、图像Patch Token可以共存。例如,在多模态模型中,一个序列可能是:
[CLS] + 文本Tokens + 图像Patch Tokens。模型通过自注意力机制,让所有这些Token自由地进行信息交互。
第三部分:什么是嵌入?—— 从“符号”到“向量”的魔法
3.1 核心思想:为符号赋予“灵魂”
在计算机看来,单词“king”和“queen”只是两个不同的字符串,它们之间没有任何关系。但我们知道,它们之间有“性别”和“王室”的语义关联。如何让计算机也能“感受”到这种关联?
嵌入 就是解决这个问题的魔法。它的核心思想是:将离散的、高维的符号(如Token),映射到连续的、低维的向量空间中的一个点。
简单定义:嵌入是一个查找表或一个函数,它将一个Token(通过其索引或ID)转换成一个固定长度的、稠密的浮点数向量。这个向量被称为 嵌入向量 或 词向量。
3.2 嵌入向量的神奇特性
经过良好训练的嵌入向量,会展现出令人惊叹的语义和语法特性。
最经典的例子:向量(“king”) - 向量(“man”) + 向量(“woman”) ≈ 向量(“queen”)
这意味着,在向量空间中,“国王”与“男人”的差异(可以理解为“王权”),加上“女人”,就得到了“女王”。语义关系被编码为了向量空间中的几何关系!
类似地:
向量(“Paris”) - 向量(“France”) + 向量(“Italy”) ≈ 向量(“Rome”)(首都关系)向量(“walking”) - 向量(“walk”) + 向量(“swim”) ≈ 向量(“swimming”)(时态关系)
3.3 嵌入是如何工作的?
- 初始化:首先,随机初始化一个巨大的嵌入矩阵。这个矩阵的大小是
[词汇表大小, 嵌入维度]。例如,词汇表有50000个词,我们想得到300维的向量,那么这个矩阵就是50000 x 300。每一行对应一个词的初始向量。 - 查找:当输入一个Token(比如“love”,它的ID是205),模型就会去这个矩阵里找到第205行,这个长度为300的向量,就是“love”的嵌入向量。
- 学习:这个嵌入矩阵是可训练的参数。在模型通过大量数据完成目标任务(如预测下一个词、判断句子关系)的过程中,通过反向传播算法,不断地更新这个嵌入矩阵中的数值。
- 结果:训练完成后,语义相近、语法功能相似的词,它们的嵌入向量在向量空间中的位置就会彼此靠近。
3.4 嵌入与Token的共生关系
嵌入是Token的“灵魂”,Token是嵌入的“载体”。
- Token是离散的符号,嵌入是连续的表示:Token本身只是一个ID或一个字符串,没有数学运算意义。嵌入将其转化为一个可以计算、比较、优化的数学对象。
- 嵌入是模型处理Token的第一步:在模型的输入层,第一个操作通常就是 Token -> Embedding。没有嵌入,模型就无法“理解”Token。
- 共同构成模型的输入:一个序列的Tokens,经过嵌入层后,就变成了一个向量序列。这个向量序列才是真正被Transformer等模型处理的“食物”。
流程示例(以文本为例):
原始句子: “I love deep learning.”
- 分词 -> Tokens:
[“I”, “love”, “deep”, “learning”]-> 对应的ID:[101, 205, 403, 789](假设的ID) - 嵌入查找 -> 嵌入向量序列:
[ Embedding(101), Embedding(205), Embedding(403), Embedding(789) ] - 输入模型:这个向量序列被送入模型的下一层(例如Transformer层)进行进一步处理。
3.5 位置嵌入:为序列注入“顺序”信息
经典的嵌入只包含了Token的语义信息,但没有包含它的位置信息。然而,序列的顺序至关重要。“狗咬人”和“人咬狗”的意思天差地别。
Transformer的自注意力机制本身是置换不变的,即打乱输入序列的顺序,输出结果不变(除了CLS Token)。这显然不符合语言和图像的空间结构。因此,需要额外引入位置信息。
位置嵌入 就是一种专门用来表示Token在序列中位置的向量。它与Token嵌入向量具有相同的维度,两者会相加,作为最终的输入。
最终输入向量 = Token嵌入向量 + 位置嵌入向量
这样,模型在接收到每个Token的输入时,不仅知道了它“是什么”(语义),还知道了它“在哪里”(位置)。
终极总结:三者的协同交响曲
现在,让我们将这三个概念串联起来,看它们是如何在像Transformer这样的现代AI模型中协同工作的:
-
数据准备(Tokenization):
- 将原始数据(文本/图像)切片成基本的、离散的单元 —— Token(文本Token / Patch Token)。
- 在序列开头添加一个特殊的 CLS Token,用于后续的整体表示。
-
数字化表示(Embedding):
- 通过嵌入层,将每个Token(包括CLS Token)映射为一个稠密的、蕴含语义的向量(Token嵌入)。
- 同时,为序列中的每个位置生成一个位置嵌入向量。
- 将两者相加,得到既包含语义又包含位置信息的最终输入向量。
-
信息整合与聚焦(Attention Mechanism):
- 将带有位置信息的输入向量序列送入自注意力层。
- 自注意力机制让序列中的每个Token(通过QKV模型)与所有其他Token进行交互,动态计算注意力权重。
- CLS Token通过与所有Token交互,汇聚全局信息,成为整个序列的“摘要”。
- 如果是多模态或编码器-解码器结构,还会使用交叉注意力,让一个序列(如问题)去查询另一个序列(如文档)。
-
输出与任务:
- 经过多层Transformer块的处理后,取出 CLS Token 对应的输出向量,用于分类等整体任务。
- 或者取出序列中其他Token的输出向量,用于翻译、生成、问答等任务。
总而言之:
- Token 是构建AI理解的 “砖石” ,是信息的基本单位。
- 嵌入 是为这些砖石注入语义和位置的 “水泥” ,让它们具有数学意义和关系。
- 注意力机制 则是智能的 “建筑师” ,它动态地决定如何将这些砖石(通过水泥粘合后)组合在一起,搭建出坚固而精巧的“信息大厦”。
这三者的结合,构成了当今最强大AI模型的基石,推动了自然语言处理、计算机视觉乃至多模态领域的革命性进步。
更多推荐

所有评论(0)