带你深入了解Transformer架构
很多人都知道不少模型的底层都是使用的transformer架构实现的, 但是却不懂得transformer架构到底是什么, 那么这篇文章我就带你了解transfermer架构到底是什么, 它出现的意义是什么? 这个架构到底是如何实现的?
注: 大家要是想深入了解可以看看transfermer的论文
为什么要有Transformer ?
进入正题之前, 我们先来了解一下RNN和LSTM
RNN
RNN(循环神经网络)是一种 专门处理序列数据 的神经网络。
它的特点是:
- 一个词一个词按顺序处理
- 当前时刻会保留前面的一部分信息
缺点:
- 处理很慢,因为只能串行 文本一长,
- 前面的信息容易忘掉
LSTM
LSTM(长短期记忆网络)可以看成是 RNN 的升级版。
它在 RNN 基础上加了“门控机制”,可以控制:
- 什么信息要记住
- 什么信息要忘掉
- 什么信息要输出
缺点:
- 还是串行计算
- 长文本里超远距离的信息,还是不容易抓住
- 大规模训练不如 Transformer 高效
Transformer
Transformer 是一种 基于注意力机制(Attention) 的神经网络架构。
优点:
- 并行计算快
- 更擅长长距离依赖
- 更容易理解整句的全局关系
Transformer四个核心模块:
Embedding + 位置编码
Embedding 是什么
模型不能直接理解文字,只能处理数字。
所以第一步要把 token 变成向量。
比如一句话:
我 喜欢 苹果
先变成 token id:
[15, 208, 931]
再通过 Embedding 查表,变成向量:
15 -> [0.2, -0.1, ...]
208 -> [0.7, 0.3, ...]
931 -> [-0.5, 0.8, ...]
这些向量里会编码“词的大致语义”。
位置编码是什么
Transformer 本身不像 RNN 那样天然按顺序处理,
所以它不知道谁在前、谁在后。
这时就要加 位置编码,告诉模型:
- 第 1 个词在哪
- 第 2 个词在哪
- 第 3 个词在哪
最后输入到模型里的不是单纯词向量,而是:
词向量 + 位置向量
这个模块的作用
- 把文本变成模型能处理的数值表示
- 同时保留“词是什么”和“词在第几个位置”
注意力 + 残差连接
这一层最核心的是 Self-Attention。
注意力在做什么
每个词都会去看句子里其他词,判断:
- 谁和我最相关
- 我应该重点关注谁
比如:
我买了一部手机,因为它很好用
这里“它”会重点关注“手机”。
这就是注意力在建模词和词之间的关系。
Q、K、V 是什么
注意力内部通常会先把输入变成三组向量:
Q:我想找什么K:我能提供什么线索V:我真正携带的内容
先算“相关性分数”,再加权汇总信息。
残差连接是什么
注意力层输出后,不会直接丢掉原输入,
而是做:
x + Attention(x)
意思是:
- 保留原信息
- 再叠加新学到的信息
这个模块的作用
- 让每个词能结合全句上下文更新自己
- 用残差连接防止深层训练时信息丢失
FFN + 残差连接
FFN 是前馈神经网络(Feed Forward Network)。
FFN 在做什么
注意力层主要负责:
- 找关系
- 看上下文
但它不负责把特征进一步“加工得更深”。
这时就需要 FFN。
它会对每个位置上的向量再做一次非线性变换。
常见形式:
FFN(x) = W2 * activation(W1 * x + b1) + b2
可以理解成:
- 先升维
- 做激活
- 再降维
为什么还要残差连接
FFN 后也通常不是直接输出,而是:
x + FFN(x)
这样做和前面一样:
- 原始表示不会一下被覆盖掉
- 深层网络更稳定
这个模块的作用
- 对注意力提取到的信息做更深层的特征变换
- 提高模型表达能力
输出层
前面几层处理完后,模型得到了每个 token 的高级表示。
最后要根据任务把这些表示转成结果。
在语言模型里
如果是 GPT 这种生成任务,输出层会:
- 取最后一个 token 的隐藏表示
- 线性映射到整个词表大小
- 得到每个词的分数
logits - 再做
softmax变成概率
例如:
“今天 天气 很”
模型会预测下一个 token 可能是:
- “好” 0.62
- “热” 0.18
- “冷” 0.09
然后选一个作为输出。
Transformer推理过程:
可以,按你现在这种笔记风格,把 Transformer 推理前三步 一起整理成这样:
transformer推理过程第一步
- 原始输入文本
- 分词处理
- 得到 token 序列
- 通过词汇表映射成 token id
- 进入嵌入层
第一步在说什么?
原始输入文本
输入就是一句自然语言文本,比如一句话、一个问题或者一段上下文。
分词处理
把文本切成模型能处理的最小单位,这些单位叫 token,不一定是完整单词,也可能是字、子词、标点。
token序列
分词之后,文本就变成按顺序排列的一串 token。
词汇表映射
模型内部有一个固定词表,每个 token 都会对应一个唯一编号,也就是 token id。
嵌入层
token id 本身只是编号,没有语义,需要通过嵌入层转换成稠密向量,方便后续计算。
这一步的作用
把“人类可读的文本”变成“模型可处理的数字输入”。
transformer推理过程第二步
- 得到词嵌入向量
- 生成位置编码
- 词嵌入和位置编码相加
第二步在说什么?
词嵌入向量
每个 token 会被表示成一个向量,这个向量包含它的基本语义信息。
位置编码生成
因为 Transformer 本身没有顺序感,所以要额外加入位置信息,告诉模型每个 token 在句子里的位置。
词嵌入 + 位置编码
把“词的语义信息”和“词的位置信息”合在一起,作为后续注意力层的输入。
这一步的作用
让模型同时知道:
- 这个 token 是什么
- 这个 token 在什么位置
transformer推理过程第三步
- 输入上一层表示矩阵
- 线性变换生成
Query、Key、Value - 计算注意力得分
- 除以
\sqrt{d_k}进行缩放 - 经过
Softmax得到注意力权重 - 对
Value加权求和 - 多个头并行计算后拼接输出
Attention(Q,K,V)=softmax(QKTdk)V \text{Attention}(Q,K,V)=\text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dkQKT)V
第三步在说什么?
Q / K / V
Q:我想关注什么K:我能提供什么线索V:我真正携带的信息
注意力得分
通过 QK^T 计算当前 token 和其他 token 的相关程度,分数越高,说明越值得关注。
缩放 \sqrt{d_k}
防止数值过大,避免 Softmax 过于极端,让训练和推理更稳定。
Softmax归一化
把分数变成权重分布,表示“当前 token 应该关注每个 token 多少”。
加权求和
根据这些权重,对所有 V 做加权汇总,得到融合上下文后的新表示。
多头机制
多个 attention head 并行计算,不同头可以学习不同关系,比如局部关系、长距离依赖、语法关系、语义关系。
这一步的作用
让每个 token 不只表示自己,还能结合整句上下文,形成更丰富的语义表示。
三种对Transformer 组织方式 :
对 Transformer 这个基础结构做不同组织方式
Encoder-Only
一句话Encoder-Only 是把整段文本一次性读完,重点做语义理解。
- 代表模型:
BERT - 核心作用:理解文本
- 特点:双向注意力、无因果 Mask、能同时看前后文
- 适合任务:文本分类、情感分析、命名实体识别、句子匹配、阅读理解
Decoder-Only
一句话Decoder-Only 是根据前面已经有的内容,不断往后续写。
- 代表模型:
GPT - 核心作用:生成文本
- 特点:因果 Mask、只能看前文、一步一步预测下一个 token
- 适合任务:对话生成、续写、代码补全、长文本生成
Encoder-Decoder
一句话Encoder-Decoder 是先理解输入内容,再生成另一段目标内容。
- 代表模型:
T5、BART - 核心作用:根据输入生成输出
- 特点:Encoder 负责理解输入,Decoder 负责自回归生成输出,中间通过
Cross-Attention连接 - 适合任务:机器翻译、文本摘要、改写、问答
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)