大语言模型(LLM)工作原理解析

foxgem

大语言模型(Large Language Models, LLM)如 GPT、Claude、LLaMA 等已经彻底改变了人工智能领域。本文将深入解析这些模型背后的核心原理。

什么是大语言模型?

大语言模型是一种基于深度学习的自然语言处理模型,通过在海量文本数据上训练,学习语言的统计规律和语义关系。

核心特点

  1. 规模巨大 - 参数量从数十亿到数万亿
  2. 自监督学习 - 通过预测下一个词学习
  3. 涌现能力 - 规模增大后出现新能力
  4. 上下文学习 - 无需微调即可执行新任务

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²)
  • 长文本训练数据稀缺
  • 位置编码外推困难

解决方案

  1. 稀疏注意力 - Longformer, BigBird
  2. 线性注意力 - Mamba, RWKV
  3. 位置插值 - Position Interpolation
  4. 分块处理 - ALiBi

总结

理解 LLM 的核心在于:

  1. Transformer 架构 - 自注意力机制是核心
  2. 规模效应 - 更大的模型涌现更强的能力
  3. 训练范式 - 预训练 + 指令微调 + RLHF
  4. 推理优化 - KV Cache、量化、剪枝

LLM 正在快速发展,但其基础原理保持稳定。掌握这些原理,能帮助你更好地理解和使用这些强大的模型。