很多人都知道不少模型的底层都是使用的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 这种生成任务,输出层会:

  1. 取最后一个 token 的隐藏表示
  2. 线性映射到整个词表大小
  3. 得到每个词的分数 logits
  4. 再做 softmax 变成概率

例如:

“今天 天气 很”

模型会预测下一个 token 可能是:

  • “好” 0.62
  • “热” 0.18
  • “冷” 0.09

然后选一个作为输出。


Transformer推理过程:

可以,按你现在这种笔记风格,把 Transformer 推理前三步 一起整理成这样:

transformer推理过程第一步

  1. 原始输入文本
  2. 分词处理
  3. 得到 token 序列
  4. 通过词汇表映射成 token id
  5. 进入嵌入层

第一步在说什么?

原始输入文本
输入就是一句自然语言文本,比如一句话、一个问题或者一段上下文。

分词处理
把文本切成模型能处理的最小单位,这些单位叫 token,不一定是完整单词,也可能是字、子词、标点。

token序列
分词之后,文本就变成按顺序排列的一串 token。

词汇表映射
模型内部有一个固定词表,每个 token 都会对应一个唯一编号,也就是 token id

嵌入层
token id 本身只是编号,没有语义,需要通过嵌入层转换成稠密向量,方便后续计算。

这一步的作用
把“人类可读的文本”变成“模型可处理的数字输入”。


transformer推理过程第二步

  1. 得到词嵌入向量
  2. 生成位置编码
  3. 词嵌入和位置编码相加

第二步在说什么?

词嵌入向量
每个 token 会被表示成一个向量,这个向量包含它的基本语义信息。

位置编码生成
因为 Transformer 本身没有顺序感,所以要额外加入位置信息,告诉模型每个 token 在句子里的位置。

词嵌入 + 位置编码
把“词的语义信息”和“词的位置信息”合在一起,作为后续注意力层的输入。

这一步的作用
让模型同时知道:

  • 这个 token 是什么
  • 这个 token 在什么位置

transformer推理过程第三步

  1. 输入上一层表示矩阵
  2. 线性变换生成 QueryKeyValue
  3. 计算注意力得分
  4. 除以 \sqrt{d_k} 进行缩放
  5. 经过 Softmax 得到注意力权重
  6. Value 加权求和
  7. 多个头并行计算后拼接输出

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(dk QKT)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 是先理解输入内容,再生成另一段目标内容。

  • 代表模型:T5BART
  • 核心作用:根据输入生成输出
  • 特点:Encoder 负责理解输入,Decoder 负责自回归生成输出,中间通过 Cross-Attention 连接
  • 适合任务:机器翻译、文本摘要、改写、问答
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐