概述
Transformer是一种基于注意力机制的神经网络架构,由Vaswani等人在2017年提出,彻底改变了自然语言处理领域。
🏗️ 核心组件
1️⃣ 编码器-解码器架构
编码器:将输入序列转换为隐藏表示
解码器:基于编码器输出生成目标序列
2️⃣ 关键创新
自注意力机制:并行处理序列,捕获长距离依赖
位置编码:为模型提供序列位置信息
残差连接:缓解深层网络训练问题
层归一化:稳定训练过程
📋 架构详解
编码器结构
每个编码器层包含:
多头自注意力:计算输入序列内部关系
前馈神经网络:非线性变换
残差连接和层归一化
解码器结构
每个解码器层包含:
掩码多头自注意力:防止信息泄露
编码器-解码器注意力:关注输入序列
前馈神经网络
残差连接和层归一化
🔍 数学原理
缩放点积注意力
Attention(Q,K,V)=softmax(
d
k
QK
T
)V
多头注意力
MultiHead(Q,K,V)=Concat(head
1
,...,head
h
)W
O
其中
head
i
=Attention(QW
i
Q
,KW
i
K
,VW
i
V
)
🚀 代码示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import torch
import torch.nn as nn
class TransformerBlock(nn.Module):
def init(self, d_model, n_heads, d_ff, dropout=0.1):
super().init()
self.attention = nn.MultiheadAttention(d_model, n_heads)
self.feed_forward = nn.Sequential(
nn.Linear(d_model, d_ff),
nn.ReLU(),
nn.Linear(d_ff, d_model)
)
self.norm1 = nn.LayerNorm(d_model)
self.norm2 = nn.LayerNorm(d_model)
self.dropout = nn.Dropout(dropout)
def forward(self, x, mask=None):
# 自注意力 + 残差连接
attn_output, _ = self.attention(x, x, x, attn_mask=mask)
x = self.norm1(x + self.dropout(attn_output))
# 前馈网络 + 残差连接
ff_output = self.feed_forward(x)
x = self.norm2(x + self.dropout(ff_output))
return x
📚 深入阅读
原始论文:Attention Is All You Need
分词器详解
注意力机制详解
🎯 面试重点
为什么使用多头注意力?
位置编码的作用是什么?
残差连接和层归一化的作用?
Transformer相比RNN的优势?