Transformer工作原理

  • 基本概念
    • 向量:一维数组

输入

  • 输入:“我想买苹果手机”
  • 模型收到输入后,先切词(token):[ “我”, “想”, “买”, “苹果”, “手机” ]
  • 向量化 (Embedding):每个词(token)变成一个初始向量,称为 X 向量。比如“苹果”变成了 [0.1, -0.3, 0.5…],表示为 X苹果。后续计算的核心,就是迭代 X 向量。

  • 位置编码:模型同时对所有 token 进行了向量化,token 在句子中的“位置”需要在这一步完成。比如,“苹果”是第4个词。

循环 - 迭代 X 向量

  • X 向量乘以权重矩阵,拆解成 QKV 三个向量。
    • Q 向量:Query/查询,用来去问别人:“谁能帮我确定我的具体含义?”
    • K 向量:Key/键,用来告诉别人:“我包含水果和品牌的特征。”
    • V 向量:Value/值,它本身最原始的内容:“美味、昂贵”

(权重矩阵是模型经过训练后,沉淀下来的转换规则。有三种权重矩阵:生成查询的矩阵、生成键的矩阵、生成值的矩阵。)

  • QKVX 的三个“临时工作分身”,专门为了和其他词进行交流(计算注意力)而生成的。注意力计算后,生成一个新的 X 向量。

  • 多头(Multi-Head)的含义:

模型不会只生成一组 QKV ,而是会生成很多组。这就好比模型长了“多个脑袋”。

头 A 专门负责找语法关系(比如主谓宾)。

头 B 专门负责找情感关系(正向还是负向)。

头 C 专门负责找指代关系(“它”指的是谁)。

所有脑袋同时计算,最后把结果拼起来,为了让模型思考得更全面。

  • 这个过程会进行多轮(比如,GPT-3 有 96 轮)。每一轮 X 向量都在进化,包含了越来越丰富的信息。比如:

第 1 轮思考:刚才那个更新后的 X,变成了第二轮的输入 X 。此时它可能只是弄懂了“苹果”和“手机”连在一起。

第 10 轮思考:随着范围扩大,它搞懂了句子的语法结构(谁是主语,谁是宾语)。

第 50 轮思考:它开始理解更抽象的情感和意图(比如用户想花钱买昂贵的数码产品)。

最后一轮思考结束:那个历经千锤百炼的终极 X 向量出炉!这个向量已经包含了无比丰富的逻辑、语境和情感信息。

输出

  • 计算下一个 token 输出什么,模型只看上一个 token 的 X 向量。比如对于上面的例子,模型只看“手机” 这个 token。

因为“手机”的终极 X 向量,其实已经相当于“整句话的总结报告”了。

  • 计算再下一个 token 的输出。会将前次输出的 token 拼接到句子里,重头开始、重新进行思考。

    • 第一轮

    输入:[ “我”, “想”, “买”, “苹果”, “手机” ];输出:”它”

    • 第二轮

    输入:[ “我”, “想”, “买”, “苹果”, “手机” , “它”];输出:”很”

    • 第三轮

    输入:[ “我”, “想”, “买”, “苹果”, “手机” , “它”, “很”];输出:”贵”

    • 第四轮

    输入:[ “我”, “想”, “买”, “苹果”, “手机” , “它”, “很”, “贵”];输出:<EOS> (End of Sentence,句子结束符)。

  • Masked Multi-Head Attention 的含义和作用

    • 训练阶段:模型训练的语料是完整的,比如“我想买苹果手机”“它很贵”模型训练时都直接就能看到全貌。为了训练模型的推理能力,在训练阶段会“盖住”还没有生成的内容。

    ██

    它很

    它很贵

    • 推理阶段:虽然在推理阶段模型本来就看不到未生成的 token,但是需要保持与训练阶段数学运算规则的一致。

ChatGPT 架构与 Transformer 论文架构的区别

  • Transformer 论文中的架构,输入和输出是分开的。
    • 输入阶段:token 不仅可以计算与前面 token 的注意力,也可以计算与后面 token 的注意力。
    • 输出阶段:增加了 Masked 机制,token 只计算自己前面 token 的注意力。
  • ChatGPT 架构采用了统一的架构。即使在输入阶段也有 Masked 机制,token 只计算自己前面 token 的注意力。

██████

我想█████

我想买████

我想买苹███

我想买苹果██

我想买苹果手

我想买苹果手机

KV Caching 优化

  • 上面可以看到,计算 token 输出的方式非常暴力。通过 KV Caching 优化,可以节省大量计算。(空间换时间。)KV Caching 只在输出环节起作用。

  • Scaled dot-product attention 计算公式

  • [ “我”, “想”, “买”, “苹果”, “手机” ],计算过程示例

    • 第 0 步:准备工作。进入模型后,每个 token 都带有初始向量 X ,分别乘以了权重矩阵后获得 QKV

    我: Q1K1V1

    想: Q2K2V2

    买: Q3K3V3

    苹果: Q4K4V4

    手机: Q5K5V5

    • 第 1 步:处理“我”(时间点 1)由于 Mask 机制的存在,它们只能往左看!

    Q1 只能匹配到 K1

    得出权重 (Softmax):100% 的注意力只能放在自己身上。

    吸收内容 (V1新):把 100% 的 V1 拿过来。

    • 第 2 步:处理“想”(时间点 2)

    Q2 匹配到 K1K2

    得出权重 (Softmax):假设 30% 给“我”,70% 给自己。

    吸收内容 (V):把 30% 的 V1和 70% 的 V2混合在一起。

    本轮结果:此时更新后的“想”向量,不再是单纯的“思考/希望”,它变成了一个复合概念:“某人(我)产生了一个念头”。

    KV Caching 机制: K1V1使用第 1 步计算后缓存的值

    • 第 3 步:处理“买”(时间点 3)

    Q3匹配到 K1K2K3

    得出权重:假设 10%给“我”,40%给“想”,50%给自己。

    吸收内容 (V):把 10% 的 V1、40% 的 V2、50% 的 V3 混合在一起。

    本轮结果:此时的“买”向量,已经吸纳了前置语境,它的含义变成了:“一个强烈的购物意愿(我想买)”。

    KV Caching 机制: K1V1K2V2使用前 2 步计算后缓存的值

    • 第 4 步:处理“苹果”(时间点 4)—— 💡关键转折点!

    Q4匹配到 K1K2K3K4

    得出权重 (Softmax):它把大部分注意力放在了“买”和自己身上。

    吸收内容 (V):混合 V1V2V3V4

    本轮结果:在没有看到“手机”的情况下,此时更新后的“苹果”向量,处于一种“薛定谔的状态”。它代表着“某人打算购买的一个叫苹果的物品(可能是水果,也可能是设备)”。

    KV Caching 机制: K1V1K2V2K3V3使用前 3 步计算后缓存的值

    • 第 5 步:处理“手机”(时间点 5)—— 🌟终极大融合!

    Q5匹配到 K1K2K3、K4K5

    得出权重:假设 5%给[我/想],15%给[买],45%给[苹果],35%给自己。

    吸收内容 (V):按照上面的百分比,把前面所有词的 V 狠狠地“吸”到自己身上!混合成一杯极其丰富、完美的鸡尾酒。

    本轮结果:“手机”这个词的终极向量,已经变成了一个“黑洞”。它不仅包含了“手机”本身的含义,它还完美地吸收了“苹果品牌”的定语,以及“我想买”的用户意图。

    KV Caching 机制: K1V1K2V2K3V3K4V4使用前 4 步计算后缓存的值

  • 对应的运算过程如下图

Attention is All you Need 论文

https://lilianweng.github.io/posts/2018-06-24-attention/

Transformers KV Caching Explained