自监督学习
Self-Supervised Learning for Language Models
概述
自监督学习是一种利用数据自身结构生成监督信号的学习范式。 对于大语言模型,自监督学习使得模型能够从海量无标注文本中学习语言表示, 是现代LLM预训练的核心技术。
核心思想:从数据中自动构造监督信号,无需人工标注。
主要方法
| 方法 | 预训练任务 | 模型类型 | 代表模型 |
|---|---|---|---|
| 因果语言模型 | 预测下一个token | Decoder-only | GPT、LLaMA |
| 掩码语言模型 | 预测被遮蔽的token | Encoder-only | BERT、RoBERTa |
| Span Corruption | 还原被遮蔽的片段 | Enc-Dec | T5、BART |
| 降噪自编码 | 重建被破坏的文本 | Enc-Dec | BART |
因果语言模型 (CLM)
自回归地预测下一个token,是GPT系列和大多数现代LLM的预训练方式:
# 目标:最大化序列概率
L = -Σ log P(x_t | x_1, x_2, ..., x_{t-1})
# 示例
输入: "The cat sits on the"
目标: "mat"
- 单向注意力,只能看到之前的token
- 自然适配文本生成任务
- 是主流LLM的预训练方式
掩码语言模型 (MLM)
随机遮蔽部分token,让模型预测被遮蔽的内容:
# BERT风格
输入: "The [MASK] sits on the mat."
目标: "cat"
# 遮蔽策略(BERT)
- 80%替换为[MASK]
- 10%替换为随机词
- 10%保持不变
- 双向注意力,能利用完整上下文
- 适合理解任务(分类、抽取等)
- 不适合直接用于生成
Span Corruption
T5使用的预训练任务,遮蔽连续的token片段:
# 输入输出示例
原始: "Thank you for inviting me to your party last week."
遮蔽输入: "Thank you <X> me to your party <Y> week."
目标输出: "<X> for inviting <Y> last <Z>"
- 遮蔽连续span,平均长度约3
- 使用哨兵token标记不同span
- 训练模型生成被遮蔽的内容
代码示例
import torch
import torch.nn as nn
class CausalLanguageModel(nn.Module):
"""因果语言模型预训练"""
def __init__(self, model, vocab_size):
super().__init__()
self.model = model
self.lm_head = nn.Linear(model.config.hidden_size, vocab_size)
def forward(self, input_ids, labels=None):
# 前向传播
outputs = self.model(input_ids)
hidden_states = outputs.last_hidden_state
# 预测logits
logits = self.lm_head(hidden_states)
# 计算损失
if labels is not None:
# 移位:预测下一个token
shift_logits = logits[:, :-1, :].contiguous()
shift_labels = labels[:, 1:].contiguous()
loss = nn.CrossEntropyLoss()(
shift_logits.view(-1, shift_logits.size(-1)),
shift_labels.view(-1)
)
return {"loss": loss, "logits": logits}
return {"logits": logits}预训练数据处理
- 大规模语料:万亿级token的数据量
- 数据清洗:过滤低质量、重复内容
- 数据混合:多种来源按比例混合
- 序列打包:多个文档拼接到最大长度
为什么自监督有效
数据规模
无需人工标注,可利用海量互联网文本数据。
任务设计
预测下一个词需要理解语法、语义、世界知识。
泛化能力
学习通用语言表示,迁移到下游任务。
缩放定律
增加数据和模型规模持续提升性能。
最佳实践
- 生成任务使用CLM预训练
- 理解任务可考虑MLM或Span Corruption
- 确保预训练数据质量和多样性
- 验证集用于监控预训练进度
- 注意训练稳定性和收敛
参考资料
- BERT: Pre-training of Deep Bidirectional Transformers (Devlin et al., 2018)
- Language Models are Unsupervised Multitask Learners (Radford et al., 2019)
- Exploring the Limits of Transfer Learning with T5 (Raffel et al., 2019)
----