预训练模型
预训练是指在大规模文本数据上训练模型,使其学习语言的统计规律和语义理解能力。
概述
预训练模型是大语言模型的基础,通过在海量文本数据上进行无监督学习,学习语言的通用表示。
训练过程
数据准备
收集大规模文本数据,包括:
- 维基百科
- 书籍
- 网页
- 新闻文章
模型初始化
构建 Transformer 架构模型,设置超参数:
- 层数
- 隐藏层大小
- 注意力头数
- 词汇表大小
预训练目标
自回归语言建模
python
from transformers import GPT2LMHeadModel, GPT2Tokenizer
model = GPT2LMHeadModel.from_pretrained("gpt2")
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
# 输入文本
text = "Hello, my name is"
inputs = tokenizer(text, return_tensors="pt")
# 生成文本
outputs = model.generate(**inputs, max_length=50)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))掩码语言建模
python
from transformers import BertForMaskedLM, BertTokenizer
model = BertForMaskedLM.from_pretrained("bert-base-uncased")
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
# 输入文本(带掩码)
text = "The capital of France is [MASK]."
inputs = tokenizer(text, return_tensors="pt")
# 预测掩码位置
outputs = model(**inputs)
predictions = outputs.logits.argmax(dim=-1)
print(tokenizer.decode(predictions[0]))常用预训练模型
GPT (Generative Pre-trained Transformer)
- 由 OpenAI 开发
- 采用自回归语言建模
- 支持生成式任务
BERT (Bidirectional Encoder Representations from Transformers)
- 由 Google 开发
- 采用掩码语言建模
- 支持理解类任务
LLaMA
- 由 Meta 开源
- 高效的预训练模型
- 支持多种语言
Qwen
- 由阿里云开发
- 支持多语言
- 开源可商用
预训练技巧
混合精度训练
python
from torch.cuda.amp import autocast, GradScaler
scaler = GradScaler()
for inputs, labels in dataloader:
optimizer.zero_grad()
with autocast():
outputs = model(inputs)
loss = loss_fn(outputs, labels)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()梯度累积
python
accumulation_steps = 4
for i, (inputs, labels) in enumerate(dataloader):
outputs = model(inputs)
loss = loss_fn(outputs, labels) / accumulation_steps
loss.backward()
if (i + 1) % accumulation_steps == 0:
optimizer.step()
optimizer.zero_grad()学习率调度
python
from torch.optim.lr_scheduler import CosineAnnealingLR
optimizer = AdamW(model.parameters(), lr=5e-5)
scheduler = CosineAnnealingLR(optimizer, T_max=1000)
for epoch in range(epochs):
for inputs, labels in dataloader:
# 训练步骤
scheduler.step()