大语言模型(LLM)理论导论
本文系统梳理大语言模型的核心理论与专业术语,覆盖从文本处理、注意力机制到模型训练与微调的完整技术链路,适合作为深入学习 LLM 的理论地图。
一、什么是大语言模型?
LLM(Large Language Model,大语言模型) 是当前人工智能领域的核心技术之一。它是基于海量文本数据训练的深度神经网络模型,能够理解、生成并推理自然语言。
现代 LLM 几乎都基于 Transformer 架构,其核心组件是 注意力机制(Attention Mechanism),使模型在逐词生成输出时,能够根据需要选择性地关注输入序列的不同部分。
两大代表性架构
| 模型 | 全称 | 训练方式 | 擅长任务 |
|---|---|---|---|
| BERT | Bidirectional Encoder Representations from Transformers | 掩码语言模型(MLM),双向上下文 | 文本理解、分类、问答 |
| GPT | Generative Pretrained Transformer | 自回归语言模型(AR),单向续写 | 文本生成、指令跟随、对话 |
- BERT 的核心是"掩码补充":训练时随机遮住部分词,让模型根据左右两侧的全部上下文去预测被遮盖的词,实现深度双向语义理解。
- GPT 的核心是"自回归生成":根据从左到右的单向上下文逐词预测下一个词,整个句子是"一个词一个词顺次生成"的。GPT 架构仅使用原始 Transformer 的解码器部分。
二、构建 LLM 的三个阶段
阶段一:实现模型架构 + 准备数据
↓
阶段二:预训练(在海量无标注文本上训练,获得基础模型)
↓
阶段三:微调(在特定标注数据上微调,得到助手或分类器)三、文本处理与分词
3.1 词嵌入(Word Embedding)
深度神经网络无法直接处理原始文本——神经网络是"只认连续数字的数学机器",必须把离散的符号转换为连续数值向量,才能进行矩阵运算和梯度下降训练。
这个过程叫做 词嵌入(Word Embedding),生成的向量称为 词向量 / 嵌入向量。
核心特性:
- 连续性:向量里的每个值都是浮点数,支持所有数学运算。
- 语义关联性:语义相近的 token,对应向量在数学空间中的"距离"也更近。例如,"猫"和"狗"的向量几乎重合,"汽车"的向量则离得很远。
早期方法 word2vec: 通过训练神经网络预测目标词的上下文(或反之),生成词嵌入。核心思想是"出现在相似上下文中的词往往具有相似含义"。
3.2 嵌入维度
词向量的维度(长度)决定了能捕捉的语义精细程度:
| 模型 | 嵌入维度 |
|---|---|
| GPT-2 最小版(1.17亿参数) | 768 维 |
| GPT-3 最大版(1750亿参数) | 12,288 维 |
类比:把词向量比作对一个人的描述档案,维度就是档案的描述项数量。维度越高,能捕捉的特征越精细,但计算开销也越大。
3.3 嵌入粒度
嵌入粒度是指将文本切分成多大的基本单位来生成嵌入向量,本质是"信息细节保留"与"资源消耗"的权衡:
- 词元(Token)级别 — 最细、最通用、能力最强,但资源消耗最高
- 句子级别
- 段落级别
- 文档级别
Token 级别是所有粒度的基础,GPT 系列模型默认采用此粒度。
3.4 分词(Tokenization)
分词是生成嵌入向量的必需前置步骤,将原始文本切分为词元(Token)的过程。
Token 的定义
词元(Token)是模型读取文本的基本单位。数据集中的词元数量大致等同于文本中的单词和标点符号的数量。
3.5 BPE(字节对编码)
BPE(Byte Pair Encoding,字节对编码) 是 GPT、LLaMA 等主流大模型使用的核心分词算法。
原理:
- 先把文本拆成最小字符单位
- 反复统计并合并高频相邻字符对,生成"子词"
- 最终词汇表 = 单个字符 + 各种子词 + 高频完整单词
子词(Subword)的价值: 在"字符的低覆盖、多 Token"和"单词的高覆盖、少 Token"之间取得平衡——让模型能处理任何新词,同时不把文本拆成密密麻麻的单个字符,几乎完全消除 <|UNK|>(未知词元)的出现。
OpenAI 官方实现:tiktoken,用 Rust 实现了高效的 BPE 算法。
import tiktoken
tokenizer = tiktoken.get_encoding("gpt2")
integers = tokenizer.encode("Hello, world! <|endoftext|>", allowed_special={"<|endoftext|>"})
strings = tokenizer.decode(integers)3.6 特殊词元
| 词元 | 作用 |
|---|---|
<|unk|> | 未知词元,处理训练集中未见过的词 |
<|endoftext|> | 文本结束词元,分隔不相关的文本来源 |
[BOS] | 序列开始标记 |
[EOS] | 序列结束标记 |
[PAD] | 填充词元,使同批次文本对齐为相同长度 |
3.7 词元 ID
分词完成后,需将 Token(字符串)映射为整数 ID,再转换为嵌入向量:
原始文本 → 分词 → Token → 词元ID → 嵌入向量 → 神经网络分词器实现两个核心方法:
encode(text):文本 → 词元ID 列表decode(ids):词元ID 列表 → 文本
3.8 滑动窗口采样
滑动窗口(Sliding Window) 是从训练数据中生成输入-目标对的方法。
模型的训练目标是:给定一段输入文本,预测下一个词。具体做法是:用固定长度的窗口在 Token 序列上滑动,每次以窗口内容作为输入,窗口后的下一个 Token 作为预测目标。
输入: [and] → 目标: established
输入: [and, established] → 目标: himself
输入: [and, established, himself] → 目标: in步幅(stride) 控制每次窗口位移的距离。步幅越小,生成的样本越多,数据重叠越高;步幅越大,效率越高但覆盖越稀疏。
3.9 PyTorch 张量与数据加载
PyTorch 张量(Tensor) 是深度学习的核心数据结构,本质是支持 GPU 加速的多维数组。LLM 只能处理张量格式的输入。
数据流水线中两个关键类:
- Dataset:数据仓库管理员,负责单条数据的预处理(分词、转张量等)。
- DataLoader:数据搬运工,负责批量提取样本,提供打乱顺序、多进程加载、批量拼接等优化功能。
3.10 位置嵌入
纯粹的词嵌入不包含位置信息,但"猫追狗"和"狗追猫"含义截然不同。位置嵌入(Positional Embedding) 用于为每个 Token 附加其在序列中的位置信息,与词嵌入相加后共同作为模型输入。
- 绝对位置嵌入:为每个位置编号分配固定的可学习向量(GPT 系列采用)。
- 相对位置嵌入:编码 Token 之间的相对距离,泛化能力更强。
四、注意力机制
4.1 自注意力(Self-Attention)
自注意力机制 是 Transformer 的核心组件,允许模型衡量序列中不同词元之间的相对重要性。
经典案例:"我的手机坏了,我要买苹果。"
- 没有自注意力时:模型不知道"苹果"与"手机"有关联,可能翻译为 apple。
- 有了自注意力:"手机"和"苹果"建立了关联,模型很可能翻译为 iPhone。
自注意力是特征加工环节,不是生成预测环节——它的作用是为每个 Token 生成融合全序列上下文信息的表示。
4.2 Q / K / V 机制
自注意力通过三个可训练权重矩阵将输入变换为三组向量:
| 符号 | 名称 | 作用类比 |
|---|---|---|
| Q(Query,查询) | 查询向量 | 我想找什么? |
| K(Key,键) | 键向量 | 我能提供什么信息? |
| V(Value,值) | 值向量 | 我实际包含的内容 |
计算公式(缩放点积注意力):
除以
4.3 因果注意力(Causal / Masked Attention)
用于自回归生成的关键设计:在训练时,模型预测第
实现方式:在注意力权重矩阵上叠加一个上三角掩码,将未来位置的权重置为
4.4 多头注意力(Multi-Head Attention)
多头注意力 将 Q/K/V 投影到多个独立的子空间,并行计算多组注意力,最后拼接结果。
- 不同的"头"可以关注不同类型的语义关系(语法关系、指代关系、主题关系等)
- GPT-2(124M 参数版)使用 12 个注意力头,每头维度 = 768 ÷ 12 = 64 维
张量维度表示:[B, T, D] = 批次大小 × 序列长度 × 特征维度
4.5 Dropout
Dropout 是一种正则化技术:训练时随机将一部分神经元输出置为 0("丢弃"),迫使模型不能依赖任何单一神经元,从而防止过拟合,提升泛化能力。推理时 Dropout 关闭,所有神经元正常工作。
五、GPT 模型架构
5.1 Transformer 块
GPT 的每个 Transformer 块由以下组件串联组成,且输入输出形状始终保持不变:
输入 x
│
├─ LayerNorm → 多头注意力 → Dropout → + x(残差连接)
│
└─ LayerNorm → 前馈网络 → Dropout → + x(残差连接)
│
输出(与输入相同形状)5.2 层归一化(Layer Normalization)
LayerNorm 将每个样本的特征归一化为均值为 0、方差为 1 的分布,包含可学习的缩放(scale)和偏移(shift)参数,作用于特征维度(最后一维)。
与 BatchNorm 不同,LayerNorm 在每个独立样本上计算,不受批次大小影响,更适合序列模型。
5.3 GELU 激活函数
GELU(Gaussian Error Linear Unit) 是 GPT 系列的激活函数,比 ReLU 更平滑,负数区域保留微小梯度,有助于深层网络的训练稳定性。
5.4 前馈网络(FeedForward)
每个 Transformer 块包含一个两层全连接网络:
768 → (升维 × 4) → 3072 → GELU → 3072 → (降维) → 768升维的目的是让模型在更高维度的特征空间中捕捉细粒度的非线性特征。
5.5 残差连接(Shortcut Connection)
残差连接(快捷连接) 将层的输出与原始输入直接相加。这一设计解决了深层网络训练中梯度消失问题——梯度可以通过加法"高速公路"直接流向浅层,是深层 Transformer 能够训练的关键。
5.6 GPT-2(124M)配置参数
| 参数 | 值 |
|---|---|
| 词汇表大小(vocab_size) | 50,257 |
| 上下文长度(context_length) | 1,024 |
| 嵌入维度(emb_dim) | 768 |
| 注意力头数(n_heads) | 12 |
| Transformer 层数(n_layers) | 12 |
5.7 Logits 与权重共享
- Logits:模型最后输出的未归一化预测分数,经 Softmax 后得到各 Token 的概率分布。
- 权重共享(Weight Tying):GPT 的输出层(从隐向量预测词汇)复用词嵌入层的权重矩阵,将参数量从约 1.63 亿压缩至约 1.24 亿。
六、预训练
6.1 自监督学习
LLM 的预训练采用自监督学习(Self-Supervised Learning, SSL) 范式——无需人工标注,从数据本身自动构造监督信号(伪标签):
- 以预测下一个词(Next Token Prediction)为前置任务
- 从海量无标注文本中学习语言的语法、语义、世界知识等通用底层特征
- 是模型所有核心能力(理解、生成、零/少样本推理)的根源
预训练完成的模型称为基础模型(Foundation Model)。
6.2 训练目标:交叉熵损失
交叉熵损失衡量模型预测分布与真实分布之间的差异,即正确 Token 对应预测概率的负对数均值。损失越小,模型预测越准确。
6.3 困惑度(Perplexity)
困惑度是损失的指数形式,直觉上表示模型"平均要在多少个候选词中进行猜测"。PPL 越低,模型的语言建模能力越强。
6.4 训练循环
# 标准 PyTorch 训练循环
optimizer.zero_grad() # 清空梯度
logits = model(inputs) # 前向传播
loss = cross_entropy(logits, targets) # 计算损失
loss.backward() # 反向传播(计算梯度)
optimizer.step() # 更新参数AdamW 优化器:Adam 的改进变体,通过解耦权重衰减(Weight Decay)来更好地防止过拟合,是 LLM 训练的标准选择。
6.5 反向传播
反向传播(Backpropagation) 是神经网络训练的核心算法:基于链式法则,从损失函数出发,逐层向前计算每个参数对损失的梯度(偏导数),再由优化器沿梯度方向更新参数(梯度下降)。
6.6 文本生成策略
预训练完成后,模型可以用以下策略生成文本:
| 策略 | 描述 | 特点 |
|---|---|---|
| 贪心解码(Greedy Decoding) | 每步选概率最高的 Token(argmax) | 确定性强,但缺乏多样性 |
| 温度缩放(Temperature Scaling) | 将 logits 除以温度 T 再采样;T < 1 更确定,T > 1 更随机 | 控制输出多样性 |
| Top-k 采样 | 只从概率最高的 k 个 Token 中采样 | 避免采样到低概率噪声 |
七、微调
7.1 微调的意义
在"自定义数据集"上进行微调的 LLM,能够在特定任务上超越通用大语言模型。
预训练的基础模型掌握了通用语言知识,但要完成特定任务(客服、代码生成、医疗问答等),需要在更小规模的标注数据上进行微调(Fine-tuning)。
7.2 分类微调
将 GPT 的输出层替换为一个小型分类头(如二分类的 Linear(768, 2)),以最后一个 Token 的隐向量作为整个序列的表示,训练分类任务。
典型做法:
- 冻结大部分 Transformer 层,只解冻最后几层
- 替换输出层为分类头
- 在标注数据上训练(如垃圾邮件分类,准确率可达约 97%)
7.3 指令微调(SFT)
指令微调(Supervised Fine-Tuning, SFT) 让模型学会理解和遵循自然语言指令,是从基础模型到对话助手的关键一步。
常用 Alpaca 格式:
### Instruction:
将下面的英文翻译成中文
### Input:
Hello, how are you?
### Response:
你好,你怎么样?训练时使用 -100 掩码填充位置,使填充 Token 不参与损失计算,只对 Response 部分计算损失。
7.4 LoRA(低秩适应)
LoRA(Low-Rank Adaptation) 是一种参数高效微调(PEFT)方法,避免了全量微调所有参数的高昂开销。
核心思想: 不直接修改原始权重矩阵
优势:
- 可训练参数量大幅减少(可降低至原始的 0.1% 以下)
- 原始权重不变,可随时切换不同任务的 LoRA 权重
- 推理时可将
合并回 ,无额外推理开销
八、核心术语速查表
| 术语 | 英文 | 简释 |
|---|---|---|
| 大语言模型 | Large Language Model (LLM) | 基于海量文本预训练的大规模语言模型 |
| 词嵌入 | Word Embedding | 将 Token 映射为连续数值向量的技术 |
| 词向量 / 嵌入向量 | Word Vector / Embedding Vector | 词嵌入生成的数值向量 |
| 词元 | Token | 模型读取文本的基本单位(字/词/子词) |
| 分词 | Tokenization | 将文本切分为 Token 的过程 |
| 字节对编码 | Byte Pair Encoding (BPE) | 主流分词算法,通过合并高频字符对生成子词 |
| 词汇表 | Vocabulary | Token 到整数 ID 的映射表 |
| 子词 | Subword | BPE 生成的介于字符和完整词之间的分词单位 |
| 位置嵌入 | Positional Embedding | 为 Token 附加位置信息的向量 |
| 自注意力 | Self-Attention | 序列内部 Token 互相关联计算的注意力机制 |
| 多头注意力 | Multi-Head Attention | 并行多组注意力,捕捉不同子空间特征 |
| 因果注意力 | Causal Attention | 屏蔽未来 Token 的掩码注意力,用于自回归生成 |
| Q / K / V | Query / Key / Value | 注意力机制的三组核心向量 |
| Transformer 块 | Transformer Block | 注意力 + 前馈 + 归一化 + 残差的基本单元 |
| 层归一化 | Layer Normalization | 对特征维度归一化,稳定训练过程 |
| GELU | Gaussian Error Linear Unit | 平滑的非线性激活函数 |
| 前馈网络 | Feed-Forward Network | Transformer 块中的两层全连接网络 |
| 残差连接 | Residual Connection | output = layer(x) + x,缓解梯度消失 |
| 自监督学习 | Self-Supervised Learning (SSL) | 从数据本身构造监督信号,无需人工标注 |
| 预训练 | Pre-training | 在海量无标注文本上的第一阶段训练 |
| 基础模型 | Foundation Model | 预训练完成后的通用 LLM |
| 微调 | Fine-tuning | 在特定任务数据上的第二阶段训练 |
| 指令微调 | Supervised Fine-Tuning (SFT) | 用指令-回复对微调,使模型遵循指令 |
| LoRA | Low-Rank Adaptation | 低秩旁路实现的参数高效微调方法 |
| 交叉熵损失 | Cross-Entropy Loss | 衡量预测分布与真实分布差异的损失函数 |
| 困惑度 | Perplexity (PPL) | e^Loss,衡量语言模型的预测不确定性 |
| 反向传播 | Backpropagation | 链式法则计算梯度的训练算法 |
| 梯度消失 | Vanishing Gradient | 深层网络中梯度趋近于 0 导致无法训练的问题 |
| Dropout | Dropout | 训练时随机丢弃神经元,防止过拟合 |
| 温度缩放 | Temperature Scaling | 控制生成多样性的 logits 缩放技术 |
| Top-k 采样 | Top-k Sampling | 只从概率最高的 k 个 Token 中采样 |
| 贪心解码 | Greedy Decoding | 每步选概率最高 Token 的确定性解码策略 |
| Logits | Logits | 模型输出的未归一化原始预测分数 |
| 权重共享 | Weight Tying | 输出层复用词嵌入层权重,减少参数量 |
| 零样本学习 | Zero-shot Learning | 不提供示例直接泛化到未见任务 |
| 少样本学习 | Few-shot Learning | 仅提供少量示例进行学习和推理 |
| 自回归生成 | Autoregressive Generation | 将已生成的输出作为下一步输入,逐词生成文本 |
本文基于《大模型学习(LLM)》与《大模型总纲》整理,涵盖 LLM 从文本处理到微调的核心理论知识体系。