自监督学习

Self-Supervised Learning for Language Models

概述

自监督学习是一种利用数据自身结构生成监督信号的学习范式。 对于大语言模型,自监督学习使得模型能够从海量无标注文本中学习语言表示, 是现代LLM预训练的核心技术。

核心思想:从数据中自动构造监督信号,无需人工标注。

主要方法

方法预训练任务模型类型代表模型
因果语言模型预测下一个tokenDecoder-onlyGPT、LLaMA
掩码语言模型预测被遮蔽的tokenEncoder-onlyBERT、RoBERTa
Span Corruption还原被遮蔽的片段Enc-DecT5、BART
降噪自编码重建被破坏的文本Enc-DecBART

因果语言模型 (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)
----