【LLM系列2】预训练

预训练(Pre-training)

基本定义

预训练(Pre-training)是指在大规模无标注数据上,通过自监督学习(Self-supervised Learning)训练模型学习通用特征表示的过程。其核心目标是让模型捕获语言、图像或其他模态数据的潜在规律(如语法、语义、上下文关系),从而为下游任务(如分类、生成)提供高质量的特征基础。预训练模型(如BERT、GPT)通过迁移学习(Transfer Learning)适配具体任务,显著减少对标注数据的依赖。

与微调的区别:

  • 预训练:面向通用表示,使用无监督任务(如掩码语言建模)。
  • 微调:在预训练模型基础上,针对特定任务(如情感分析)用有标签数据进行参数调整。

技术细节

模型架构:

  • Transformer:主流架构,依赖自注意力(Self-Attention)捕捉长程依赖,支持并行计算。
  • 变体:
    • 编码器(如BERT):双向上下文建模,适用于理解任务。
    • 解码器(如GPT):单向自回归生成,适用于文本生成。
    • 编码器-解码器(如T5):支持序列到序列任务(翻译、摘要)。

预训练任务:

  • 掩码语言建模(MLM):随机掩盖输入词,模型预测被掩盖词(BERT)。
  • 因果语言建模(CLM):预测下一个词,仅依赖上文信息(GPT)。
  • 替换词检测(RTD):区分原始词与替换词(ELECTRA)。
  • 跨度预测:预测被掩盖的连续词片段(SpanBERT)。

训练流程:

  • 数据预处理

    • 文本分词(Tokenization):使用WordPiece、BPE或SentencePiece。
    • 动态掩码(Dynamic Masking):每次训练时随机生成掩码(RoBERTa优化)。
  • 优化策略

    • 学习率:初始值较高(如1e-4),配合学习率预热(Warmup)。
    • 批量大小:通常极大(如百万级token/批次),依赖分布式训练。
  • 硬件加速

    • 混合精度训练(FP16/FP8)加速计算。
    • 模型并行(Model Parallelism)与流水线并行(Pipeline Parallelism)降低显存压力。

技术来源
  • 早期起源

    • Word2Vec(2013):通过CBOW/Skip-gram学习词向量,首次展示无监督表示的迁移能力。
    • ELMo(2018):基于双向LSTM的上下文词表示,引入分层特征提取。
  • Transformer时代

    • Transformer(2017):Vaswani等人提出,取代RNN/CNN,成为预训练基础架构。
    • BERT(2018, Google):基于MLM的双向预训练,推动NLP任务性能飞跃。
    • GPT系列(2018-2023, OpenAI):自回归模型,通过模型规模扩展(Scaling Laws)突破生成能力。

代码示例(使用Hugging Face训练BERT的MLM任务)
from transformers import BertTokenizer, BertForMaskedLM, TrainingArguments, Trainer
from datasets import load_dataset
import torch

# 加载模型和分词器
model_name = "bert-base-uncased"
tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertForMaskedLM.from_pretrained(model_name)

# 加载数据集(示例:Wikipedia文本)
dataset = load_dataset("wikipedia", "20220301.en", split="train[:1%]")

# 数据预处理(动态掩码由模型内部处理)
def tokenize_function(examples):
    return tokenizer(
        examples["text"],
        truncation=True,
        max_length=128,
        padding="max_length",
        return_special_tokens_mask=True  # 避免掩码特殊标记
    )

tokenized_dataset = dataset.map(tokenize_function, batched=True)

# 训练配置
training_args = TrainingArguments(
    output_dir="./bert_pretrain",
    overwrite_output_dir=True,
    num_train_epochs=3,
    per_device_train_batch_size=32,
    save_steps=10_000,
    save_total_limit=2,
    learning_rate=5e-5,
    warmup_steps=10_000,
    logging_dir="./logs",
    fp16=True,  # 启用混合精度
    gradient_accumulation_steps=2,  # 小显存时增大有效批次
)

# 创建Trainer
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_dataset,
)

# 开始预训练
trainer.train()

重点文献
  • BERT(2018)

    • 标题:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
    • 作者:Devlin等人(Google)
    • 贡献:提出MLM和NSP任务,确立双向预训练范式。
  • GPT-3(2020)

    • 标题:Language Models are Few-Shot Learners
    • 作者:Brown等人(OpenAI)
    • 贡献:验证模型规模(Scaling Laws)对少样本学习的提升。
  • Transformer(2017)

    • 标题:Attention Is All You Need
    • 作者:Vaswani等人(Google)
    • 贡献:提出Transformer架构,取代RNN/CNN。
  • RoBERTa(2019)

    • 标题:RoBERTa: A Robustly Optimized BERT Pretraining Approach
    • 作者:Liu等人(Facebook)
    • 贡献:优化BERT训练策略(动态掩码、更大批次)。
  • T5(2020)

    • 标题:Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer
    • 作者:Raffel等人(Google)
    • 贡献:统一任务格式(Text-to-Text),系统对比预训练方案。

重点技术
  • 自注意力机制(Self-Attention):动态计算词间权重,捕捉长距离依赖,支持并行计算。
  • 动态掩码(Dynamic Masking):每次训练迭代生成随机掩码,提升模型鲁棒性(RoBERTa)。
  • 模型缩放(Scaling Laws):模型性能随参数规模、数据量和计算量呈幂律增长(GPT-3)。
  • 稀疏专家混合(MoE):如Switch Transformer,动态激活部分参数,提升模型容量且控制计算成本。
  • 分布式训练优化
    • ZeRO(Zero Redundancy Optimizer):DeepSpeed库实现显存优化,支持千亿参数训练。
    • 3D并行:数据并行+模型并行+流水线并行(如Megatron-LM)。

总结

预训练通过自监督任务从海量数据中学习通用表示,成为现代AI的核心技术。其成功依赖于Transformer架构、高效训练策略(如动态掩码、混合精度)和硬件加速。未来方向包括多模态预训练(如CLIP)、绿色AI(降低能耗)和更安全的对齐技术(如RLHF)。

### 大型语言模型预训练数据清洗技术与最佳实践 #### 数据源的选择与管理 对于大型语言模型(LLM),高质量的数据源至关重要。通常使用的数据源包括网页、维基百科、书籍以及代码片段等[^2]。为了高效管理和处理这些海量数据,应建立有效的数据管理系统,这可能涉及使用诸如PostgreSQL或MongoDB这样的数据库系统来存储和快速检索用于模型训练的数据[^1]。 #### 去重操作 重复的内容不仅浪费计算资源而且会影响最终模型的质量。因此,在构建语料库之前应当执行严格的去重流程。通过哈希算法或其他相似度匹配的方法可以有效地识别并移除冗余条目。 #### 过滤不相关内容 并非所有的抓取内容都适合用来训练LLMs;一些低质量或是无关紧要的信息可能会干扰学习过程。为此,需设计一套过滤机制去除那些不符合特定标准的文章段落——比如含有过多拼写错误的文字、广告性质强烈的页面或者是版权受限材料等等。 #### 文本规范化处理 在准备阶段还需对原始文本实施一系列标准化措施,例如转换成统一编码格式(UTF-8)、删除HTML标签和其他元字符标记、调整大小写字母的一致性等。此外,针对某些特殊领域还可以考虑加入专门术语表来进行更精细的清理工作。 #### 分词与词汇表创建 考虑到中文等非英文语言的特点,在实际应用中往往需要先进行分词处理再进入后续步骤。采用字节对编码(Byte Pair Encoding,BPE)是一种流行的做法,它可以根据频率统计动态生成子字符串单位从而形成紧凑而高效的表示形式。经过这样一轮加工之后便能建立起规模约为15万词条左右的基础词典供进一步分析利用。 ```python from tokenizers import ByteLevelBPETokenizer tokenizer = ByteLevelBPETokenizer() # 训练 tokenizer 使用自定义参数... ``` #### 加权训练策略 当面对多样的资料集合时,简单混合未必总能得到最优效果。相反地,根据不同类型的贡献程度赋予相应的权重因子有助于提升整体性能表现。具体而言就是让更加重要或者更具代表性的部分获得更高的关注度,以此促进更好的泛化能力发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值