Transformer 核心概念
1. 为什么 Transformer 重要
Transformer 用自注意力替代 RNN 的逐步递归,使模型可以并行处理序列,并直接建模任意 token 之间的依赖关系。它是 BERT、GPT、T5、Qwen、LLaMA、Gemma 等模型的基础。
2. Token、Embedding 与位置编码
文本进入模型前要先转成 token ID:
文本 -> tokenizer -> token ids -> embedding vectors -> transformer blocks
- Tokenization:把文本切成词、子词或字符。
- Embedding:把离散 token ID 映射为连续向量。
- Positional Encoding:注入顺序信息,因为注意力本身不天然知道 token 位置。
Char01.txt 中的 PositionalEncoding 使用正弦/余弦函数:
position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1)
div_term = torch.exp(torch.arange(0, d_model, 2).float() * -(np.log(10000.0) / d_model))
encoding[:, 0::2] = torch.sin(position * div_term)
encoding[:, 1::2] = torch.cos(position * div_term)
理解重点:位置编码不是预测目标,而是加到 embedding 上,让模型能区分“同一个词出现在不同位置”的情况。
3. Self-Attention
Self-Attention 的核心是 Query、Key、Value:
Attention(Q, K, V) = softmax(QK^T / sqrt(d_k))V
含义:
Q:当前 token 想查询什么。K:每个 token 提供什么索引特征。V:每个 token 真正贡献的信息。softmax(QK^T):当前 token 应该关注其它 token 的权重。
4. Multi-Head Attention
多头注意力把 d_model 拆成多个 head,每个 head 学习不同关系:
- 有的 head 可能关注局部语法。
- 有的 head 可能关注长距离依赖。
- 有的 head 可能关注实体或位置关系。
常见约束:
assert d_model % num_heads == 0
head_dim = d_model // num_heads
Jetson Nano 上建议:
d_model=64或128num_heads=2或4seq_len=16到64batch_size=1
5. Feed Forward Network
Transformer block 中每个 token 还会经过一个前馈网络:
Linear(d_model -> d_ff) -> activation -> Linear(d_ff -> d_model)
一般 d_ff 比 d_model 大,例如原始 Transformer 用 4 倍扩展。Jetson Nano 上建议 d_ff=2*d_model 或 4*d_model,不要一开始就用 2048。
6. LayerNorm、Residual 与 Dropout
一个标准 Encoder Layer 通常是:
x -> MultiHeadAttention -> residual add -> LayerNorm -> FFN -> residual add -> LayerNorm
关键作用:
- Residual:缓解深层网络训练困难。
- LayerNorm:稳定激活分布。
- Dropout:减少过拟合。
7. Encoder、Decoder 与 Decoder-only
| 架构 | 代表模型 | 适合任务 |
|---|---|---|
| Encoder-only | BERT、RoBERTa | 分类、检索、命名实体、embedding |
| Decoder-only | GPT、Qwen、LLaMA | 文本生成、对话、代码生成 |
| Encoder-Decoder | T5、BART、MarianMT | 翻译、摘要、文本到文本任务 |
8. Mask 的作用
- Encoder self-attention 通常可以看见整个输入。
- Decoder causal attention 只能看见当前位置之前的 token。
- Padding mask 用来忽略补齐 token。
Causal mask 是 GPT 类模型能做自回归生成的关键。
9. 训练目标
| 训练目标 | 说明 | 代表模型 |
|---|---|---|
| Causal Language Modeling | 预测下一个 token | GPT、Qwen、LLaMA |
| Masked Language Modeling | 预测被 mask 的 token | BERT |
| Seq2Seq | 输入序列映射到输出序列 | T5、BART、MarianMT |
| Classification | 输出类别标签 | BERT 分类头、DistilBERT |
10. 从 Char01.txt 到可运行实验
Char01.txt 里的结构示例很适合学习,但参数偏大。建议先改成:
d_model = 128
num_heads = 4
d_ff = 256
seq_len = 32
batch_size = 1
num_layers = 1
等能稳定运行后,再逐步增大:
- 只跑 forward。
- 加 loss 和 backward。
- 加 optimizer。
- 构造 toy dataset。
- 训练 tiny character-level language model。
Page Source