一、开头同一个词两个意思上篇文章留下了一个问题。Embedding 让大模型在高维空间里建立了词与词之间的语义关系——法国和巴黎靠近猫和狗是邻居。但 Embedding 有一个根本缺陷它只描述词本身不描述词所处的环境。来看两个句子“我今天买了一个苹果。”“苹果发布了新款 iPhone。”两句话里的苹果Embedding 向量是完全相同的——训练完成后就固定了。同一个向量一个指水果一个指科技公司。大模型怎么用固定的向量表达动态的含义核心思想是不要只看这个词是什么要看它周围有什么。二、Embedding 向量如何变成 Q、K、V每个 token 经过 Embedding 查表后得到一个固定向量——这个词的静态语义档案。要让这个档案看见上下文还需要一次变形。一句话回答这个问题Embedding 向量同时乘以三个权重矩阵分别得到 Query、Key、ValueQX · W_q X 是 Embedding 向量形状1×768 KX · W_k VX · W_vW_q、W_k、W_v 是模型在训练中学习到的参数三个矩阵互不相同。同一个 Embedding 向量经过三次线性变换得到三个不同身份的投影——同一个词可以同时是提问者、索引标签、和内容提供者。真实模型中W_q、W_k、W_v 的形状是768 × d_headd_head 通常是 64。Embedding 向量从 768 维投影到 64 维所有词的 Q、K、V 打包成三个 N×d_head 的矩阵。数学原理和下面的例子完全一样只是数字更大。用一个 2 维例子走完 Attention 的完整流程为便于验算这里把维度压缩到最小直接指定 Q、K、V 向量相当于经过权重矩阵变换后的结果来完整展示一次注意力计算。设定两个 token“苹和果”取自苹果一词代表同一个词的内部协作关系。场景输入序列[苹,果]共2个 token 第一步为每个 token 定义 Q、K、V 向量 苹Q₁[3,1]K₁[3,1]V₁[6,0.5]果Q₂[1,3]K₂[1,3]V₂[0.5,6]苹在第一维更强果在第二维更强Q 和 K 方向一致 第二步计算所有 QK^T 注意力分数每个 Q 和每个 K 做点积 分数矩阵 Q₁ · K₁[3,1]·[3,1]3×3 1×110苹→苹自己和自己 Q₁ · K₂[3,1]·[1,3]3×1 1×36苹→果 Q₂ · K₁[1,3]·[3,1]1×3 3×16果→苹 Q₂ · K₂[1,3]·[1,3]1×1 3×310果→果自己和自己 第三步Softmax 归一化逐行分别归一化 对苹的行[10,6]做 softmax e^1022026e^6403总和22429苹→苹22026/22429 ≈98.2% 苹→果403/22429 ≈1.8% 对果的行[6,10]做 softmax e^6403e^1022026总和22429果→苹403/22429 ≈1.8% 果→果22026/22429 ≈98.2% 第四步用归一化后的权重对所有 V 加权求和苹的输出0.982× V₁ 0.018× V₂0.982×[6,0.5]0.018×[0.5,6][5.89,0.49][0.01,0.11]≈[5.90,0.60]果的输出0.018× V₁ 0.982× V₂0.018×[6,0.5]0.982×[0.5,6][0.11,0.01][0.49,5.89]≈[0.60,5.90]发生了什么苹和果各自主要在关注自己98.2%只从对方那里吸收了约 1.8% 的信息。这不是 bug而是 Attention 的自然规律在词内关系中每个 token 最需要的信息首先来自自己。苹的主要工作是搞清自己是苹而不是别的字从果那里只获取我后面的搭档是’果’这类辅助信息。什么时候跨 token 的注意力权重会变大“我买了苹果。”这时代表苹果的 token 应该更多关注买了和我——苹和果之间的注意力会相对下降因为语境词买的存在价值超过了字与字之间的搭配。具体来说如果买的 Key 和苹的 Query 高度匹配买水果是高频共现“苹给自己的权重就会从 98.2% 下降到比如 70%把更多注意力分给买”。Attention 权重的分布取决于 Q 和 K 的匹配强度——这两者都来自 Embedding 向量经过训练学到的权重矩阵。这就是它能根据上下文动态分配注意力的数学原理。三、一个比方图书馆找书想象你走进一座图书馆要找关于量子物理的资料。你不会把每排书架从头走到尾把每一本书都翻一遍——太慢了。你的大脑会自动做一件事扫视书架标签给每本书打分。《量子力学入门》——95分高度相关。《经典力学》——40分有点关系但不是我要的。《烹饪指南》——0分完全不相关。《量子计算导论》——88分非常相关。你把大部分精力花在读那几本高分书上低分的瞟都不瞟一眼。Attention 机制在做的事和这完全一样打分和分配注意力。每个词向上下文中的所有词发起询问“你们跟我有什么关系关系大的多贡献信息没关系的把权重降到最低。”同样是苹果在买了一个苹果里它向买和了一个提问发现自己在购买语义框架里在发布了新款 iPhone里它向发布和iPhone提问发现自己在公司发布产品框架里。同一个向量通过上下文重新加权获得了不同的含义。四、Q、K、V三个角色各司其职Attention 机制的核心公式只有三步打分、归一化、加权求和。Attention(Q, K, V) softmax(Q · K^T / √d) · VQueryQ我需要什么每个词在某个位置产生一个 Query向整个上下文提问“我当前需要什么信息”回到图书馆的比喻你带着一个问题走进图书馆——“我需要关于量子物理的资料”。这就是 Query。在语言处理中“我感冒了里的感冒”它产生的 Query 大约是在问“在这个句子里我该是什么意思”KeyK我能提供什么每个词除了发出 Query也同时携带自己的 Key——这是它的索引标签代表我能提供什么信息。图书馆里每本书的书脊上贴的标签就是 Key。它告诉搜索者这本书是关于什么的、适合什么程度的读者、涉及哪些主题。Query 问的是我在找什么Key 回答的是我能提供什么。两者的匹配度越高分数越高。ValueV匹配成功后提供什么Key 解决了该问谁的问题。问到之后真正拿到的内容来自 Value。书找到了内容是 Value。Key 告诉你这本书跟量子物理有关Value 就是书里的实际文字、公式和图表。在 Attention 里Value 才是最终参与加权求和的信息载体。完整流程整个过程没有循环没有条件判断只有矩阵乘法和 Softmax 函数。五、为什么要三个不同的向量Query、Key、Value 都是从同一个词的向量变过来的。为什么不能直接用原始向量做匹配因为同一个词在不同场景下需要展示不同的面。以感谢为例• 作为Query它在问我前面有哪些词和我搭配哪些词帮我构成了感谢的语气• 作为Key它在对其他词广播我是一个表达感谢的词• 作为Value它提供感谢的实质内容——情感强度、礼貌程度原始 Embedding 是感谢的静态档案Query 是提问者的身份Key 是被检索标签的身份Value 是语义实质。六、Softmax把分数变成关注度打分之后分数是一串数值。以我买了一个苹果为例简化为 5 个 tokenQuery(苹果)对 Key 的匹配分数我→0.3买→0.6了→0.1一个→0.1这四个分数加起来只有 1.1不等于 1——直接用它们做权重显然不对但它们之间的相对大小已经表明了语义关联的强弱。买的分数最高说明苹果在问上下文我是谁的时候最需要从买那里获取信息。具体该给买多少注意力Softmax 的作用是把一组分数转换成概率分布先对每个分数取指数再归一化e^0.61.82e^0.31.35e^0.11.11e^0.11.11总和5.39归一化后我→1.35/5.3925%买→1.82/5.3934%了→1.11/5.3921%一个→1.11/5.3921%这就是 Attention 的权重分配“苹果把 34% 的注意力给了买”25% 给了我了和一个各占 21%——语境词买拿到了最多的权重正是因为它和苹果作为购买对象的语义关系最近。为什么要取指数而不是直接归一化直接除以四数之和关键在于比例的放大。原始分数里 0.6 和 0.3 的差值只有 0.3比例是 2 倍经过指数变换后e^0.6 和 e^0.3 的差值扩大到 1.82 - 1.35 0.47——这个更大的绝对差值在归一化时产生了显著效果如果直接用原始分数归一化买只能拿到 0.6 / 1.1 ≈ 55%用了指数放大后它拿到了 34%。看起来反而少了这就是指数函数真正做的事在归一化之前把分数之间的绝对差距拉开。原本 0.6 只比 0.3 大 0.3优势看起来微弱e^0.6 把这个差距翻译成指数世界的 1.82使得最终概率由这个更大的底数来决定。这样设计的好处是softmax 的梯度永远不为零指数函数光滑无零值模型在训练时能持续收到有效的梯度信号进行学习——这个过程和系列第二篇里语言模型预测下一个词时用的 Softmax是同一个数学操作。七、多头注意力一个人读不如十二个人读到这里我们讲的都是单个 Attention 的运作方式。但实际大模型里Attention 从来不是单独运作的。以 GPT-2 为例每一层有12 个注意力头它们同时工作各自独立地做 Attention 运算。为什么要 12 个因为一个角度不够。同样读我感冒了这句话不同的注意力头会关注不同的方面•头 0可能关注语法结构动词和主语的关系•头 3可能关注情感色彩感冒在大陆口语里表示感兴趣•头 7可能关注词的搭配习惯感冒在中文里常见的主语搭配没有人提前规定哪个头关注哪个方面。这是训练过程中自动形成的分工——每个头学到了一种有用的关注模式共同拼出对句子的完整理解。八、n² 的代价注意力机制的天花板Attention 机制有一个不可忽视的局限它的计算量随序列长度呈平方增长。如果有 N 个 tokenAttention 需要计算 N × N 个注意力分数。1000 个 token 是 100 万次计算扩展到 10000 个 token就是 1 亿次。长度增加 10 倍计算量增加 100 倍。这也是长文本处理对大模型格外昂贵的原因各种高效 Attention优化技术因此层出不穷。显存也是个现实问题10000 个 token 的 Attention 矩阵用 FP16 格式存储需要约 200MB。这还只是一层 AttentionGPT-2 有 12 层。上下文窗口的扩展不只是技术问题计算要更快显存要更大算法要更高效是个系统工程。九、把 Attention 嵌入完整的链路现在把这套机制放回完整的输入处理流程。Thank you very much第一步分词Token[Thank,you,very,much]→[10449,345,845,50257]第二步Embedding 查表 → 向量₁, 向量₂, 向量₃, 向量₄ 每个 token 获得一个768维的静态语义坐标 第三步生成 Q、K、V → 每个 Embedding 向量同时乘以 W_q、W_k、W_v →768维 →64维投影多头注意力的一个头 → 同一个向量获得三种不同的身份投影第三步续Attention 打分与加权 → 当前词的 Q 与上下文中所有词的 K 逐一做点积得注意力分数 → Softmax 把分数归一化为概率分布 → 用这个分布对所有词的 V 加权求和 → 输出融合了上下文信息的新向量 第四步继续多层处理 → 重复上述过程 N 次GPT-2 是12次 第五步输出概率 → P(much)99.2%Attention 是连接静态语义和动态理解的那座桥。没有它模型只是在查一张固定的语义地图。有了它模型才能根据每个词所处的上下文动态调整它的表达含义。十、回到那个苹果问题现在回答上篇文章末尾的问题。苹果在 Embedding 表里只有一个固定向量。但当模型处理我今天买了一个苹果这句话时“苹果的 Query 向量向买了”“一个”今天这些词的 Key 发起询问。匹配结果显示买的 Key 与苹果的 Query 匹配度最高——购买对象和消费品在语义空间里天然接近。苹果的 Value 被加权求和之后融合了购买这个语境信息。当模型处理苹果发布了新款 iPhone时情况完全不同。“苹果的 Query 向量向发布”“新款”iPhone提问发现自己在公司发布产品这个框架里。iPhone 是苹果公司的产品这是训练语料中高频出现的共现关系被编码在了 Key 匹配的分数里。同一个 Embedding 向量经过 Attention 的上下文加权输出了两种不同的语义表示。不是苹果这个 token 变了而是它周围的词帮它选择了自己的含义。十一、结语Attention 机制的核心说白了就是让每个词都能看见上下文中的所有其他词并根据相关性动态分配注意力。没有循环没有记忆只有矩阵运算和概率归一化。这个简单的机制解决了两件事上下文感知。同一个词在不同语境下可以被区别对待。苹果是水果还是公司bank是银行还是河岸——这些歧义不再无解Attention 通过上下文加权自动完成区分。全局视野。在 Transformer 出现之前RNN 处理长文本时早期信息要经过很多层传递才能影响后期输出距离远了信号就衰减。Attention 让每个词同时看见整个上下文不需要逐层传递解决了长距离依赖问题。2017 年 Google 发表了《Attention is All You Need》这篇论文标题出奇地准确——在之后的几年里Attention 重塑了整个自然语言处理领域。但 Attention 只是 Transformer 架构的一半。另一半是什么各种积木是怎么组装成完整大厦的下一篇再讲。相关文章上篇《大模型如何理解人类语言从符号到语义的飞跃》下篇《Transformer 全景积木如何搭成大厦》—— FFN、残差连接与完整的模型架构文章首发于 「小小寰宇」