大型语言模型:原理、架构与应用
大型语言模型:原理、架构与应用
大型语言模型(LLMs)彻底改变了自然语言处理的范式,从BERT、GPT到最新的多模态模型,它们正在重塑人工智能的边界。
1. 核心架构:Transformer
1.1 自注意力机制
Transformer的核心是自注意力机制,它允许模型在处理序列时关注所有位置的信息。
缩放点积注意力: $$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V$$
其中:
- $Q$:查询矩阵
- $K$:键矩阵
- $V$:值矩阵
- $d_k$:键向量的维度
1.2 多头注意力
$$\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, …, \text{head}_h)W^O$$ 其中 $\text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)$
1.3 位置编码
由于Transformer没有循环结构,需要位置编码来注入序列顺序信息: $$PE_{(pos, 2i)} = \sin(pos/10000^{2i/d_{\text{model}}})$$ $$PE_{(pos, 2i+1)} = \cos(pos/10000^{2i/d_{\text{model}}})$$
2. 主要模型架构
2.1 编码器-解码器架构(原始Transformer)
- 编码器:处理输入序列
- 解码器:生成输出序列
- 应用:机器翻译、文本摘要
2.2 仅编码器架构(BERT系列)
- 双向上下文理解
- 预训练任务:掩码语言模型(MLM)、下一句预测(NSP)
- 应用:文本分类、命名实体识别、问答系统
2.3 仅解码器架构(GPT系列)
- 自回归生成
- 因果注意力掩码
- 应用:文本生成、对话系统、代码生成
2.4 编码器-解码器架构(T5、BART)
- 统一文本到文本框架
- 应用:所有NLP任务统一为文本生成
3. 预训练策略
3.1 自监督学习目标
掩码语言模型(MLM)
随机掩码输入中的部分token,让模型预测被掩码的token。
因果语言模型(CLM)
给定前文,预测下一个token(自回归)。
排列语言模型(XLNet)
考虑所有可能的排列顺序,克服BERT的独立性假设。
对比学习(SimCSE)
让相似句子的表示更接近,不相似句子的表示更远。
3.2 训练数据
- 规模:数百GB到数TB的文本数据
- 来源:网页、书籍、学术论文、代码等
- 预处理:去重、过滤、质量评估
3.3 训练优化
- 混合精度训练:减少显存使用
- 梯度累积:模拟更大批次
- 模型并行:处理超大模型
- 检查点机制:从故障中恢复
4. 微调技术
4.1 全参数微调
更新模型所有权重参数。
4.2 参数高效微调(PEFT)
LoRA(低秩适应)
$$\Delta W = BA$$ 其中 $B \in \mathbb{R}^{d \times r}$, $A \in \mathbb{R}^{r \times k}$, $r \ll \min(d,k)$
Adapter
在Transformer块中插入小型前馈网络。
Prefix Tuning
在输入前添加可学习的提示向量。
4.3 指令微调
使用指令-响应对数据训练,使模型能够遵循人类指令。
4.4 人类反馈强化学习(RLHF)
- 监督微调:使用人类标注的示范数据
- 奖励模型训练:学习人类偏好
- 强化学习优化:PPO算法优化策略
5. 评估方法
5.1 内在评估
- 困惑度:衡量语言模型质量
- 嵌入空间分析:词向量质量
5.2 外在评估
- GLUE基准:通用语言理解评估
- SuperGLUE:更难的NLP任务
- MMLU:大规模多任务语言理解
5.3 生成质量评估
- BLEU:机器翻译评估
- ROUGE:文本摘要评估
- METEOR:考虑同义词的评估
5.4 人工评估
- 有用性:回答是否有助于解决问题
- 真实性:信息是否准确
- 无害性:是否包含有害内容
6. 应用领域
6.1 自然语言理解
- 文本分类
- 情感分析
- 命名实体识别
- 关系抽取
6.2 自然语言生成
- 文本摘要
- 对话系统
- 故事生成
- 代码生成
6.3 多模态应用
- 图像描述生成
- 视觉问答
- 文档理解
6.4 推理与问题求解
- 数学推理
- 逻辑推理
- 常识推理
7. 实际挑战与解决方案
7.1 幻觉问题
表现:生成看似合理但实际错误的信息 解决方案:
- 检索增强生成(RAG)
- 事实核查机制
- 置信度校准
7.2 长上下文处理
挑战:Transformer的二次计算复杂度 解决方案:
- 稀疏注意力机制
- 层次化注意力
- 循环记忆机制
7.3 偏见与公平性
问题:训练数据中的社会偏见 缓解策略:
- 数据去偏
- 对抗训练
- 公平性约束
7.4 计算资源需求
挑战:训练和推理成本高昂 优化方法:
- 模型压缩
- 知识蒸馏
- 量化与剪枝
8. Python实践:使用Hugging Face Transformers
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
# 加载模型和分词器
model_name = "gpt2" # 可以选择其他模型
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# 设置pad_token
if tokenizer.pad_token is None:
tokenizer.pad_token = tokenizer.eos_token
def generate_text(prompt, max_length=100, temperature=0.7, top_p=0.9):
"""文本生成函数"""
inputs = tokenizer(prompt, return_tensors="pt")
# 生成参数
generation_config = {
"max_length": max_length,
"temperature": temperature,
"top_p": top_p,
"do_sample": True,
"num_return_sequences": 1,
"pad_token_id": tokenizer.pad_token_id,
"eos_token_id": tokenizer.eos_token_id,
}
# 生成文本
with torch.no_grad():
outputs = model.generate(**inputs, **generation_config)
generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
return generated_text
# 示例使用
prompt = "人工智能的未来发展将"
result = generate_text(prompt, max_length=50)
print("生成的文本:")
print(result)
def calculate_perplexity(text):
"""计算困惑度"""
inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=512)
with torch.no_grad():
outputs = model(**inputs, labels=inputs["input_ids"])
loss = outputs.loss
perplexity = torch.exp(loss)
return perplexity.item()
# 计算示例文本的困惑度
sample_text = "这是一个测试句子。"
ppl = calculate_perplexity(sample_text)
print(f"困惑度: {ppl:.2f}")