小白也能看懂的Transformer架构:从注意力机制到GPT的基石
系列文章:AI大模型知识体系 | 第一篇
一、为什么现在搞AI必须了解Transformer?
如果你最近在关注AI,那你一定听过ChatGPT、文心一言、通义千问这些大模型的名字。它们能写代码、能聊天、能帮你总结文档,几乎无所不能。但你可能不知道的是,这些看起来"智能"得不得了的模型,底层都建立在同一个架构之上——Transformer。
Transformer诞生于2017年,Google的一篇论文《Attention Is All You Need》横空出世,标题就非常霸气:你只需要注意力。在那之前,处理文本序列主要靠RNN和LSTM,它们像一个一个字地读书,速度慢不说,读到后面还会忘了前面讲了什么。Transformer的出现彻底改变了这一切:它可以同时看到一整句话的所有词,而且能判断哪些词之间关系更密切。
今天这篇文章,我们就用最通俗的方式,带你从零理解Transformer的核心思想。不需要你有多深厚的数学功底,只要会写代码、有基本的编程思维,就能看懂。
二、注意力机制:像你在图书馆查资料
在讲Transformer之前,我们先来理解一个核心概念——注意力机制(Attention)。
想象你在图书馆写一篇关于"如何养护多肉植物"的报告。你面前摆了一大桌子书,有《植物学概论》《多肉养护指南》《汽车修理手册》《Python编程入门》《花卉图鉴》等等。
你会怎么做?你肯定不会每本书都从头到尾读一遍,而是:
-
先明确你报告的主题是什么("多肉植物养护")
-
然后快速扫一眼每本书的标题和目录
-
判断哪些书跟你的主题相关度高
-
把注意力重点放在相关的书上,比如《多肉养护指南》你会仔细看,《汽车修理手册》你基本不看
这个过程,就是注意力机制的核心思想:根据当前需求,对不同信息源分配不同的关注度。相关的信息多关注,不相关的少关注甚至忽略。
三、Self-Attention:一句话里的词是怎么互相理解的?
Self-Attention,翻译过来叫自注意力,是Transformer最核心的组件。
我们来看一个例子。假设有一句话:
"我喜欢吃苹果"
当模型处理到"苹果"这个词时,它需要理解这个"苹果"到底是什么意思——是水果的苹果,还是苹果公司的苹果?这时候,Self-Attention就派上用场了:它会让句子里的每个词都去"看"其他所有词,然后决定应该重点关注谁。
具体来说,"苹果"会跟句子里的每个词计算一个相关性分数:
-
"苹果"和"吃"的关系分数 → 很高(因为"吃苹果"是常见搭配)
-
"苹果"和"我"的关系分数 → 一般
-
"苹果"和"喜欢"的关系分数 → 较低
这样模型就知道,"苹果"在这里大概率是被"吃"的对象,所以它应该被理解为一种水果。
再比如"我喜欢苹果的手机"这句话,"苹果"和"手机"的关系分数就会很高,模型就知道这里指的是苹果公司。
这就是Self-Attention的威力:它让每个词都能根据上下文动态调整自己的含义。
四、Q、K、V到底是什么?用搜索引擎来理解
Self-Attention的实现依赖于三个概念:Query(查询)、Key(键)、Value(值),简称Q、K、V。这三个词听起来很抽象,但如果你用过搜索引擎,就一定能秒懂。
把Self-Attention想象成一次搜索引擎查询:
|
概念 |
搜索引擎类比 |
在句子中的作用 |
|---|---|---|
|
Query(Q) |
你在搜索框里输入的搜索词 |
当前词想要查找什么信息 |
|
Key(K) |
每个网页的标题 |
每个词的"标签",用来跟Query匹配 |
|
Value(V) |
每个网页的具体内容 |
每个词实际携带的信息 |
过程是这样的:假设当前词是"苹果",它的Query就是"我想了解跟我相关的上下文"。然后它拿自己的Q去跟句子里每个词的K做匹配(就像搜索词跟网页标题做匹配),得到一组相关性分数。最后,根据这些分数,对各词的V进行加权求和——分数高的词,贡献的信息就多。
用公式表达就是:
$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V$$
别被这个公式吓到!翻译成白话就四步:
-
Q乘以K的转置:计算Query和每个Key的相似度(搜索词和标题的匹配度)
-
除以根号d_k:做一个缩放,防止数值太大导致结果不稳定(就像把分数归一化到合理范围)
-
softmax:把分数转换成百分比,让所有分数加起来等于1(高的更高,低的更低,拉开差距)
-
乘以V:按照百分比来提取各词的信息(关注度高的词,信息提取得多)
来看一段简单的PyTorch代码,直观感受一下:
import torch
import torch.nn.functional as F
# 假设句子有5个词,每个词用64维向量表示
seq_len = 5
d_k = 64
# 随机生成Q、K、V(实际中是通过线性变换得到的)
Q = torch.randn(seq_len, d_k)
K = torch.randn(seq_len, d_k)
V = torch.randn(seq_len, d_k)
# 第一步:计算注意力分数
scores = torch.matmul(Q, K.transpose(-2, -1)) / (d_k ** 0.5)
# 第二步:softmax归一化,得到注意力权重
attention_weights = F.softmax(scores, dim=-1)
# 第三步:用权重对V加权求和,得到输出
output = torch.matmul(attention_weights, V)
print("注意力权重矩阵(每行代表一个词对其他词的关注度):")
print(attention_weights)
这段代码就是Self-Attention的全部计算过程,总共就三步,核心只有三行代码。每个词通过Q、K、V的交互,就能"看到"句子里的所有其他词,并判断该关注谁。
五、Multi-Head Attention:多个角度看同一句话
上面讲的是一次Self-Attention,你可以理解为从一个角度理解句子。但Transformer用的是Multi-Head Attention(多头注意力),也就是同时从多个角度看同一句话。
打个比方:你作为一个面试官在评估一个候选人——
-
第1个角度:关注候选人的技术能力
-
第2个角度:关注候选人的沟通表达
-
第3个角度:关注候选人的项目经验
每个角度会注意到不同的信息,最后把所有角度的结论综合起来,就能得到一个更全面的理解。
在Transformer中,每个"头"就是一组独立的Q、K、V,它们各自学习关注句子中不同类型的关系。比如一个头可能学会了关注语法结构,另一个头学会了关注语义关联,还有的头可能学会了关注位置关系。最终把这些头的结果拼接起来,模型对句子的理解就丰富多了。
用代码来看就是这么个结构:
# Multi-Head Attention 的简化思路
num_heads = 8 # 8个"面试官"同时打分
d_model = 512 # 每个词的总维度
d_k = d_model // num_heads # 每个面试官负责 64 维
# 每个头独立计算Attention,最后拼接
# head_1: 可能关注语法关系
# head_2: 可能关注语义关系
# head_3: 可能关注指代关系
# ...
# 最终 output = concat(head_1, head_2, ..., head_8) * W_o
8个头各管一摊,最后汇总,这就是"多头"的全部秘密。
六、Feed-Forward和残差连接:锦上添花的两道工序
Transformer的每一层除了Multi-Head Attention,还有两个重要组件:
1. Feed-Forward Network(前馈神经网络)
Attention机制负责的是"词与词之间的关系",而Feed-Forward网络负责的是"对每个词自身的信息做进一步加工"。你可以把它想象成:Attention是开会讨论,Feed-Forward是每个人回去各自消化整理。
2. 残差连接(Residual Connection)
简单来说就是抄近道。每一层的输入会直接加到输出上,公式就是:
$$\text{output} = x + \text{SubLayer}(x)$$
为什么要这么做?因为如果网络太深,信息在层层传递中容易丢失(专业说法叫"梯度消失")。残差连接就像修了一条直通的快速路,保证原始信息不会丢。
这两个组件虽然简单,但对于模型的训练稳定性至关重要。没有它们,Transformer根本训不出来。再加上一个Layer Normalization(层归一化),一个完整的Transformer层就齐了。
七、从Transformer到GPT和BERT
原始的Transformer同时包含**编码器(Encoder)和解码器(Decoder)**两部分。但在后续的发展中,研究者们发现:
-
只用Encoder → 适合理解类任务(分类、提取),代表模型:BERT
-
只用Decoder → 适合生成类任务(写文章、对话),代表模型:GPT系列
简单理解:
|
架构 |
代表模型 |
擅长什么 |
类比 |
|---|---|---|---|
|
Encoder-only |
BERT |
理解、分类、提取 |
像一个阅读理解高手 |
|
Decoder-only |
GPT |
生成、对话、创作 |
像一个写作高手 |
|
Encoder-Decoder |
原始Transformer |
翻译等序列到序列任务 |
像一个翻译官 |
GPT之所以火遍全球,就是因为它采用了Decoder-only架构,通过大规模预训练,让模型在"根据前文预测下一个词"这件事上做到了极致。你输入一段话,它就能一个字一个字地"猜"出后面最可能是什么,猜得又快又准,看起来就像真的在跟你对话一样。
而现在几乎所有的大语言模型(LLM),包括ChatGPT、LLaMA、通义千问等,都是基于Decoder-only的Transformer架构。所以理解了Transformer,你就拿到了理解整个大模型世界的钥匙。
八、总结:一张图看懂Transformer
我们来回顾一下Transformer的整体结构,从底向上看:
输入文本
│
▼
[词嵌入 + 位置编码] ← 把文字变成向量,并告诉模型词的顺序
│
▼
┌──────────────────────┐
│ Transformer Block │ ← 这个方块重复N次(比如GPT-3重复了96次)
│ ┌────────────────┐ │
│ │ Multi-Head │ │ ← 从多个角度理解词与词的关系
│ │ Self-Attention │ │
│ └───────┬────────┘ │
│ + 残差连接 │ ← 抄近道,防止信息丢失
│ ┌───────▼────────┐ │
│ │ Feed-Forward │ │ ← 对每个词做进一步加工
│ └───────┬────────┘ │
│ + 残差连接 │
└──────────────────────┘
│
▼
输出(下一个词的概率分布)
核心要点回顾:
-
注意力机制让模型在处理每个词时,能看到整个句子的上下文
-
Q、K、V是实现注意力的手段——像搜索引擎一样匹配和提取信息
-
Multi-Head让模型从多个维度理解文本
-
残差连接保证深层网络也能稳定训练
-
Decoder-only架构成就了GPT系列,也成就了今天的大模型时代
作为AI大模型系列的第一篇,这篇文章帮你建立了对Transformer的直觉理解。下一篇我们将深入探讨大模型的预训练和微调策略,敬请期待!
如果这篇文章对你有帮助,欢迎点赞、收藏、关注三连!你的支持是我持续创作的最大动力。有任何问题欢迎评论区交流~
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)