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 矩阵)
- 防过拟合优势:
- 限制自由度:参数极少,模型难以“背诵”微调数据
- 保留通用性:原始底座知识被锁死,防止“灾难性遗忘”和针对特定任务的过拟合