神经网络与深度学习笔记
神经网络与深度学习笔记③|Transformer模型
引言
2017年,Google团队发表《Attention Is All You Need》一文,彻底抛弃RNN/LSTM/CNN结构,仅基于注意力机制提出Transformer模型,成为NLP领域里程碑式成果。如今Transformer不仅主导翻译、文本生成等NLP任务,更延伸至CV、语音、多模态大模型等领域,是深度学习的核心模型。
一、Transformer概述
1.1 Transformer的诞生
- 发表时间:2017年
- 核心论文:《Attention Is All You Need》
- 核心团队:Google Brain & Google Research
- 核心突破:完全摒弃循环结构(RNN/LSTM)和卷积结构(CNN),仅通过自注意力机制实现序列建模,解决传统序列模型的痛点。
1.2 Transformer的核心优势
对比LSTM/GRU,Transformer两大核心优势:
- 超强并行计算能力:RNN需逐时间步串行计算,无法并行;Transformer通过矩阵运算,可对整个序列并行处理,大幅提升GPU利用率,训练速度显著加快。
- 长距离依赖建模能力:RNN长序列中易梯度消失,难以捕捉长距离语义关联;自注意力直接计算序列任意两个token的关联,无距离限制,长文本建模效果更优。
1.3 Transformer整体架构
Transformer为编码器-解码器(Encoder-Decoder)架构,整体分为6大核心部分:
- 输入部分:词嵌入 + 位置编码
- 编码器(Encoder):N层堆叠,每层含多头自注意力、前馈网络、残差连接+层归一化
- 解码器(Decoder):N层堆叠,每层含掩码多头自注意力、交叉注意力、前馈网络、残差连接+层归一化
- 输出部分:线性层 + Softmax层
- 核心机制:自注意力、多头注意力、残差连接、层归一化、掩码机制、交叉注意力
二、Transformer输入部分
Transformer无循环结构,无法天然感知token顺序,输入需通过「词嵌入」编码语义、「位置编码」编码顺序,最终两者相加得到输入向量。
2.1 词嵌入(Word Embedding)
核心作用:将离散的文本token映射为低维稠密向量,编码单词语义信息。
(1)文本预处理
- 分词:将句子切分为单词/子词token(如中文分词、英文按空格切分)
- 序列对齐:不同长度句子通过填充(补null)或剪切统一长度,满足批量训练需求
- 独热编码:将token映射为高维稀疏独热向量(维度=词汇表大小)
(2)低维映射
通过可训练的嵌入矩阵,将高维独热向量映射为低维稠密向量(d维,d<<词汇表维度):
Xemb=Xone−hot⋅WembX_{emb} = X_{one-hot} \cdot W_{emb}Xemb=Xone−hot⋅Wemb
- WembW_{emb}Wemb:d×V维嵌入矩阵(V=词汇表大小),训练中自动学习
- 常用工具:Word2Vec(CBOW/Skip-gram)、GloVe,或模型端到端训练学习
(3)代码示例(PyTorch)
import torch
import torch.nn as nn
# 词汇表大小=5,嵌入维度=24
emb = nn.Embedding(num_embeddings=5, embedding_dim=24)
# 输入token序列:[1,2,3,4]
token_ids = torch.LongTensor([1,2,3,4])
# 输出:4个token,每个对应24维向量
emb_vec = emb(token_ids)
print(emb_vec.shape) # torch.Size([4, 24])
2.2 位置编码(Positional Encoding)
核心作用:为token注入位置信息,解决Transformer无循环、无法感知顺序的问题。
(1)无效编码方式
- 整数编码:直接用0/1/2…表示位置,数值过大,信噪比低,难以区分语义和位置
- 二进制编码:位置向量不连续,语义跳跃,不符合语言逻辑
(2)最终方案:正弦位置编码
Transformer采用正弦/余弦函数生成位置向量,与词嵌入维度相同,公式如下:
{PE(pos,2i)=sin(pos100002i/d)PE(pos,2i+1)=cos(pos100002i/d)
\begin{cases}
PE(pos, 2i) = \sin\left(\frac{pos}{10000^{2i/d}}\right) \\
PE(pos, 2i+1) = \cos\left(\frac{pos}{10000^{2i/d}}\right)
\end{cases}
{PE(pos,2i)=sin(100002i/dpos)PE(pos,2i+1)=cos(100002i/dpos)
- pospospos:token在序列中的位置(0,1,2…)
- iii:向量维度索引(0,1,2…d/2-1)
- ddd:模型维度(词嵌入维度)
- 特点:可学习、无参数、能建模相对位置,位置相近的token,位置向量相似度高。
2.3 最终输入向量
词嵌入编码语义,位置编码编码顺序,两者直接相加得到Transformer输入向量:
X=Xemb+PEX = X_{emb} + PEX=Xemb+PE
2.4 输出嵌入
解码器输入为目标文本(右移一位),嵌入方式与输入一致:
- 同样采用词嵌入+位置编码
- 区别:使用目标语言词汇表,而非源语言
三、Transformer编码器详解
编码器负责对源文本进行语义编码,提取全局语义特征,共N层堆叠,每层结构完全相同,含2个子层:多头自注意力子层、前馈全连接子层,均搭配残差连接+层归一化(Add&Norm)。
3.1 自注意力机制(Self-Attention)
(1)核心作用
解决一词多义问题,让每个token关注序列中所有相关token,融合全局上下文语义。
例:「mole」在不同语境中含义不同(鼹鼠/摩尔/痣),自注意力通过上下文区分语义。
(2)核心要素:Q、K、V
每个输入token通过3个可训练权重矩阵,生成3个向量:
- 查询向量Q(Query):当前token的特征,用于「查询」相关token
- 键向量K(Key):所有token的特征,用于「被查询」
- 值向量V(Value):所有token的语义特征,用于「输出结果」
矩阵形式:
Q=X⋅WQ,K=X⋅WK,V=X⋅WVQ = X \cdot W_Q, \quad K = X \cdot W_K, \quad V = X \cdot W_VQ=X⋅WQ,K=X⋅WK,V=X⋅WV
- WQ、WK、WVW_Q、W_K、W_VWQ、WK、WV:d×d维可训练矩阵
(3)自注意力计算公式
Attention(Q,K,V)=softmax(QKTdk)VAttention(Q,K,V) = softmax\left(\frac{QK^T}{\sqrt{d_k}}\right)VAttention(Q,K,V)=softmax(dkQKT)V
计算步骤拆解:
- 计算注意力分数:Q与K转置相乘,得到n×n分数矩阵(n=序列长度),表示token间关联度
- 缩放:除以dk\sqrt{d_k}dk(dkd_kdk=Q/K维度),避免维度高时分数过大、Softmax后梯度消失
- Softmax归一化:分数映射为0-1概率,每行和为1,概率越高表示关联越强
- 加权求和:概率矩阵与V相乘,得到融合全局信息的输出向量
3.2 多头自注意力(Multi-Head Attention)
(1)核心作用
并行捕捉不同类型的语义关联(如语法、语义、指代),提升模型表达能力。
- 单头注意力:仅能捕捉一种关联
- 多头注意力:并行h个注意力头(论文h=8),每个头独立计算自注意力,捕捉不同维度关联
(2)计算流程
- 分头:将Q、K、V按维度拆分为h个头
- 单头注意力:每个头独立计算自注意力,得到h个输出
- 拼接:将h个输出向量拼接,恢复原维度
- 输出投影:通过权重矩阵WOW_OWO线性变换,得到最终多头注意力输出
公式:
headi=Attention(QWQi,KWKi,VWVi)MultiHead(Q,K,V)=Concat(head1,...,headh)⋅WO
\begin{align*}
head_i &= Attention(QW_{Q_i}, KW_{K_i}, VW_{V_i}) \\
MultiHead(Q,K,V) &= Concat(head_1,...,head_h) \cdot W_O
\end{align*}
headiMultiHead(Q,K,V)=Attention(QWQi,KWKi,VWVi)=Concat(head1,...,headh)⋅WO
3.3 Add&Norm(残差连接+层归一化)
(1)残差连接(Add)
解决深层网络梯度消失问题,公式:
Xout=Xin+F(Xin)X_{out} = X_{in} + F(X_{in})Xout=Xin+F(Xin)
- XinX_{in}Xin:子层输入
- F(Xin)F(X_{in})F(Xin):子层输出(注意力/前馈网络)
- 核心:原始输入直接跨层传递,梯度可直接回传,避免深层梯度消失
(2)层归一化(Norm)
加速模型收敛、提升稳定性,公式:
LayerNorm(X)=X−μσ2+ϵ⋅γ+βLayerNorm(X) = \frac{X - \mu}{\sqrt{\sigma^2 + \epsilon}} \cdot \gamma + \betaLayerNorm(X)=σ2+ϵX−μ⋅γ+β
- μ、σ2\mu、\sigma^2μ、σ2:特征均值、方差
- γ、β\gamma、\betaγ、β:可训练缩放、偏移参数
- 作用:将每层输出归一化为均值0、方差1,避免梯度爆炸/消失
(3)完整子层结构
Output=LayerNorm(X+MultiHeadAttention(X))Output = LayerNorm(X + MultiHeadAttention(X))Output=LayerNorm(X+MultiHeadAttention(X))
Output=LayerNorm(X+FeedForward(X))Output = LayerNorm(X + FeedForward(X))Output=LayerNorm(X+FeedForward(X))
3.4 前馈全连接网络(Feed Forward)
每层编码器的第二个子层,对每个token特征进行非线性变换,增强表达能力,公式:
FeedForward(X)=max(0,XW1+b1)W2+b2FeedForward(X) = max(0, XW_1 + b_1)W_2 + b_2FeedForward(X)=max(0,XW1+b1)W2+b2
- 两层全连接:第一层激活函数ReLU,第二层无激活
- 维度变化:输入d维→中间4d维→输出d维
3.5 编码器堆叠
6层完全相同的编码器块堆叠,逐层提取更高级的语义特征:
- 底层:捕捉词法、语法特征
- 中层:捕捉短语、句子特征
- 顶层:捕捉全局语义、上下文特征
四、Transformer解码器详解
解码器负责生成目标文本(如翻译结果),同样N层堆叠,每层含3个子层:掩码多头自注意力、交叉注意力、前馈网络,均搭配Add&Norm。
4.1 掩码多头自注意力(Masked Multi-Head Attention)
(1)核心作用
防止生成时偷看未来token,保证生成顺序(逐词生成)。
例:生成第i个词时,只能依赖前i-1个词,不能看第i及之后的词。
(2)掩码机制
生成上三角掩码矩阵,未来token位置填充-∞:
- 注意力分数计算时,掩码位置分数=-∞
- Softmax后,掩码位置概率=0,彻底屏蔽未来token信息
代码核心逻辑:
scores = scores.masked_fill(mask == 0, -1e9)
p_attn = scores.softmax(dim=-1)
4.2 交叉注意力(Cross-Attention)
(1)核心作用
融合编码器的源文本语义,让解码器生成时关注源文本关键信息(翻译核心)。
(2)Q/K/V来源
- Q:来自解码器上一层输出(当前生成token特征)
- K、V:来自编码器最终输出(源文本全局语义)
(3)计算逻辑
与多头自注意力一致,仅K/V来自编码器,实现源文本→目标文本的语义对齐。
4.3 解码器完整结构
每层解码器流程:
- 掩码多头自注意力(避免偷看未来)→ Add&Norm
- 交叉注意力(融合源文本语义)→ Add&Norm
- 前馈网络(非线性变换)→ Add&Norm
五、Transformer输出层
解码器输出经线性层+Softmax层,输出目标token概率分布。
- 线性层:将解码器输出(d维)映射为目标词汇表维度(V维)
- Softmax层:将V维向量归一化为概率分布(0-1,和为1)
- 输出:每个位置对应目标词汇表中各token的生成概率
- 取概率最大值对应的token,作为当前生成结果
六、Transformer网络训练
以机器翻译为例,讲解训练流程、数据集、硬件配置与结果。
6.1 训练流程
(1)数据准备
- 源文本:输入编码器(如中文)
- 目标文本:输入解码器(右移一位,如英文),作为标签
(2)逐词生成与损失计算
- 解码器初始输入:开始符()
- 逐步预测:每次预测下一个token,直到生成结束符()
- 损失函数:交叉熵损失(Cross-Entropy),计算预测概率与真实标签的误差
- 反向传播:误差逐层回传,更新所有可训练参数(嵌入矩阵、注意力权重、前馈权重)
6.2 训练数据集
- WMT2014英德数据集:450万句子对,词汇表37000
- WMT2014英法数据集:3600万句子对,词汇表32000
- 编码方式:字节对编码(BPE),解决生僻词问题
6.3 硬件配置与训练结果
(1)硬件
- 8张NVIDIA P100 GPU
- 基础模型:训练10万步(12小时)
- 大模型:训练30万步(3.5天)
(2)核心结果(BLEU分数,越高越好)
- Transformer(base):英德27.3、英法38.1
- Transformer(big):英德28.4、英法41.8
- 超越同期所有RNN/CNN模型,成为NLP任务SOTA
七、核心总结
- Transformer核心:注意力机制替代循环/卷积,实现并行+长距离依赖建模
- 输入:词嵌入(语义)+ 位置编码(顺序)
- 编码器:6层堆叠,多头自注意力+前馈网络,提取全局语义
- 解码器:6层堆叠,掩码自注意力(防偷看)+ 交叉注意力(融源信息)
- 训练:交叉熵损失,端到端训练,并行高效
- 影响:奠定大模型基础,从NLP延伸至CV、语音、多模态,是深度学习核心模型
更多推荐



所有评论(0)