首页 › 深度学习 › 八大神经网络 › 变换器(Transformer)

变换器(Transformer)

Transformer 架构是一种基于自注意力机制(Self-Attention)的深度学习模型,由 Google 团队在 2017 年的论文《Attention Is All You Need》中首次提出。​

Transformer 彻底改变了自然语言处理(NLP)领域,并成为现代大语言模型(如GPT、BERT等)的核心基础。​

本章节将带你深入了解Transformer的核心思想、架构组成和工作原理,帮助你掌握这一革命性技术的基础知识。​

​

​

Transformer 架构图​

左边为编码器,右边为解码器。​

​

飞书文档 - 图片

​

输入处理(底部)​

•

Embeddings/Projections(嵌入/投影层)​

◦

作用:将输入的单词(或 token)转换成数字向量(比如 "猫" → [0.2, -0.5, 0.7…])。​

◦

类比:就像给每个单词分配一个独特的"身份证号码",但更智能(包含语义信息)。​

编码器(左侧)​

•

Multi-Headed Self-Attention(多头自注意力)​

◦

作用:让模型同时关注输入中的所有单词,并计算它们之间的关系。​

◦

举例:在句子"猫追老鼠"中,模型会学习"猫"和"老鼠"的关联比"猫"和"追"更强。​

◦

关键:并行处理所有单词,不像RNN需要逐个计算。​

•

Norm(层归一化)​

◦

作用:稳定训练过程,防止数值过大或过小(类似"调音量"到合适范围)。​

•

Feed-Forward Network(前馈神经网络)​

◦

作用:对每个单词的表示进行进一步加工(比如提取更复杂的特征)。​

◦

类比:像对"猫"的向量做一次深度解读,补充细节(比如"猫是哺乳动物")。​

解码器(右侧)​

•

Masked Multi-Headed Self-Attention(掩码多头自注意力)​

◦

作用:训练时防止模型"作弊"(只能看到当前和之前的单词,不能看未来的)。​

◦

举例:生成"我爱__"时,模型只能基于"我""爱"预测下一个词,不能提前知道答案是"你"。​

•

Multi-Headed Cross-Attention(多头交叉注意力)​

◦

作用:让解码器询问编码器:"关于输入,我应该重点关注什么?"​

◦

场景:翻译任务中,解码器生成英文时,会参考编码器处理的中文输入。​

•

Norm 和 Feed-Forward Network​

◦

与编码器类似,对解码器的表示进行归一化和深度处理。​

输出(顶部)​

•

Linear(线性层)​

◦

作用:将解码器的输出映射到词表(比如预测下一个词是"你"的概率最高)。​

◦

举例:输入"我爱",模型输出"你"的概率可能是80%,"吃饭"的概率是10%…​

​

​

Transformer 的核心思想​

自注意力机制(Self-Attention)​

Transformer 的核心思想是完全依赖注意力机制(无需循环或卷积结构)来捕捉输入序列中的全局依赖关系,从而实现高效的并行计算和更强的长距离依赖建模。​

实例​

​

代码块​

Python

# 简化的自注意力计算示例​

def self_attention(query, key, value):​

scores = torch.matmul(query, key.transpose(-2, -1)) # 计算相似度​

weights = torch.softmax(scores, dim=-1) # 转换为概率分布​

output = torch.matmul(weights, value) # 加权求和​

return output​

​

公式:​

​

​

•

QQ(Query)、KK(Key)、VV(Value)是通过输入线性变换得到的矩阵。​

•

√dk是缩放因子,防止点积过大导致梯度消失。​

多头注意力(Multi-Head Attention)​

•

将自注意力机制并行执行多次(多个"头"),每个头学习不同的注意力模式,最后拼接结果。​

•

优势:捕捉更丰富的上下文信息(如局部/全局依赖、语法/语义特征)。​

位置编码(Positional Encoding)​

•

Transformer 本身没有循环或卷积结构,无法直接感知序列顺序,因此需要显式地注入位置信息。​

•

使用正弦/余弦函数或可学习的位置编码:​

​

​

前馈神经网络(Feed-Forward Network, FFN)​

•

每个位置的表示会通过一个两层全连接网络(含非线性激活,如ReLU)进行进一步变换。​

​

​

残差连接与层归一化(Residual Connection & Layer Norm)​

•

残差连接:将输入直接加到输出上(如 x+Sublayer(x)x+Sublayer(x)),缓解梯度消失。​

•

层归一化:对每一层的输出进行归一化,加速训练。​

并行处理能力​

与传统RNN/LSTM不同,Transformer可以并行处理整个序列,极大提高了训练效率。​

全局依赖建模​

无论词与词之间的距离有多远,Transformer都能直接建立依赖关系,解决了长距离依赖问题。​

​

​

编码器-解码器结构​

Transformer采用经典的编码器-解码器架构,但每个部分都由多层相同的模块堆叠而成。​

编码器(Encoder)​

​

​

​

飞书文档 - 图片

​

解码器(Decoder)​

解码器在编码器基础上增加了:​

掩码多头注意力:防止当前位置关注未来信息​

编码器-解码器注意力:融合源语言信息​

​

​

位置编码(Positional Encoding)​

由于Transformer没有循环结构,需要显式地注入位置信息。​

正弦位置编码公式​

公式分为两部分,分别对应位置编码向量的偶数维和奇数维:偶数维(2i),奇数维(2i+1)。​

​

​

参数说明:​

•

pos:词在序列中的位置(如第 1 个词、第 2 个词等)。​

•

i:位置编码向量的维度索引(0 ≤ i < d_model/2)。​

•

d_model:位置编码的维度(通常与词向量的维度相同,如 512、768 等)。​

位置编码的特点​

相对位置敏感:可以学习到相对位置关系​

长度可扩展:可以处理比训练时更长的序列​

确定性:不需要学习,直接计算得到​

实例​

​

代码块​

C++

​

​

​

Transformer 的优势​

与传统架构的对比​

​

表格加载中...

​

实际应用优势​

卓越的性能:在大多数NLP任务上达到state-of-the-art​

可扩展性:模型规模可以轻松扩大(如GPT-3)​

多模态适应:可应用于文本、图像、语音等多种数据​

迁移学习友好:预训练+微调范式效果显著​

​

​

实践练习​

练习1:实现基础的自注意力​

实例​

​

代码块​

Plain Text

​

练习2:理解位置编码​

可视化不同位置的位置编码向量​

计算位置编码之间的相似度,观察位置关系​

​

​

常见问题解答​

Q: Transformer为什么比RNN更适合长文本? A: RNN需要逐步传递信息,长距离依赖容易丢失;而Transformer可以直接建立任意两个词之间的关系。​

Q: 位置编码为什么选择正弦函数? A: 正弦函数具有周期性且可以表示相对位置关系,同时可以扩展到训练时未见过的序列长度。​

Q: Transformer的主要计算瓶颈在哪里? A: 自注意力机制的空间复杂度是O(n²),处理长序列时会消耗大量内存。​

​

​

总结​

Transformer架构通过自注意力机制彻底改变了序列建模的方式,其核心优势在于:​

强大的并行计算能力​

高效的长期依赖建模​

灵活的可扩展性​

优异的性能表现​

掌握Transformer的基本原理是学习现代NLP技术的重要基础,也是理解BERT、GPT等前沿模型的关键。​

子栏目 / 页面