大模型原理与实践
大语言模型的工作原理
Section titled “大语言模型的工作原理”大语言模型是自回归语言模型:给定前文,预测下一个 token。
flowchart LR A[预训练<br/>海量文本] --> B[SFT<br/>监督微调] B --> C[RLHF/DPO<br/>人类对齐] C --> D[部署使用]1. 预训练 (Pre-training)
Section titled “1. 预训练 (Pre-training)”在海量文本上学习语言规律。目标是最大化似然:
# 预训练的核心:Causal Language Modelingfrom transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("gpt2")tokenizer = AutoTokenizer.from_pretrained("gpt2")
text = "The capital of France is"inputs = tokenizer(text, return_tensors="pt")outputs = model(**inputs, labels=inputs["input_ids"])
# 损失:预测下一个 token 的交叉熵print(f"Loss: {outputs.loss:.4f}")2. 监督微调 (SFT)
Section titled “2. 监督微调 (SFT)”用高质量的 prompt-answer 对来引导模型行为:
from transformers import TrainingArguments, Trainer
# 微调数据格式training_data = [ {"prompt": "解释什么是 Transformer", "answer": "Transformer 是..."}, {"prompt": "写一个排序函数", "answer": "def sort(arr):\n ..."},]
training_args = TrainingArguments( output_dir="./results", num_train_epochs=3, per_device_train_batch_size=4, learning_rate=2e-5,)3. 对齐 (RLHF/DPO)
Section titled “3. 对齐 (RLHF/DPO)”让模型输出符合人类偏好。DPO(Direct Preference Optimization)是更简单的替代方案:
# DPO 的核心思想:直接优化偏好对# 给定: prompt x, 偏好回答 y_w, 非偏好回答 y_l# 优化目标: 增大 P(y_w|x) / P(y_l|x) 的比值
from trl import DPOTrainer
dpo_trainer = DPOTrainer( model=model, train_dataset=preference_dataset, # (prompt, chosen, rejected) tokenizer=tokenizer, args=training_args,)dpo_trainer.train()量化:减小模型体积
Section titled “量化:减小模型体积”from transformers import BitsAndBytesConfig
# 4-bit 量化加载bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16,)
model = AutoModelForCausalLM.from_pretrained( "meta-llama/Llama-3.2-3B", quantization_config=bnb_config,)Kaplan et al. (2020) 发现,模型性能与三个因素遵循幂律关系:
其中 是参数量, 是数据量, 是计算量。三者都增加,性能才会持续提升。
- Transformer 教程 — 大模型的底层架构
- Prompt Engineering — 如何用好大模型
- RAG 与 Agent — 基于大模型的应用开发