LLM 知识梳理

背景

初步学习了 ML/DL、Transformer、RAG、SFT、RL等,为了更好的记忆、理解以及应对面试,故此博客文章诞生。

不定期更新。

ML/DL

数据集

数据集种类

  • 训练集:用于拟合模型,更新权重参数
  • 验证集:用于超参数调优(如学习率、层数、Dropout 概率)和早期停止(Early Stopping)
  • 测试集:仅用于最终评估模型的泛化能力。它代表了模型在“未见过”的真实数据上的表现

面试陷阱: 如果你在训练过程中根据测试集的表现去调整模型,这就叫 “数据泄露” (Data Leakage),会导致评估结果虚高

数据集配比

  • 万级以下
    • 70-15-15:小规模数据(<10k样本)
    • 80-10-10:中等规模数据(10k-100k)
  • 百万级以上
    • 90-5-5:大规模数据(>100k)
    • 98-1-1:超大规模数据(如LLaMA训练数据)
  • 数据量较小时:交叉验证
    • 当数据量较小时,简单的划分会导致评估结果受随机性影响太大。充分利用每一条数据,评估结果更稳健,减少因数据划分不均匀导致的偏差。
    • K-Fold 交叉验证: 将数据集分为 $K$ 个等份,轮流用其中 1 份做验证,剩下的 $K-1$ 份做训练。最后取 $K$ 次结果的平均值

数据质量与预处理

  • 数据去重
    • 为什么: 如果训练集和测试集有重复(或高度相似),模型会通过“背诵”而非“理解”来获得高分,导致评估失效
    • 技术: MinHash, LSH (局部敏感哈希)
  • 数据不平衡
    • 问题: 某类样本极多(如正常请求),某类极少(如恶意攻击)
    • 对策:
      • 过采样 (Oversampling): 增加少数类样本
      • 欠采样 (Undersampling): 减少多数类样本
      • 代价敏感学习: 在 Loss 函数中加大对少数类预测错误的惩罚

数据泄露

  • 时间泄露: 在时间序列任务中,用“未来”的数据训练模型去预测“过去”。(应使用时间切分法)
  • 特征泄露: 包含了不该有的目标信息。例如预测是否患病,特征中包含“处方药名称”
  • 预处理泄露: 在划分数据集之前做了全局归一化(Normalization)。正确做法: 先分集,用训练集的均值/方差去处理验证集和测试集

过拟合处理

数据层面

核心逻辑:让模型从“死记硬背”转向“举一反三”。

  • 1.1 增加数据量与多样性
    • 原理:数据越多,模型越难记住每个样本,被迫学习通用规律。涵盖不同领域、风格、情绪
  • 1.2 数据增强 (Data Augmentation)
    • 手段回译(Back-Translation)、同义词替换LLM 文本改写、加入微小噪声
  • 1.3 提升质量 (Data Cleaning)
    • 关键点:去除重复(Deduplication)、修正错误标签、过滤低质量垃圾文本

训练层面

核心逻辑:通过惩罚项或时机控制,约束模型复杂度。

  • 2.1 正则化 (Regularization)
    • 权重衰减 (L2/Weight Decay):通过惩罚大权重,让模型变得更“平滑”
    • Dropout:训练时随机“关闭”一部分神经元,强迫模型不依赖单一路径,增强冗余性。
  • 2.2 早停 (Early Stopping)
    • 策略:监控验证集(Val Loss),一旦表现不再提升或开始变差,立即停止训练。防止从“学习”滑向“记忆”
  • 2.3 学习率调度 (LR Scheduling)
    • 方案余弦退火 (Cosine Decay) 或线性衰减。
    • 目的:后期减小步长,使模型稳定在泛化性好的区域(平坦最小值区)

架构层面

核心逻辑:降低自由度,锁死大部分参数。

  • 3.1 参数高效微调 (PEFT/LoRA)
    • 原理冻结 99%+ 的原参数,只训练极少数(<1%)的新增参数(Adapter/Rank 矩阵)
    • 防过拟合优势
      1. 限制自由度:参数极少,模型难以“背诵”微调数据
      2. 保留通用性:原始底座知识被锁死,防止“灾难性遗忘”和针对特定任务的过拟合