transformer整体流程框架

Transformer 是 2017 年 Google 团队在《Attention Is All You Need》中提出的基于自注意力机制的序列建模架构,彻底革新了自然语言处理(NLP)领域,并成为大语言模型(如 GPT、BERT)的核心基础。其设计突破了传统循环神经网络(RNN/LSTM)的序列依赖限制,通过并行计算和全局注意力机制,实现了更高效的训练和更强的长距离语义建模能力。

简单总结一下学习完transformer的流程理解:

输入➡️转为词向量➡️添加位置编码定位每个词向量➡️生成Q、K、V向量(类似于描述词向量,每个词向量都有一组Q、K、V向量)➡️多头注意力拼接向量(类似于多方面学习向量间的关系)➡️前馈网络➡️加残差和归一化使训练稳定➡️输出。

总体感觉就是所谓的编码解码利用多层网络不断学习词向量之间关系的过程,使输出效果更优。

 附原文链接:https://arxiv.org/pdf/1706.03762

一、核心痛点:为什么需要 Transformer?

传统序列模型(如 RNN、LSTM)存在两大致命缺陷:

  1. 并行性差:必须按序列顺序处理输入(如先处理第 1 个词,再处理第 2 个词),无法同时利用多核 GPU 并行计算,训练效率极低。
  2. 长距离依赖弱:随着序列长度增加,早期信息在传递中逐渐衰减(梯度消失),难以捕捉跨句子 / 段落的语义关联(如 “他说小李会来,[间隔 100 个词] 但他没来” 中 “他” 与 “小李” 的指代关系)。

Transformer 完全抛弃循环结构,仅用注意力机制解决上述问题,成为首个能同时实现 “高效并行” 和 “强长距离依赖建模” 的架构。

二、整体架构:编码器 - 解码器结构

Transformer 采用经典的 “编码器 - 解码器” 框架,适用于 “序列到序列” 任务(如翻译、文本摘要)。

1. 编码器(Encoder):将输入序列转换为上下文向量

编码器的核心功能是:将输入序列(如 “我爱自然语言处理”)转换为包含全局上下文信息的向量表示(每个词的向量都融合了其他所有词的信息)。

  • 结构:由 N 个完全相同的 “编码器层” 堆叠而成(论文中 N=6),每个编码器层包含两个子层:
    • 子层 1:多头自注意力(Multi-Head Self-Attention)
    • 子层 2:前馈神经网络(Feed Forward Network, FFN)
    • 每个子层后均有残差连接LayerNorm(x + Sublayer(x))),用于缓解深层网络的梯度消失问题。
(1)多头自注意力:序列内的 “全局关联” 建模

自注意力机制的本质是:让序列中每个位置 “关注” 其他所有位置,并根据关联强度加权融合信息

  • 单头注意力(Scaled Dot-Product Attention): 输入为三个矩阵(维度均为 [seq_len, d_k]):

    • Q(Query,查询):当前位置 “想找什么”(如 “爱” 这个词想找它的宾语);
    • K(Key,键):其他位置 “提供什么信息”(如 “自然语言处理” 作为候选宾语的特征);
    • V(Value,值):其他位置的 “具体信息内容”(如 “自然语言处理” 的语义向量)。

    计算步骤(公式 1-4):

    1. 计算原始注意力分数(Q 与 K 的相似度)
    2. 缩放(避免维度 d_k 过大导致分数爆炸,softmax 后梯度消失)
    3. 掩码(可选,编码器中无需掩码,解码器中用于屏蔽未来信息);
    4. 归一化并加权融合 V
  • 多头注意力(Multi-Head Attention): 为了捕捉多维度的关联(如语义、语法、位置等),将 Q、K、V 通过线性层映射为 h 组(论文中 h=8),每组独立计算注意力后拼接,再通过线性层输出。

    优势:不同 “头” 可关注不同类型的依赖(如一个头关注主谓关系,一个头关注修饰关系),提升模型表达能力。

(2)前馈神经网络:位置独立的非线性变换

自注意力输出的向量需经过 “逐位置” 的非线性变换,强化特征表达

  • 结构:两层线性层 + ReLU 激活,输入输出维度均为 d_model=512,中间层维度为 2048
  • 特点:对每个位置独立处理(无序列依赖),可完全并行计算。
2. 解码器(Decoder):基于上下文生成输出序列

解码器的核心功能是:根据编码器输出的全局上下文向量,以及 “已生成的部分输出序列”,自回归生成下一个元素(如翻译任务中,根据 “我爱” 和编码器的中文上下文,生成 “ I love ”)。

  • 结构:由 N 个完全相同的 “解码器层” 堆叠而成(论文中 N=6),每个解码器层包含三个子层:
    • 子层 1:带掩码的多头自注意力:防止 “偷看” 未来信息(如生成第 t 个词时,仅允许关注前 t-1 个词);
    • 子层 2:编码器 - 解码器注意力:关注编码器输出中与当前生成相关的位置(如翻译 “自然语言处理” 时,关注中文原文中对应的词);
    • 子层 3:前馈神经网络:与编码器的 FFN 结构相同;
    • 每个子层后同样有残差连接和层归一化。

三、输入处理:词嵌入 + 位置编码

Transformer 无循环结构,无法天然感知序列顺序,因此输入需包含两部分信息:

1. 词嵌入(Token Embedding)

将离散的词(如 “自然语言”)通过可学习的嵌入矩阵转换为连续向量:

  • 输入:词的索引(如 “我”→ 123);
  • 输出:d_model=512 维的向量,捕捉词的语义信息;
  • 特点:嵌入矩阵在训练中学习,与输出层的线性矩阵共享权重(提升参数效率)。
2. 位置编码(Positional Encoding)

为每个位置生成固定编码,注入顺序信息。论文采用正弦余弦函数(非可学习)

  • 优势:

    • 对任意位置 pos + kPE(pos + k) 可表示为 PE(pos) 的线性变换,便于模型学习相对位置关系;
    • 支持长序列扩展(训练时未见过的长序列也能生成合理编码)。
  • 最终输入:词嵌入与位置编码相加(Embedding + PE),维度仍为 d_model=512

四、输出处理:线性层 + Softmax

解码器输出的向量([seq_len, d_model])需转换为词表概率分布:

  1. 经线性层映射到词表维度(如词表大小为 30000,则输出 [seq_len, 30000]);
  2. 经 Softmax 归一化,得到每个词的生成概率;
  3. 实际训练中常用 “教师强制(Teacher Forcing)”:用真实序列而非生成序列作为解码器输入,加速收敛。

五、关键优势与革新

  1. 并行计算能力: 自注意力和 FFN 均无序列依赖,所有位置可同时处理。在 8 个 P100 GPU 上训练 12 小时即可达到 SOTA 性能,效率远超 RNN(需数天训练)。

  2. 长距离依赖建模: 注意力机制直接计算任意两个位置的关联,时间复杂度为 O(n^2)(n 为序列长度),远优于 RNN 的 O(n)(需逐步传递),能轻松捕捉跨段落的语义关系。

  3. 结构灵活性: 编码器可单独用于 “理解任务”(如分类、问答),解码器可单独用于 “生成任务”(如写作、翻译),为后续模型(BERT、GPT)提供了模块化基础。

六、衍生与影响

Transformer 已成为深度学习的 “基础设施”,衍生出众多里程碑模型:

  • 编码器应用:BERT(双向编码,用于文本分类、命名实体识别)、RoBERTa;
  • 解码器应用:GPT(自回归生成,用于文本创作、对话)、LLaMA;
  • 跨模态扩展:ViT(将图像切分为 “patch” 序列,用 Transformer 做分类)、CLIP(跨文本 - 图像的注意力建模)。

### Transformer模型的整体框架结构 Transformer模型是一种基于“编码器-解码器”架构的深度学习模型,主要用于处理序列到序列的任务,例如机器翻译。该模型由两部分组成:编码器(Encoder)和解码器(Decoder)。编码器负责接收输入序列并将其转化为隐藏表示,而解码器则利用这些隐藏表示生成目标序列。 #### 编码器部分 编码器由多个相同的层堆叠而成,每一层主要包含两个子层: 1. **多头自注意力机制(Multi-head Self-Attention Mechanism)**: 这一部分允许模型关注输入序列中的不同位置,从而捕获全局依赖关系[^1]。 2. **前馈神经网络(Feed Forward Neural Network)**: 每个位置独立通过一个全连接的前馈网络进行计算[^3]。 为了稳定训练过程,在每个子层之后都加入了残差连接(Residual Connection),并且进行了归一化操作(Layer Normalization)[^1]。 #### 解码器部分 类似于编码器,解码器也由多个相同层构成,不过每层包含了三个子层: 1. **掩蔽多头自注意力机制(Masked Multi-head Self-Attention Mechanism)**: 此处引入了掩蔽技术来防止当前位置看到后续的位置信息,确保预测时不会泄露未来的信息[^3]。 2. **多头注意力机制(Multi-head Attention Mechanism)**: 将编码器输出作为键(Key)和值(Value),当前解码器状态作为查询(Query),用于捕捉输入与输出之间的交互关系[^1]。 3. **前馈神经网络(Feed Forward Neural Network)**: 同样采用全连接的前馈网络对各个位置的数据单独处理。 同样地,在每一个子层后面也有残差连接以及归一化步骤[^1]。 以下是简化版的Python伪代码展示如何构建基础组件: ```python import torch.nn as nn class EncoderLayer(nn.Module): def __init__(self, d_model, num_heads, ff_dim, dropout=0.1): super().__init__() self.self_attn = MultiHeadSelfAttention(d_model, num_heads) self.ffn = FeedForwardNetwork(ff_dim, d_model) self.layernorm1 = nn.LayerNorm(normalized_shape=d_model) self.layernorm2 = nn.LayerNorm(normalized_shape=d_model) self.dropout1 = nn.Dropout(dropout) self.dropout2 = nn.Dropout(dropout) def forward(self, inputs): attn_output = self.self_attn(inputs) out1 = self.layernorm1(inputs + self.dropout1(attn_output)) ffn_output = self.ffn(out1) output = self.layernorm2(out1 + self.dropout2(ffn_output)) return output class DecoderLayer(nn.Module): def __init__(self, d_model, num_heads, ff_dim, dropout=0.1): super().__init__() self.masked_self_attn = MaskedMultiHeadSelfAttention(d_model, num_heads) self.multi_head_attn = MultiHeadAttention(d_model, num_heads) self.ffn = FeedForwardNetwork(ff_dim, d_model) self.layernorm1 = nn.LayerNorm(normalized_shape=d_model) self.layernorm2 = nn.LayerNorm(normalized_shape=d_model) self.layernorm3 = nn.LayerNorm(normalized_shape=d_model) self.dropout1 = nn.Dropout(dropout) self.dropout2 = nn.Dropout(dropout) self.dropout3 = nn.Dropout(dropout) def forward(self, targets, enc_outputs): masked_attn_output = self.masked_self_attn(targets) out1 = self.layernorm1(targets + self.dropout1(masked_attn_output)) multihead_attn_output = self.multi_head_attn(enc_outputs, out1) out2 = self.layernorm2(out1 + self.dropout2(multihead_attn_output)) ffn_output = self.ffn(out2) output = self.layernorm3(out2 + self.dropout3(ffn_output)) return output ``` 以上展示了单个编码器层和解码器层的核心组成部分及其工作流程。完整的Transformer模型还需要嵌入层、位置编码以及其他细节设计才能运行正常[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值