大模型训练原理详解
1. 引言
在自然语言处理(NLP)领域,尤其是大语言模型(LLM)如 GPT 系列的发展中,训练方式的选择至关重要。许多开发者常困惑于大模型究竟采用有监督学习还是无监督学习,以及数据标签的来源。事实上,主流大模型的预训练阶段主要采用自监督学习(Self-Supervised Learning)模式。
2. 自监督学习 vs 有监督学习
2.1 为什么选择自监督学习?
传统的有监督学习需要大量人工标注的数据,成本高昂且难以规模化。互联网上的文本数据虽然海量,但几乎全部是无标签的。如果强行进行人工标注,不仅效率低下,而且对于长文本或复杂语境,标注标准也难以统一。
因此,大模型利用数据本身的结构生成'伪标签',无需人工干预即可进行训练。这种模式被称为自监督学习,它是无监督学习的一种特殊形式。
2.2 常见的自监督任务
在大模型训练中,主要有两种经典的自监督任务范式:
2.2.1 掩码语言模型 (Masked Language Model, MLM)
- 代表模型:BERT
- 原理:随机掩盖输入序列中的部分 Token,要求模型根据上下文预测被掩盖的词。
- 特点:双向注意力机制,能同时利用左右上下文信息,适合理解类任务。
2.2.2 因果语言模型 (Causal Language Model, CLM)
- 代表模型:GPT 系列
- 原理:按顺序预测下一个词,即给定前文 $x_1, x_2, ..., x_t$,预测 $x_{t+1}$。
- 特点:单向注意力机制,只能看到过去的信息,适合生成类任务。
3. GPT 模型的训练过程
以 GPT 为代表的因果语言模型,其核心目标是最大化下一个词出现的概率。以下是详细的训练流程解析。
3.1 数据预处理与分词
原始文本不能直接输入神经网络,需经过以下步骤:
- Tokenization:将文本切分为子词单元(Subword Tokens)。例如使用 BPE 或 WordPiece 算法。
- 词嵌入 (Embedding):将每个 Token ID 映射为高维稠密向量,捕捉语义信息。
- 位置编码 (Positional Encoding):由于 Transformer 结构本身不具备顺序感知能力,需加入位置编码以区分 Token 的顺序。
3.2 模型架构与计算
输入序列经过 Embedding 层和 Positional Encoding 后,进入 Transformer Encoder/Decoder 堆叠层。在 GPT 中,通常使用 Decoder-only 架构。
# 简化的 GPT 训练逻辑伪代码
import torch
import torch.nn as nn
class GPTTrainer:
def __init__(self, model, optimizer, loss_fn):
self.model = model
self.optimizer = optimizer
.loss_fn = loss_fn
():
outputs = .model(input_ids)
shift_logits = outputs.logits[..., :-, :]
shift_labels = target_ids[..., :]
loss = .loss_fn(shift_logits.view(-, shift_logits.size(-)),
shift_labels.view(-))
.optimizer.zero_grad()
loss.backward()
.optimizer.step()
loss.item()


