大语言模型(Large Language Models, LLM)如 GPT、Claude、LLaMA 等已经彻底改变了人工智能领域。本文将深入解析这些模型背后的核心原理。
什么是大语言模型?
大语言模型是一种基于深度学习的自然语言处理模型,通过在海量文本数据上训练,学习语言的统计规律和语义关系。
核心特点
- 规模巨大 - 参数量从数十亿到数万亿
- 自监督学习 - 通过预测下一个词学习
- 涌现能力 - 规模增大后出现新能力
- 上下文学习 - 无需微调即可执行新任务
Transformer 架构
核心组件
Transformer 是 LLM 的基础架构,由 Google 在 2017 年的论文 “Attention Is All You Need” 中提出。
┌─────────────────────────────┐
│ Transformer │
├─────────────────────────────┤
│ ┌─────────────────────┐ │
│ │ Self-Attention │ │ ← 注意力机制
│ └─────────────────────┘ │
│ ↓ │
│ ┌─────────────────────┐ │
│ │ Feed Forward │ │ ← 前馈神经网络
│ └─────────────────────┘ │
│ ↓ │
│ ┌─────────────────────┐ │
│ │ Layer Norm │ │ ← 层归一化
│ └─────────────────────┘ │
└─────────────────────────────┘
× N 层
自注意力机制 (Self-Attention)
自注意力是 Transformer 的核心创新,它让模型能够”关注”输入序列中的不同位置:
def self_attention(query, key, value):
"""
Q: 查询矩阵 - "我想找什么?"
K: 键矩阵 - "我有什么?"
V: 值矩阵 - "实际的内容"
"""
# 计算注意力分数
scores = torch.matmul(query, key.transpose(-2, -1))
scores = scores / math.sqrt(d_k) # 缩放
# Softmax 归一化
attention_weights = torch.softmax(scores, dim=-1)
# 加权求和
output = torch.matmul(attention_weights, value)
return output
直观理解:当模型处理”猫坐在垫子上”这句话时,“坐”这个词需要关注”猫”(主语)和”垫子”(宾语),自注意力机制使这成为可能。
多头注意力 (Multi-Head Attention)
class MultiHeadAttention(nn.Module):
def __init__(self, d_model, num_heads):
super().__init__()
self.num_heads = num_heads
self.d_k = d_model // num_heads
self.W_q = nn.Linear(d_model, d_model)
self.W_k = nn.Linear(d_model, d_model)
self.W_v = nn.Linear(d_model, d_model)
self.W_o = nn.Linear(d_model, d_model)
def forward(self, x):
# 分成多个头,每个头关注不同的特征
Q = self.W_q(x).view(batch, -1, self.num_heads, self.d_k)
K = self.W_k(x).view(batch, -1, self.num_heads, self.d_k)
V = self.W_v(x).view(batch, -1, self.num_heads, self.d_k)
# 每个头独立计算注意力
# ... 注意力计算 ...
return self.W_o(concat_heads)
位置编码 (Positional Encoding)
由于自注意力机制本身不包含位置信息,需要额外的位置编码:
正弦位置编码
def sinusoidal_position_encoding(seq_len, d_model):
position = torch.arange(seq_len).unsqueeze(1)
div_term = torch.exp(torch.arange(0, d_model, 2) * (-math.log(10000.0) / d_model))
pe = torch.zeros(seq_len, d_model)
pe[:, 0::2] = torch.sin(position * div_term)
pe[:, 1::2] = torch.cos(position * div_term)
return pe
RoPE (旋转位置编码)
现代 LLM 如 LLaMA 使用 RoPE,支持更长的上下文:
# RoPE 的核心思想:通过旋转矩阵编码相对位置
def apply_rope(x, position):
cos = torch.cos(position * theta)
sin = torch.sin(position * theta)
# 旋转操作
x_rotated = x * cos + rotate_half(x) * sin
return x_rotated
训练过程
预训练:自监督学习
输入: "今天天气"
目标: 预测下一个词 → "很"
训练数据:互联网文本、书籍、代码等
损失函数:交叉熵损失
指令微调 (Instruction Tuning)
{
"instruction": "将以下句子翻译成英文",
"input": "你好,世界",
"output": "Hello, World"
}
RLHF (人类反馈强化学习)
1. 收集人类偏好数据
2. 训练奖励模型 (Reward Model)
3. 使用 PPO 算法优化策略
目标:让模型输出更符合人类价值观
推理过程
自回归生成
def generate(model, prompt, max_length):
tokens = tokenize(prompt)
for _ in range(max_length):
# 模型预测下一个 token 的概率分布
logits = model(tokens)
next_token_probs = softmax(logits[-1])
# 采样策略
next_token = sample(next_token_probs, temperature=0.7)
tokens.append(next_token)
if next_token == EOS_TOKEN:
break
return detokenize(tokens)
采样策略
| 策略 | 描述 | 特点 |
|---|---|---|
| Greedy | 选择概率最高的 | 确定性,可能重复 |
| Temperature | 调整概率分布 | 越高越随机 |
| Top-k | 从前 k 个中采样 | 减少低质量输出 |
| Top-p (Nucleus) | 从累积概率达到 p 的中采样 | 动态调整范围 |
KV Cache 优化
推理时的关键优化技术:
# 没有 KV Cache:每次生成都要重新计算所有位置
for i in range(seq_len):
output = attention(Q[:, :i+1], K[:, :i+1], V[:, :i+1])
# 有 KV Cache:缓存之前的 K, V
kv_cache = {}
for i in range(seq_len):
if i > 0:
K = concat(kv_cache['K'], new_K)
V = concat(kv_cache['V'], new_V)
output = attention(Q[:, i:i+1], K, V)
kv_cache['K'], kv_cache['V'] = K, V
模型架构演进
GPT 系列 (Decoder-only)
特点:自回归生成
应用:文本生成、对话、代码
GPT-1 → GPT-2 → GPT-3 → GPT-4
117M 1.5B 175B ~1.7T (推测)
BERT 系列 (Encoder-only)
特点:双向编码
应用:文本分类、NER、问答
BERT → RoBERTa → ALBERT → DeBERTa
T5 / BART (Encoder-Decoder)
特点:序列到序列
应用:翻译、摘要、问答
上下文长度扩展
挑战
- 自注意力复杂度 O(n²)
- 长文本训练数据稀缺
- 位置编码外推困难
解决方案
- 稀疏注意力 - Longformer, BigBird
- 线性注意力 - Mamba, RWKV
- 位置插值 - Position Interpolation
- 分块处理 - ALiBi
总结
理解 LLM 的核心在于:
- Transformer 架构 - 自注意力机制是核心
- 规模效应 - 更大的模型涌现更强的能力
- 训练范式 - 预训练 + 指令微调 + RLHF
- 推理优化 - KV Cache、量化、剪枝
LLM 正在快速发展,但其基础原理保持稳定。掌握这些原理,能帮助你更好地理解和使用这些强大的模型。