Transformer:现代自然语言处理的革命性架构
Transformer模型革新了自然语言处理,完全基于自注意力机制取代传统RNN结构。其创新架构包括:1)多头自注意力层并行处理长距离依赖;2)位置编码保留序列信息;3)残差连接和层归一化解决梯度消失;4)掩码机制实现序列生成。通过堆叠编码器-解码器结构,Transformer克服了传统序列模型的并行计算瓶颈,成为BERT、GPT等现代NLP模型的基石。实验证明,该架构在机器翻译等任务中表现出色,
1. 引言
Transformer模型彻底改变了自然语言处理领域,它摒弃了传统的循环神经网络(RNN)结构,完全基于自注意力机制构建。这种架构在机器翻译、文本生成等任务中表现出色,成为当今NLP模型的基石。
2. Seq2Seq模型与Encoder-Decoder架构
传统的序列到序列(Seq2Seq)模型基于Encoder-Decoder架构:
- Encoder将输入序列编码为固定长度的上下文向量
- Decoder基于该向量生成目标序列

传统RNN-based模型的瓶颈在于:
limL→∞∂ht∂ht−L⏟长距离依赖≈0 \underset{\text{长距离依赖}}{\underbrace{\lim_{L \to \infty} \frac{\partial h_t}{\partial h_{t-L}}}} \approx 0 长距离依赖
L→∞lim∂ht−L∂ht≈0
其中LLL表示时间步距离,导致梯度消失问题。
3. Transformer整体架构
Transformer创新性地采用堆叠的自注意力层:
4. Embedding层与位置编码
4.1 词嵌入
将离散词汇映射为连续向量空间:
E∈RV×dmodel \mathbf{E} \in \mathbb{R}^{V \times d_{\text{model}}} E∈RV×dmodel
其中VVV是词汇表大小,dmodeld_{\text{model}}dmodel是嵌入维度。
4.2 位置编码
由于Transformer不含时序结构,需显式注入位置信息:
PE(pos,2i)=sin(pos100002i/dmodel)PE(pos,2i+1)=cos(pos100002i/dmodel) \begin{aligned} PE_{(pos,2i)} &= \sin\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right) \\ PE_{(pos,2i+1)} &= \cos\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right) \end{aligned} PE(pos,2i)PE(pos,2i+1)=sin(100002i/dmodelpos)=cos(100002i/dmodelpos)
其中pospospos是位置索引,iii是维度索引。
5. Encoder结构
每个Encoder层包含两个核心子层:
5.1 多头自注意力
将输入拆分为hhh个头并行处理:
MultiHead(Q,K,V)=Concat(head1,…,headh)WO \text{MultiHead}(Q,K,V) = \text{Concat}(\text{head}_1,\dots,\text{head}_h)W^O MultiHead(Q,K,V)=Concat(head1,…,headh)WO
其中每个头计算:
headi=Attention(QWiQ,KWiK,VWiV) \text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V) headi=Attention(QWiQ,KWiK,VWiV)
5.2 前馈神经网络
位置全连接层提供非线性变换:
FFN(x)=max(0,xW1+b1)W2+b2 \text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2 FFN(x)=max(0,xW1+b1)W2+b2
5.3 层归一化与残差连接
每个子层都采用残差连接和层归一化:
LayerNorm(x+Sublayer(x)) \text{LayerNorm}(x + \text{Sublayer}(x)) LayerNorm(x+Sublayer(x))
这解决了深层网络的梯度消失问题:
∂L∂x≈∂L∂(Sublayer(x))⋅1 \frac{\partial \mathcal{L}}{\partial x} \approx \frac{\partial \mathcal{L}}{\partial (\text{Sublayer}(x))} \cdot 1 ∂x∂L≈∂(Sublayer(x))∂L⋅1
6. Decoder结构
Decoder在Encoder基础上增加:
- 掩码多头注意力:防止位置关注后续信息
- Encoder-Decoder注意力:融合源语言信息
掩码机制确保位置iii只能关注j≤ij \leq ij≤i:
Mask(Q,K)={QKT/dkif j≤i−∞otherwise \text{Mask}(Q,K) = \begin{cases} QK^T/\sqrt{d_k} & \text{if } j \leq i \\ -\infty & \text{otherwise} \end{cases} Mask(Q,K)={QKT/dk−∞if j≤iotherwise
7. 搭建Transformer关键组件
7.1 注意力计算核心
def scaled_dot_product_attention(Q, K, V, mask=None):
d_k = Q.size(-1)
scores = torch.matmul(Q, K.transpose(-2,-1)) / math.sqrt(d_k)
if mask is not None:
scores = scores.masked_fill(mask == 0, -1e9)
attn = F.softmax(scores, dim=-1)
return torch.matmul(attn, V)
7.2 层归一化实现
class LayerNorm(nn.Module):
def __init__(self, features, eps=1e-6):
super().__init__()
self.gamma = nn.Parameter(torch.ones(features))
self.beta = nn.Parameter(torch.zeros(features))
self.eps = eps
def forward(self, x):
mean = x.mean(-1, keepdim=True)
std = x.std(-1, keepdim=True)
return self.gamma * (x - mean) / (std + self.eps) + self.beta
8. 总结
Transformer通过以下创新解决了传统序列模型的局限:
- 完全注意力机制:捕获长距离依赖
- 并行计算结构:大幅提升训练效率
- 残差连接+层归一化:支持深层网络训练
- 位置编码:保留序列顺序信息
其架构公式可概括为:
Transformer(X)=Decoder(Encoder(Embedding(X)+PE)) \text{Transformer}(X) = \text{Decoder}(\text{Encoder}(\text{Embedding}(X) + \text{PE})) Transformer(X)=Decoder(Encoder(Embedding(X)+PE))
Transformer已成为BERT、GPT等革命性模型的基础,持续推动NLP领域的发展。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)