机器学习 - 生成式预训练模型(Generative - Pre-trained - Transformer)
Transformers 综合解析与总结
Transformers 自 2017 年由 Google 提出以来,已成为处理文本、图像、音频等多模态数据的重要架构。其基本思想是通过自注意力机制(Attention)和前馈神经网络(MLP)对输入信息进行编码,再借助解码或生成机制预测下一个 token,从而实现文本翻译、对话生成、图像生成等任务。
1. 数据预处理与 Tokenization
-
Token 切分
将输入内容(例如文本、图像、音频)切分成小片段。文本中的 token 可以是单词、子词或常见字符组合;图像和音频则切成一小块图像区域或声音片段。 -
Embedding
每个 token 被映射到一个高维向量空间(如 12288 维),以捕捉其语义信息。相似含义的 token 在向量空间中通常距离较近。比如,在词向量中可以通过简单的加减法关系找到:E(queen) ≈ E(king) + E(woman) - E(man)
在 GPT-3 中,Embedding 矩阵规模一般为
50257 x 12288,这意味着共有约 6.18 亿个参数,负责将词汇映射到语义空间。
2. 数据流动与网络结构
Transformers 内部的数据流程大致可以分为以下几个模块:
-
Embedding 层
对输入的 token 进行向量化(直接在Embedding Matrix中找词对应的embedding,这里的Embedding Matrix也是模型预训练出来的),同时还会编码位置信息,使得模型能够区分词语在序列中的顺序。 -
自注意力 Attention Block
- 通过 Query、Key、Value 三组向量,计算每个 token 与序列中其他 token 之间的相关性(通过点积衡量对齐程度)。
- 自注意力(Self-Attention)机制帮助模型捕捉长距离依赖关系,识别哪些 token 对当前 token 的含义影响最大,从而调整表示。
-
前馈层(MLP)
- 在经过 Attention 模块的信息交互后,每个 token 的向量独立进入多层感知器(前馈网络)。
- 这一步类似于每个 token 提出一系列问题,通过解答更新自己的表示。
-
层堆叠
- Attention Block 与前馈层通常交替堆叠多个层(Transformer Encoder 或 Decoder 层),进一步提炼和融合信息。
- 最终目标是使整个序列的关键信息集中表达在输出向量中。
-
Unembedding(解嵌入)
- 最后一个向量(或整个序列中的每个 token 表示)通过与 Unembedding 矩阵 相乘,得到原始 token 空间中的 logits。这一步通常是将网络内部的高维表示映射回词汇表维度。
- 注意:Unembedding 矩阵常常与 Embedding 矩阵共享参数(转置形式),而非严格意义上的“逆矩阵”。
-
Softmax 激活
- 对 logits 应用 softmax 函数,转化为每个 token 出现的概率分布,从而可以预测下一个 token。
3. GPT-3 及其参数构成
-
预设词汇表
例如,GPT-3 采用一个包含 50257 个词汇的词典。 -
参数数量
GPT-3 拥有大约 1750 亿个参数,这些参数分布在大约 28000 个矩阵中,大致分为 8 类:- Embedding
- Key
- Query
- Value
- Output(注意力输出)
- Up-projection
- Down-projection(前馈层内部分解)
- Unembedding
-
数据流动实例
在实际应用中,如 GPT-3 的运行流程通常包括:- System Prompt:设定用户与 AI 助手的互动场景。
- User Prompt:用户的输入问题。
- 结合上述提示,模型通过前向传播依次经过 Embedding、Attention、MLP 层,并在最后经过 Unembedding 得到 logits,再通过 softmax 输出下一个 token 出现的概率。
- 模型不断重复预测下一个 token,逐步生成完整的回答或文本。
4. 数学工具:点积与向量几何
- 点积
点积(内积)用于衡量两个向量之间的相似性。- 如果两个向量方向接近,点积为正值,且较大;
- 如果正交,点积接近零;
- 如果方向相反,则点积为负值。
这种几何特性使得向量表示可以捕捉词义之间的关系,并通过计算注意力权重来决定各个 token 之间的信息传递。
总结
Transformers 架构通过先将输入拆分为 token、利用 Embedding 向量表示其含义,随后在多层 Attention 和前馈网络中不断融合上下文信息,最终利用 Unembedding 和 softmax 生成下一个 token 的概率分布。这一流程不仅适用于文本生成,还能扩展到语音、图像等多种模态,为 ChatGPT 等工具提供了强大的基础架构和海量参数支持,从而实现高质量的信息预测和生成。
5. 注意力机制 - Attention Block 综合解析
Transformers 的注意力机制是整个模型的关键部分,其核心思想在于让每个 token 能够“关注”序列中其他 token 的信息,从而更好地捕捉上下文关系。下面对整个 Attention Block 的工作流程及关键组件进行详细解析。
1. 基础组件:Query、Key 和 Value
-
Embedding 到向量的映射
每个输入 token 首先通过预训练好的 embedding 矩阵映射到一个高维向量中,这个向量不仅包含了该 token 的语义信息,还编码了其位置信息。 -
Query 向量
-
计算方法:
Q = W_Q x embedding
-
说明:
我要找什么特征。通过查询矩阵 W_Q 将高维 embedding 映射到一个较小的查询空间(例如128维)。Query 向量用于表示“在当前 token 处,我想寻找什么样的信息”,例如【寻找前置形容词】的特定概念。
-
-
Key 向量
-
计算方法:
K = W_K x embedding
-
说明:
我自己有哪些特征。通过 Key 矩阵 W_K 将相同的 embedding 映射到与 Query 同维数的低维空间。Key 向量可以视为对 token 信息的“描述”,用于与 Query 进行匹配,确定哪些 token 对当前 token 的语义最有参考价值。
-
-
Value 向量
-
计算方法:
V = W_V x embedding
-
说明:
我具体携带了什么内容信息。通过值矩阵 W_V 同样映射出一个向量序列。Value 向量携带的信息是之后更新 token 表示时所需要“借用”的内容。它们最终在注意力计算中按匹配权重加权求和,形成一个新的、更富上下文信息的向量。
-
2. Attention 计算流程
(1) 计算匹配度(相似性得分)
-
点积相似度
对于每一个 token 的 Query 向量,会计算其与所有 token 的 Key 向量的点积:score(i, j) = Q_i <#> K_j
该分数衡量了 token (i) 和 token (j) 之间的相关性,点积越高表示相关性越强。
-
缩放与 Softmax
通常会对点积结果进行缩放(除以 sqrt{d_k}),其中 d_k 是 Key 向量的维度),再通过 softmax 函数归一化,得到一个概率分布:alpha[i,j] = Softmax( (Q[i] · K[j]) / sqrt(d_k) )
-
alpha[i,j]表示第 i 个 Query 与第 j 个 Key 之间的注意力权重; -
Q[i] · K[j]是第 i 个 Query 向量与第 j 个 Key 向量之间的点积; -
sqrt(d_k)是 Key 向量的维度的平方根,用于缩放; -
Softmax(...)表示对所有 j 的点积结果做 softmax 运算,输出一个归一化的概率分布。这表示每个查询 token 与所有键 token 的匹配程度。
- 掩码(Masking)
在某些任务中(例如语言模型的自回归生成),对未来(或不希望关注的位置)的 token 分数设为 -∞,使其 softmax 后为0,从而避免后词影响前词。
- 掩码(Masking)
(2) 更新向量表示
-
加权求和
将得到的注意力权重(相似性分布)用于对所有 Value 向量进行加权求和:Attention(Q, K, V)[i] = Σ (alpha[i,j] * V[j]),对所有 j 求和
这样,每个 token 的输出既保留了自身的信息,又“吸收”了上下文中相关 token 的内容,形成一个更新后的向量表示。并且将Attention(Q, K, V)[i] + 原词embedding中。
3. 多头注意力(Multi-Head Attention)
-
并行多个注意力头
为了让模型能够关注到不同的语义关系和上下文特征,Transformers 会并行使用多个注意力头。- 每个头都有独立的 W_Q、W_K 和 W_V 矩阵,负责从不同的角度对输入进行“观察”。
- 例如,GPT-3 中可能有96个并行注意力头,每个头捕捉不同的信息模式。
-
头输出的整合
各个头经过各自的注意力计算后,得到的结果会被拼接(concatenate)起来,并通过一个线性投影层整合为最终的向量。这一步实现了多角度信息的融合:
、
Output = W_O × Concat(head_1, head_2, ..., head_h)其中 W_O 是整合矩阵,而 h 则是注意力头的个数。
4. 关键点总结
-
线性映射
Query、Key 和 Value 都是通过各自的线性变换由原始 embedding 得来的,目的是将高维信息压缩到便于计算匹配度的低维空间。 -
点积与归一化
通过计算 Query 与 Key 的点积来衡量词之间的相关性,再经过 softmax 归一化,确保输出是一个有效的概率分布,指示了各 token 的影响力度。 -
加权更新
注意力机制利用计算得到的权重对 Value 向量进行加权求和,实现对原始嵌入表示的更新,增强了上下文信息的表达能力。 -
多头设计
多头注意力使得模型可以同时关注语义信息的多个方面,经过整合后,生成一个综合了全局上下文信息的更精准的表示。
6. MLP 存储(前馈网络)
输入向量 E(Embedding 向量)经过以下过程处理:
-
E -> Linear(W_up, B_up):
首先,E 乘以上投矩阵 W_up(权重矩阵)并加上偏置向量 B_up,得到中间结果 E':
E' = W_up * E + B_up -
E' -> ReLU 激活:
对 E' 进行 ReLU 非线性激活,得到:
E'' = ReLU(E')ReLU(Rectified Linear Unit)激活函数形式为:
ReLU(x) = max(0, x)
它引入非线性特征,有助于模型学习复杂的模式。 -
E'' -> Linear(W_down, B_down):
将 E'' 再次线性变换,乘以下投矩阵 W_down 并加上偏置 B_down,得到:
E''' = W_down * E'' + B_down -
残差连接(Residual Connection):
将 E''' 与原始输入向量 E2 相加(E2 通常就是原始的 E),形成最终的输出:
Output = E''' + E2这个残差连接有助于缓解深层网络中的梯度消失问题,加快训练收敛,并让网络更容易学习恒等映射。
总结:
整个 MLP 存储模块包含两个线性层(上投和下投),一个 ReLU 非线性激活层,以及一个残差连接:
E → Linear → ReLU → Linear → +E → Output

浙公网安备 33010602011771号