从 AdamW 到 RLHF,从 Scaling Law 到 Gradient Checkpoint——
LLM 训练的知识地图,从零到精通。

一、训练基础概念

1.1 自回归语言模型(Autoregressive LM)

LLM 的训练目标:给定一个 token 序列,预测下一个 token。

训练目标(损失函数):   L = - Σ log P(token_i | token_1, ..., token_{i-1})  即:最大化"在前面所有 token 条件下,下一个 token 的概率"。

这就是**因果语言模型(Causal LM)**的目标函数。

1.2 Batch Size(批大小)

每次参数更新时处理的样本数量。

Effective Batch Size = per_device_batch_size × gradient_accumulation_steps × num_devices

举例

per_device_batch_size = 4 gradient_accumulation_steps = 8 num_devices (GPU 数量) = 4  Effective Batch Size = 4 × 8 × 4 = 128

1.3 Gradient Accumulation(梯度累积)

GPU 内存不够大 batch,就多次前向传播累积梯度,再一次性更新参数。

Step 1: 处理 batch 1 → 计算梯度 g1 → 不更新参数(累积) Step 2: 处理 batch 2 → 计算梯度 g2 → 不更新参数(累积) ... Step k: 处理 batch k → 计算梯度 gk → 更新参数: θ = θ - η × (g1+g2+...+gk)/k

为什么要梯度累积?

  • 大 batch 训练更稳定、收敛更快
  • 但 GPU 内存不够放下大 batch
  • 梯度累积 = 时间换空间

1.4 Epoch(轮次)

所有训练数据被完整过一遍,叫一个 epoch。

训练集: 100 GB 文本(约 250 亿 token) 每个 epoch: 模型看过这 250 亿 token 一遍 训练 GPT-3: 约 1 epoch(实际上有些数据重复多次) 训练 Chinchilla: 约 1-2 epochs

数据重复问题:如果数据不够,需要重复多个 epoch,可能导致过拟合

1.5 Token(词元)

文本被切分的最小单位。不同 tokenization 算法切分粒度不同。

"hello world" → BPE tokenization:   ["hello", " world"]  → 2 tokens    "机器学习" → SentencePiece tokenization:   ["▁机器学习"]  → 1 token   或 ["▁", "机器", "学习"]  → 3 tokens(取决于词表)

词表大小(Vocabulary Size):通常 32K-100K。GPT 系列用 50K-100K,LLaMA 用 32K。


二、优化器与学习率

2.1 SGD with Momentum(带动量的随机梯度下降)

SGD的改进版,加入"动量"来加速收敛。

v_t = β·v_{t-1} + g_t          # 动量累积 θ_t = θ_{t-1} - η·v_t          # 参数更新  其中:   v_t: 当前动量   β: 动量衰减系数(通常 0.9)   g_t: 当前梯度   η: 学习率

问题:学习率固定,对不同参数不友好。

2.2 Adam(Adaptive Moment Estimation)⭐

当前最流行的优化器(2014 年提出)。

m_t = β1·m_{t-1} + (1-β1)·g_t    # 一阶动量(均值) v_t = β2·v_{t-1} + (1-β2)·g_t²   # 二阶动量(方差) m̂_t = m_t / (1-β1^t)               # 偏差修正 v̂_t = v_t / (1-β2^t)               # 偏差修正 θ_t = θ_{t-1} - η·m̂_t / (√v̂_t + ε)  # 更新  默认参数: β1=0.9, β2=0.999, ε=1e-8

优点

  • 自适应学习率(每个参数有自己的学习率)
  • 对初始学习率不太敏感
  • 收敛快

缺点

  • 内存占用大(需要存 m 和 v,是模型参数大小的 2 倍)
  • 泛化性能有时不如 SGD with momentum

2.3 AdamW(Adam with Decoupled Weight Decay)⭐⭐

Adam + 解耦权重衰减,目前训练 Transformer 的标准选择

Adam 的问题:权重衰减(Weight Decay)和 L2 正则化在 Adam 中等价性不成立。

Adam (错误的权重衰减):   L2 正则化被吸收进自适应学习率 → 权重衰减效果被扭曲  AdamW (解耦权重衰减):   权重衰减作为独立项,不直接参与梯度计算:   θ_t = θ_{t-1} - η·(m̂_t / (√v̂_t + ε) + λ·θ_{t-1})

效果:更好的泛化性能,更稳定的训练。

📄论文Decoupled Weight Decay Regularization(ICLR 2019)

LLM 训练的标准配置

optimizer: AdamW learning_rate: 3e-4 (小模型) ~ 1e-4 (大模型) beta1: 0.9 beta2: 0.95  (注意:LLM 训练常用 0.95 而非 0.999) weight_decay: 0.1

2.4 LION(Larger Iterative OptimizatioN)⭐

2023 年提出的 AdamW 挑战者,用符号梯度(sign gradient)替代二阶动量。

LION 更新规则:   m_t = β1·m_{t-1} + (1-β1)·g_t    # 动量(同 Adam)   θ_t = θ_{t-1} - η·(sign(m_t) + λ·θ_{t-1})  # 用 sign 而非自适应学习率

效果

  • 内存占用只有 Adam/AdamW 的一半(不需要存二阶动量 v)
  • 训练速度更快(更少 HBM 读写)
  • Vision Transformer 和 LLM 训练效果相当或更好

📄论文Lion: Symbolism for Fast & Memory-Efficient Optimization(ICLR 2023)

2.5 学习率调度(Learning Rate Scheduler)

Warmup(热身)

训练初期用较小的学习率,逐渐增加到预设值。

Linear Warmup (最常用):   lr = learning_rate × (step / warmup_steps)   # warmup 期间   lr = learning_rate × decay_function(step)     # warmup 之后

为什么需要 Warmup?

  • 训练初期,模型参数是随机的,大学习率会导致不稳定
  • Warmup 让模型先"适应"数据分布

Warmup 比例:通常占总训练步数的 0.1-6%。

Cosine Decay(余弦衰减)⭐

lr(step) = min_lr + (max_lr - min_lr) × 0.5 × (1 + cos(π × step / total_steps))

特点:学习率平滑下降,训练后期非常小,有助于精细收敛。

Linear Decay(线性衰减)

lr(step) = max_lr - (max_lr - min_lr) × (step / total_steps)

恒定学习率 + 周期性重启(Cosine with Warm Restarts)

每个 cycle 内用 Cosine Decay cycle 结束后,学习率重启到 max_lr,开始下一个 cycle

📄论文SGDR: Stochastic Gradient Descent with Warm Restarts(ICLR 2017)

2.6 学习率搜索

Learning Rate Range Test

方法: 1. 从很小学习率(如 1e-7)开始 2. 每个 batch 指数级增大学习率 3. 画出 loss  vs 学习率曲线 4. 选择 loss 下降最快的点(通常选曲线最陡处的 1/10)

三、混合精度训练

3.1 FP32、FP16、BF16 对比

类型 指数位 尾数位 动态范围 适用场景
FP32 8 23 最大 传统训练(需要高精度)
FP16 5 10 混合精度训练(NVIDIA GPU)
BF16 8 7 和 FP32 相同 混合精度训练(Google TPU,A100+)

FP16 的问题:动态范围小,容易出现下溢(梯度变成 0)。

BF16 的优势:动态范围和 FP32 一样,不用小心处理数值稳定性。

3.2 Mixed Precision Training(混合精度训练)⭐

核心思想:用 FP16 做大部分计算(快、省内存),用 FP32 做参数更新(精确)。

前向传播: 用 FP16 计算(快 2-3×) 反向传播: 用 FP16 计算梯度(快 2-3×) 参数更新: 用 FP32 权重和 FP32 梯度更新(精确)

关键技术:Loss Scaling

FP16 的梯度容易下溢(变成 0)。解决方法:

1. 计算 loss 后,先乘以一个大的系数(如 1024)→ scaled_loss 2. 反向传播,得到 scaled_gradient(梯度被放大,不会下溢) 3. 更新参数前,把梯度除以同样的系数 → 还原真实梯度

效果:训练速度提升 2-3×,内存占用减半。

📄论文Mixed Precision Training(ICML 2018)

3.3 FP8 训练

更新的精度格式(H100 支持)。

FP8 (E4M3): 4 位指数 + 3 位尾数 → 动态范围比 FP16 小,但比 INT8 好 FP8 (E5M2): 5 位指数 + 2 位尾数 → 动态范围更大  优势:   - 比 FP16 省一半内存   - 计算速度更快(Tensor Core 支持 FP8)

📄论文FP8 Formats for Deep Learning(2022)、FP8-LM(2023)


四、分布式训练

当模型太大,一个 GPU 放不下时,需要分布式训练。

4.1 Data Parallelism(数据并行)⭐

最简单、最常用的分布式训练方式。

每个 GPU:   - 有完整的模型副本   - 处理不同的数据 batch   - 计算梯度    每 N 步(或每个 batch 后):   - 所有 GPU 的梯度进行 All-Reduce(求和或平均)   - 每个 GPU 用相同的梯度更新参数   - → 所有 GPU 的模型参数保持一致

通信开销:每个 batch 需要一次 All-Reduce(传输所有模型参数的梯度)。

适用场景:模型能放进单个 GPU,只是想加速训练。

DDP(Distributed Data Parallel)

PyTorch 的实现,反向传播时重叠梯度同步和参数更新

标准 Data Parallel:   前向 → 后向 → 等待所有 GPU 梯度同步 → 更新参数 → 下一 batch  DDP:   前向 → 后向(同时异步同步梯度)→ 梯度同步完成时,立即更新参数

4.2 FSDP(Fully Sharded Data Parallel)⭐

Meta(FAIR)提出的改进数据并行,把模型参数也分片。

标准 Data Parallel: 每个 GPU 存完整模型副本 → 内存浪费 FSDP: 每个 GPU 只存模型的 1/N(N = GPU 数量)  举例(8 个 GPU):   GPU 0: 存层 1-10 的参数   GPU 1: 存层 11-20 的参数   ...   GPU 7: 存层 71-80 的参数    前向/反向时,通过 All-Gather 临时重建完整参数,计算完立即释放

效果:内存占用降到 1/N,可以训练更大的模型。

📄论文PyTorch FSDP: Experiences on Scaling Fully Sharded Data Parallel(2023)

FSDP vs DDP

特性 DDP FSDP
内存占用 N × 完整模型 完整模型(分片)
通信量 梯度(1×) 梯度(1×)+ 参数(临时)
适用模型大小 单 GPU 能放下 单 GPU 放不下

4.3 Tensor Parallelism(张量并行)⭐

把每一层的参数切分到多个 GPU 上。

以 Linear 层 Y = W·X 为例(W 是 d_out × d_in 矩阵):  GPU 0: 持有 W 的前 1/4 行,计算 Y_0 = W_0·X GPU 1: 持有 W 的第二个 1/4 行,计算 Y_1 = W_1·X GPU 2: 持有 W 的第三个 1/4 行,计算 Y_2 = W_2·X GPU 3: 持有 W 的最后一个 1/4 行,计算 Y_3 = W_3·X  最后 All-Reduce 汇总 Y = [Y_0, Y_1, Y_2, Y_3]

通信开销:每一层需要一次 All-Reduce。

适用场景:单层都放不进单个 GPU(如 GPT-3 175B 的某一层)。

📄论文Efficient Large Scale Language Modeling with Mixtures of Experts(GShard, 2020)、Megatron-LM 系列

4.4 Pipeline Parallelism(流水线并行)

把不同的层分配到不同的 GPU。

80 层的 Transformer:   GPU 0: 层 1-20   GPU 1: 层 21-40   GPU 2: 层 41-60   GPU 3: 层 61-80    数据流向:   batch → GPU0 → GPU1 → GPU2 → GPU3 → loss

问题:流水线气泡(Pipeline Bubble)——GPU 0 处理第一批时,GPU 1/2/3 空闲。

GPipe 解决方案:把 batch 切分为多个 micro-batch,交错执行。

micro-batch 1: [GPU0→GPU1→GPU2→GPU3] micro-batch 2:  [GPU0→GPU1→GPU2→GPU3]  ← 和 micro-batch 1 交错

📄论文GPipe: Efficient Training of Large Scale DNNs(ICML 2019)、PipeDream(OSDI 2019)

4.5 3D Parallelism(三维并行)⭐⭐

同时用数据并行 + 张量并行 + 流水线并行,是目前训练超大模型的标准方案。

以训练 GPT-3 175B 为例:   - 张量并行(TP=8):每层切分到 8 个 GPU   - 流水线并行(PP=16):模型 80 层,每 5 层一个 stage   - 数据并行(DP=64):总共 8×16×64 = 8192 个 GPU!

通信模式

TP: 每层一次 All-Reduce(通信频繁,需要高速 NVLink) PP: 每 stage 一次激活值传输(通信量中等) DP: 每个 batch 一次梯度同步(通信量最大,但频率低)

4.6 ZeRO(Zero Redundancy Optimizer)⭐

DeepSpeed 提出的优化方案,分阶段消除内存冗余。

ZeRO Stage 1: 优化器状态分片(Optimizer States Sharding)   - Adam 的 m, v 分片存储 → 内存节省 4×    ZeRO Stage 2: + 梯度分片(Gradients Sharding)   - 梯度也分片存储 → 再节省 2×    ZeRO Stage 3: + 参数分片(Parameter Sharding)   - 模型参数也分片 → 再节省 N× (N = GPU 数)

效果

标准 Data Parallel (FP16):   模型参数: 2×模型大小   梯度: 2×模型大小   Optimizer States (Adam): 4×模型大小(m, v 都存)   总计: 8×模型大小    ZeRO Stage 3:   总计: ~2×模型大小(理论上可以更小)

📄论文ZeRO: Memory Optimizations Toward Training Trillions Parameter Models(SC 2020)


五、内存优化技巧

5.1 Gradient Checkpointing(梯度检查点)⭐

用计算换内存:反向传播时重新计算激活值,而不是存下来。

标准反向传播:   前向: 计算并保存所有层的激活值 → 占用 O(N) 内存   反向: 用保存的激活值计算梯度  Gradient Checkpoint:   前向: 只保存部分层的激活值(checkpoint)→ 占用 O(√N) 内存   反向: 需要某层激活值时,从最近 checkpoint 重新计算 → 多一次前向计算

效果:内存从 O(N) 降到 O(√N),计算量增加 33%。

适用场景:序列很长、模型很大,内存是瓶颈时。

📄论文Training Deep Nets with Sublinear Memory Cost(2016)

5.2 Activation Checkpointing 策略

全量保存: 保存每一层的激活值 → 内存占用最大,计算量最小 选择性保存: 每隔 K 层保存一个 checkpoint → 内存/计算平衡 完全不保存: 每次都重新计算 → 内存最小,计算量最大(3×)

实践建议

  • Transformer 通常每隔 4-8 层保存一个 checkpoint
  • 如果内存足够,可以保存更多(减少重计算)
  • 如果内存紧张,可以减少保存(增加重计算)

5.3 Flash Attention(训练时也能用)⭐

前面在推理部分介绍了 Flash Attention。它在训练时也能用,且收益更大(因为训练需要保存激活值)。

标准 Attention(训练):   前向: 保存注意力矩阵 S = Q·K^T / √d  → O(N²) 内存   反向: 用保存的 S 计算梯度  Flash Attention(训练):   不保存 S 矩阵!   反向时重新计算 S(用分块技术,仍在 SRAM 中)   → 内存从 O(N²) 降到 O(N)

📄论文FlashAttention: Fast and Memory-Efficient Exact Attention(ICLR 2022)

5.4 参数共享(Parameter Sharing)

思想:不同层共用同一套参数。

标准 Transformer: 每层有独立的参数 参数共享:    - 所有层共用同一套参数(如 ALBERT)   - 或每隔 K 层共享一次

效果

  • 模型参数减少 → 内存占用降低
  • 但表达能力可能下降(需要更多层来补偿)

📄ALBERT:ALBERT: A Lite BERT for Self-supervised Learning of Language Representations(ICLR 2020)

5.5 LoRA(Low-Rank Adaptation)⭐

微调时的参数高效方法,也可以用于训练。

标准微调: 更新所有参数 → 存一份完整模型副本 LoRA: 只训练低秩矩阵,冻结原模型参数  对于权重矩阵 W (d×d):   标准: W' = W + ΔW   LoRA: W' = W + B·A  (B 是 d×r,A 是 r×d,r << d)    训练时只更新 B 和 A(参数减少为 r×(2d),r 通常 8-64)

效果:可训练参数减少到 1-2%,但效果接近全量微调。

📄论文LoRA: Low-Rank Adaptation of Large Language Models(ICLR 2022)


六、数据策略

6.1 数据混合比例(Data Mixing Ratio)

不同来源的数据对模型能力的影响不同。

GPT-3 的数据混合(近似):   - Common Crawl (60%): 网页抓取,量大但质量低   - WebText (22%): 高质量网页   - Books (8%): 书籍语料   - Wikipedia (3%): 百科   - ...

Chinchilla 的启示:数据量和模型大小同等重要。更多高质量数据 > 更大模型。

📄Chinchilla 论文Training Compute-Optimal Large Language Models(2022)

6.2 Curriculum Learning(课程学习)

思想:先学简单的,再学难的。

标准训练: 随机打乱所有数据,均匀采样 课程学习:   - 第一阶段: 用简单数据(如短文本、简单语法)训练   - 第二阶段: 用中等难度数据训练   - 第三阶段: 用困难数据(如长文档、复杂推理)训练

效果:收敛更快,最终性能更好(但设计"难度"指标不容易)。

6.3 Data Augmentation(数据增强)

问题:高质量训练数据不够。

文本数据增强方法

1. 回译(Back-Translation): 翻译成外语,再翻译回来 2. 同义词替换(Synonym Replacement): 随机替换一些词为同义词 3. 随机插入/删除/交换: 轻微改变句子结构 4. 混合精度数据: 用大模型生成合成数据

注意:LLM 预训练通常不用数据增强(因为数据量已经足够大,且增强可能引入噪声)。

6.4 数据质量过滤

核心问题:Common Crawl 等网页抓取数据质量很低(有垃圾、重复、色情内容等)。

过滤方法

1. 语言过滤: 只保留目标语言(如英语)的内容 2. 质量过滤:    - Perplexity 过滤: 用小模型算 perplexity,过滤过高或过低的    - Classifier 过滤: 训练一个质量分类器,过滤低质量内容 3. 去重:    - 文档级去重: 完全相同的文档只保留一个    - 近似去重: 用 MinHash LSH 检测近似重复 4. 个人信息过滤: 移除身份证号、手机号等

📄RefinedWeb(Falcon 训练数据处理):The RefinedWeb Dataset for Falcon LLM(2023)

6.5 重复数据的影响

重要发现:训练数据中的重复内容会损害模型性能。

实验(GPT-2 级别):   - 不重复: validation loss = 3.1   - 重复 4 次: validation loss = 3.3  (变差)   - 重复 16 次: validation loss = 3.8  (变得更差)

📄论文Deduplicating Training Data Makes Language Models Better(2021)


七、正则化与稳定性

7.1 Weight Decay(权重衰减)⭐

L2 正则化的另一种形式,防止参数变得过大。

损失函数加入惩罚项:   L_total = L_CE + λ·||θ||²  (L2 正则化)    等价地,每次更新时:   θ = θ - η·∇L - η·λ·θ  (Weight Decay)

AdamW 的解耦权重衰减:见第二节。

LLM 训练的典型配置weight_decay = 0.1

7.2 Dropout

训练时随机"丢弃"一部分神经元,防止过拟合。

训练时:   每个神经元以概率 p 被丢弃(输出设为 0)    推理时:   所有神经元都激活,但输出乘以 (1-p)(保持期望一致)

Transformer 中用得少:因为模型很大,参数足够多,不容易过拟合。但有些模型(如 GPT-2)仍然用。

7.3 Label Smoothing(标签平滑)

防止模型对预测"太自信"

标准 one-hot 标签:   y = [0, 0, 1, 0, ...]  (正确类别为 1,其余为 0)    Label Smoothing (ε=0.1):   y' = [0.1/(K-1), 0.1/(K-1), 0.9, 0.1/(K-1), ...]   (正确类别 0.9,其余类别平分 0.1)

效果:防止模型过度自信,提升泛化性能。

LLM 训练中:用得不多(因为词表很大,标签天然稀疏)。

7.4 Gradient Clipping(梯度裁剪)⭐

防止梯度爆炸,对 RNN 和 Transformer 训练都很重要。

方法 1: 按范数裁剪   if ||g|| > threshold:     g = g × threshold / ||g||      方法 2: 按值裁剪   g = clip(g, -threshold, +threshold)

LLM 训练的典型配置gradient_clip_norm = 1.0

7.5 Batch Normalization vs Layer Normalization

Batch Norm:对 batch 维度归一化(CNN 常用)

对于一个卷积层的输出 X (N×C×H×W):   Batch Norm: 在 N 维度(batch)上归一化每个通道

问题:batch 大小变化时(如训练 vs 推理),统计量不一致。

Layer Norm:对特征维度归一化(Transformer 用这个)⭐

对于一个序列 X (N×L×D):   Layer Norm: 在 D 维度(特征)上归一化每个样本、每个位置

Pre-Norm vs Post-Norm

Post-Norm (原始 Transformer):   y = LayerNorm(f(x) + x)  (先残差,再 Norm)    Pre-Norm (现在更常用):   y = f(LayerNorm(x)) + x  (先 Norm,再残差)

Pre-Norm 的优势:训练更稳定,梯度更容易回传(残差连接没有被 LayerNorm 阻断)。


八、Scaling Law(缩放定律)

8.1 什么是 Scaling Law?

核心发现:模型的性能(用验证集 loss 衡量)和模型的规模(参数量、数据量、计算量)呈现幂律关系

OpenAI 的 Scaling Law (2020):   L(N) = (N_c / N)^α + L_∞  (N = 参数量)   L(D) = (D_c / D)^β + L_∞  (D = 数据量)   L(C) = (C_c / C)^γ + L_∞  (C = 计算量)    其中:   L(N): 验证集 loss   N: 模型参数量   N_c, α, L_∞: 拟合得到的常数

重要结论

  • loss 随 N、D、C 增加平滑下降(没有突然的"相变")
  • 三个维度(N、D、C)可以相互替代(增加任意一个都能降低 loss)

📄论文Scaling Laws for Neural Language Models(OpenAI, 2020)

8.2 Chinchilla 的修正 ⭐⭐

核心发现:之前的模型(GPT-3、Gopher)都训练不足(数据量不够)。

OpenAI GPT-3 (175B): 训练了 ~300B tokens DeepMind Gopher (280B): 训练了 ~300B tokens Chinchilla (70B): 训练了 ~1.4T tokens  ← 数据量是 GPT-3 的 4.7 倍!  结果: Chinchilla (70B) 性能超过 Gopher (280B)!

Chinchilla 的 Scaling Law

在给定计算预算 C 下,最优的 N 和 D 满足:

N_opt ∝ C^0.5 D_opt ∝ C^0.5

即:模型大小和数据量应该等比例缩放(每翻倍模型大小,数据量也翻倍)。

📄论文Training Compute-Optimal Large Language Models(DeepMind, 2022)

8.3 其他 Scaling Law 研究

Kaplan et al. (OpenAI, 2020): 早期 Scaling Law,主张"大模型,少数据" Chinchilla (DeepMind, 2022): 修正为"模型和数据等比例" LLaMA (Meta, 2023): 证实 Chinchilla 结论,用更多数据训练更小模型

九、对齐训练(Alignment)

预训练后的模型只是"续写机器",需要**对齐(Alignment)**才能成为有用的助手。

9.1 Supervised Fine-Tuning(SFT,有监督微调)⭐

用高质量对话数据微调模型,让它学会"助手行为"。

数据格式:   {"instruction": "解释量子力学", "response": "量子力学是..."}   {"instruction": "写一首诗", "response": "..."}    训练方法:   和预训练一样,用 Causal LM 目标   但数据格式改为对话格式(加特殊 token 分隔角色)

典型数据量:1万 - 10万条高质量对话(比预训练数据少得多)。

9.2 RLHF(Reinforcement Learning from Human Feedback)⭐⭐

用人类反馈训练奖励模型,再用 RL 优化 LLM

三个阶段:

阶段 1:Supervised Fine-Tuning(SFT)

  • 用高质量数据微调,得到 SFT 模型

阶段 2:训练 Reward Model(RM)

数据格式:    prompt: "解释量子力学"   候选回答 A: "量子力学是..."  (人类评分: 9/10)   候选回答 B: "我不知道"      (人类评分: 3/10)    训练目标:   Reward(A) > Reward(B) + margin    用大量人类偏好数据训练一个 Reward Model

阶段 3:RL 优化

用 PPO (Proximal Policy Optimization) 算法:   1. 模型生成回答   2. Reward Model 给回答打分   3. 用 PPO 更新模型参数,最大化 Reward   4. 同时加 KL 散度惩罚(防止模型偏离原始 SFT 模型太远)

📄论文Training Language Models to Follow Instructions with Human Feedback(InstructGPT, 2022)

9.3 DPO(Direct Preference Optimization)⭐⭐

RLHF 的简化版,不需要训练 Reward Model,不需要 RL。

RLHF 的问题:   - 需要训练 Reward Model(额外成本)   - RL 训练不稳定、超参数敏感    DPO 的解决方案:   直接用偏好数据优化模型!    损失函数:   L = - log σ(β·log (π_θ(y_w|x) / π_ref(y_w|x))               - β·log (π_θ(y_l|x) / π_ref(y_l|x)))      其中:     y_w: 人类偏好的回答(win)     y_l: 人类不偏好的回答(lose)     π_ref: 参考模型(冻结的 SFT 模型)     β: 温度参数

效果:和 RLHF 效果相当,但简单得多(只需要 SFT + 一次偏好数据微调)。

📄论文Direct Preference Optimization: Your Language Model is Secretly a Reward Model(NeurIPS 2023)

9.4 Constitutional AI(宪法 AI)

Anthropic 提出的 RLHF 替代方案,用 AI 反馈替代人类反馈。

RLHF: 人类标注偏好 → 训练 Reward Model → RL 优化 Constitutional AI: AI 标注偏好 → 训练 Reward Model → RL 优化  步骤:   1. SFT 模型生成多个回答   2. 用"宪法"(一套规则,如"不要有害内容")让 AI 自己判断哪个回答更好   3. 用 AI 偏好数据训练 Reward Model   4. RL 优化

📄论文Constitutional AI: Harmlessness from AI Supervision(Anthropic, 2022)


十、评估与调优

10.1 评估指标

Perplexity(困惑度)

PPL = exp(L)  (L = cross-entropy loss)

含义:平均每个 token 的"分支系数"。PPL = 10 意味着"下一个 token 有 10 个合理选择"。

局限性:PPL 低不代表模型"更有用"(可能只是记住了训练数据)。

下游任务评估

1. QA 任务: Natural Questions, TriviaQA 2. 常识推理: HellaSwag, WinoGrande 3. 数学推理: GSM8K, MATH 4. 代码生成: HumanEval, MBPP 5. 综合评估: MMLU (57 个学科的多选题)

10.2 超参数搜索

关键超参数

1. 学习率 (Learning Rate): 最重要! 2. Batch Size: 影响训练稳定性和内存 3. Weight Decay: 影响泛化 4. Warmup Steps: 影响训练稳定性 5. Dropout Rate: 影响过拟合

搜索方法

Grid Search: 穷举所有组合(计算量大,不实用) Random Search: 随机采样(比 Grid Search 高效) Bayesian Optimization: 用高斯过程建模,智能采样(如 Hyperopt)

10.3 损失函数曲线分析

训练好的模型,损失曲线应该:   - 训练初期: 快速下降   - 训练中后期: 平滑下降,趋于收敛   - 训练结束: 训练和验证 loss 都收敛    异常曲线:   - 训练 loss 下降,验证 loss 上升 → 过拟合   - 训练 loss 不下降 → 学习率太小 or 梯度消失   - 训练 loss 震荡 → 学习率太大 or batch size 太小

十一、训练术语速查表

按类别检索

🔧 优化器

Adam | AdamW | LION | SGD with Momentum | AdaGrad | RMSProp

📈 学习率调度

Warmup | Cosine Decay | Linear Decay | Warm Restarts | One-Cycle Policy

💾 混合精度

FP16 | BF16 | FP8 | Loss Scaling | Mixed Precision Training

🌐 分布式训练

Data Parallelism | DDP | FSDP | Tensor Parallelism | Pipeline Parallelism | 3D Parallelism | ZeRO

💡 内存优化

Gradient Checkpointing | Activation Checkpointing | Flash Attention | Parameter Sharing | LoRA

📂 数据策略

Data Mixing Ratio | Curriculum Learning | Data Augmentation | Data Quality Filtering | Deduplication

🛡️ 正则化与稳定性

Weight Decay | Dropout | Label Smoothing | Gradient Clipping | Layer Norm | Pre-Norm | Post-Norm

📏 Scaling Law

Kaplan Scaling Law | Chinchilla Scaling Law | Compute-Optimal Training

🎯 对齐训练

SFT | RLHF | PPO | Reward Model | DPO | Constitutional AI

📊 评估

Perplexity | MMLU | GSM8K | HumanEval | HellaSwag


结语

LLM 训练是一个系统工程,涉及:

优化器选择   → AdamW(标准)/ LION(新潮) 学习率调度   → Warmup + Cosine Decay 混合精度     → FP16/BF16 + Loss Scaling 分布式训练   → FSDP(中等模型)/ 3D Parallelism(超大模型) 内存优化     → Gradient Checkpointing + Flash Attention 数据策略     → 高质量 + 充分去重 + Chinchilla 比例 正则化       → Weight Decay + Gradient Clipping + Pre-Norm Scaling Law  → 遵循 Chinchilla(模型 : 数据 = 1 : 20) 对齐训练     → SFT → DPO(比 RLHF 简单)

每个技巧都是为了解决一个具体问题。理解了问题,技巧就不再是黑魔法,而是工程实践中的有力工具。

学AI大模型的正确顺序,千万不要搞错了

🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!

有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!

就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

在这里插入图片描述

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇

学习路线:

✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经

以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!

我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐