注:以下内容摘自社区共建开源项目AIGC时代算法工程师面试秘籍【三年面试五年模拟】




完整学习请关注:https://github.com/WeThinkIn/AIGC-Interview-Book
1.3 模型训练与优化
本章围绕深度学习模型训练体系,系统梳理 AIGC 算法工程师面试中的高频经典问题,按"数据---正则化---优化---训练实操---稳定性---进阶范式---评估"的完整链路展开。内容从数据标注、噪声标签、数据增强、清洗与长尾处理切入,讲清 L1/L2、Dropout、早停、标签平滑、权重衰减与 AdamW 解耦等正则手段;剖析学习率衰减与 warmup 调度、SGD 到 AdamW 的优化器脉络与选型;覆盖数据集划分、Batch Size、超参调优等训练实操,以及梯度裁剪/累积、混合精度、EMA、权重初始化、归一化层对比、激活函数选型、分布式并行与 ZeRO/FSDP 等稳定性技术;再延伸到迁移学习、预训练+微调、对比学习、参数高效微调 PEFT 等进阶范式,最后落到交叉验证、精确率/召回率/F1、ROC/AUC、偏差-方差与 AIGC 生成评估。兼顾传统深度学习经典理论与大模型前沿,每题附难度评分、原理公式与工程落地经验,作为可背诵、可深究的备考资料。
1.3.1 数据工程基础
[1. 模型训练中数据预处理与质量优化的核心方法](#1. 模型训练中数据预处理与质量优化的核心方法)
- 面试问题:数据标注常见类型及适用任务有哪些?标注质量如何评估?
- [面试问题:什么是噪声标签(Noisy Labels)?深度学习场景下有哪些成熟的处理方案?](#面试问题:什么是噪声标签(Noisy Labels)?深度学习场景下有哪些成熟的处理方案?)
- 面试问题:常用的数据增强方式有哪些?CV/NLP/多模态生成任务分别有哪些专属方法?
- 面试问题:深度学习训练前的数据清洗有哪些核心方法?核心处理逻辑是什么?
- 面试问题:什么是数据长尾分布?可以从哪些层面解决数据长尾问题?
1.3.2 正则化基础
[1. 正则化的定义、分类及常用方法](#1. 正则化的定义、分类及常用方法)
- 面试问题:什么是正则化?它从原理上为什么能提升模型泛化能力?显式正则化和隐式正则化有什么区别?
- 面试问题:介绍一下早停(EarlyStopping)的定义、原理、作用及实操注意事项
- [面试问题:介绍一下 Dropout 及其核心变种(DropConnect、DropBlock、DropPath)的原理与适用场景](#面试问题:介绍一下 Dropout 及其核心变种(DropConnect、DropBlock、DropPath)的原理与适用场景)
- [面试问题:介绍一下 L1 正则、L2 正则,为什么 L1 能产生稀疏性,L2 不会?](#面试问题:介绍一下 L1 正则、L2 正则,为什么 L1 能产生稀疏性,L2 不会?)
- [面试问题:标签平滑(Label Smoothing)的原理及作用?在大模型/生成模型训练中有什么注意事项?](#面试问题:标签平滑(Label Smoothing)的原理及作用?在大模型/生成模型训练中有什么注意事项?)
- [面试问题:权重衰减(Weight Decay)与 L2 正则的关系是什么?为什么 Adam 优化器中二者不等价?AdamW 中是如何实现的?](#面试问题:权重衰减(Weight Decay)与 L2 正则的关系是什么?为什么 Adam 优化器中二者不等价?AdamW 中是如何实现的?)
- 面试问题:不同正则化方法分别适用于什么场景?实际训练中如何选型与组合使用?
1.3.3 学习率与优化器基础
[1. 学习率核心作用与调优策略](#1. 学习率核心作用与调优策略)
- 面试问题:介绍一下学习率是什么?学习率过大/过小分别会对模型训练造成什么影响?
- 面试问题:常用的学习率衰减方法有哪些?各自的特点与适用场景是什么?
- [面试问题:学习率 warmup 的核心目的是什么?常用的 warmup 方式有哪些?如何设计 warmup 策略?](#面试问题:学习率 warmup 的核心目的是什么?常用的 warmup 方式有哪些?如何设计 warmup 策略?)
- [面试问题:工业界常用的学习率组合策略是什么?大模型训练中为什么普遍采用「线性 warmup + 余弦退火」?](#面试问题:工业界常用的学习率组合策略是什么?大模型训练中为什么普遍采用「线性 warmup + 余弦退火」?)
- [面试问题:有哪些常用的学习率调优方法?LR Finder 的核心原理是什么?](#面试问题:有哪些常用的学习率调优方法?LR Finder 的核心原理是什么?)
[2. 介绍一下优化器原理与选型](#2. 介绍一下优化器原理与选型)
- [面试问题:优化器的本质原理是什么?简述从 SGD 到 AdamW 的核心发展脉络,各阶段分别解决了什么问题?](#面试问题:优化器的本质原理是什么?简述从 SGD 到 AdamW 的核心发展脉络,各阶段分别解决了什么问题?)
- [面试问题:SGD、Adam、AdamW 三者各有什么优缺点?为什么大模型预训练与微调几乎都用 AdamW?深度学习场景下如何选型?](#面试问题:SGD、Adam、AdamW 三者各有什么优缺点?为什么大模型预训练与微调几乎都用 AdamW?深度学习场景下如何选型?)
- [面试问题:目前 AIGC 场景(大模型、扩散模型)常用的优化器有哪些?选型的核心依据是什么?](#面试问题:目前 AIGC 场景(大模型、扩散模型)常用的优化器有哪些?选型的核心依据是什么?)
1.3.4 训练全流程实操技巧
1.3.4.1 训练前准备
[1. 数据集划分原则、作用与落地方法](#1. 数据集划分原则、作用与落地方法)
- 面试问题:模型训练中训练集、验证集、测试集的作用分别是什么?有哪些划分原则与常见的落地方式?
- [面试问题:AIGC 场景(大模型微调、文生图扩散模型)的数据集划分和传统判别任务有什么区别?有哪些特殊注意事项?](#面试问题:AIGC 场景(大模型微调、文生图扩散模型)的数据集划分和传统判别任务有什么区别?有哪些特殊注意事项?)
[2. Batch Size 选型逻辑与实操方法](#2. Batch Size 选型逻辑与实操方法) - [面试问题:什么是 Batch Size?Batch Size 过大/过小分别有什么影响?实际训练中如何选型?](#面试问题:什么是 Batch Size?Batch Size 过大/过小分别有什么影响?实际训练中如何选型?)
- [面试问题:AIGC 场景(大模型微调、扩散模型训练)下,Batch Size 的选型和传统场景有什么核心区别?有哪些特殊约束?](#面试问题:AIGC 场景(大模型微调、扩散模型训练)下,Batch Size 的选型和传统场景有什么核心区别?有哪些特殊约束?)
[3. 超参数调优策略与实操](#3. 超参数调优策略与实操) - [面试问题:深度学习中模型参数与超参数有什么本质区别?AIGC 大模型训练中常见的核心超参数有哪些?](#面试问题:深度学习中模型参数与超参数有什么本质区别?AIGC 大模型训练中常见的核心超参数有哪些?)
- 面试问题:超参数调优的基本流程是什么?调优过程中有哪些核心原则?
- 面试问题:常用的超参数调优方法有哪些(网格搜索/随机搜索/贝叶斯优化)?各自的优缺点与适用场景是什么?
- [面试问题:AIGC 大模型/扩散模型的超参数调优和传统小模型有什么核心区别?有哪些专属的调优原则?](#面试问题:AIGC 大模型/扩散模型的超参数调优和传统小模型有什么核心区别?有哪些专属的调优原则?)
1.3.4.2 训练稳定性与异常排查
[1. 训练稳定性提升与常见异常排查方法](#1. 训练稳定性提升与常见异常排查方法)
- 面试问题:梯度消失、梯度爆炸与梯度震荡的核心区别是什么?分别是什么原因导致的?有哪些解决方法?
- [面试问题:梯度裁剪(Gradient Clipping)为何能提升训练稳定性?阈值如何确定?大模型训练中有什么注意事项?](#面试问题:梯度裁剪(Gradient Clipping)为何能提升训练稳定性?阈值如何确定?大模型训练中有什么注意事项?)
- [面试问题:梯度累积(Gradient Accumulation)的核心原理是什么?和直接增大 Batch Size 有什么本质区别?有哪些适用场景?](#面试问题:梯度累积(Gradient Accumulation)的核心原理是什么?和直接增大 Batch Size 有什么本质区别?有哪些适用场景?)
- [面试问题:混合精度训练的核心原理是什么?FP16 和 BF16 如何选择?为什么大模型训练普遍用 BF16?](#面试问题:混合精度训练的核心原理是什么?FP16 和 BF16 如何选择?为什么大模型训练普遍用 BF16?)
- 面试问题:什么是权重平均(EMA/SWA)?它的原理是什么?为什么能提升模型泛化能力与鲁棒性?
- [面试问题:训练中出现 NaN/Inf 的常见原因有哪些?有什么系统的排查与解决方法?](#面试问题:训练中出现 NaN/Inf 的常见原因有哪些?有什么系统的排查与解决方法?)
- 面试问题:常见的权重初始化方法有哪些(Xavier/He)?原理是什么?为什么初始化对训练如此重要?
- [面试问题:BatchNorm/LayerNorm/GroupNorm/InstanceNorm 的原理与区别是什么?为什么 Transformer 用 LayerNorm 而不用 BatchNorm?](#面试问题:BatchNorm/LayerNorm/GroupNorm/InstanceNorm 的原理与区别是什么?为什么 Transformer 用 LayerNorm 而不用 BatchNorm?)
- [面试问题:常见的激活函数有哪些(ReLU/GELU/SiLU/SwiGLU)?各自的原理与适用场景是什么?为什么大模型普遍用 GELU/SiLU?](#面试问题:常见的激活函数有哪些(ReLU/GELU/SiLU/SwiGLU)?各自的原理与适用场景是什么?为什么大模型普遍用 GELU/SiLU?)
- 面试问题:大模型分布式训练的并行策略有哪些(数据并行/模型并行/管道并行/ZeRO/FSDP)?各自原理与适用场景是什么?
1.3.4.3 进阶训练范式与泛化提升
[1. 进阶训练范式与泛化能力提升方法](#1. 进阶训练范式与泛化能力提升方法)
- 面试问题:什么是迁移学习?它的核心假设是什么?常见的迁移学习范式有哪些?
- [面试问题:预训练 + 微调范式的核心逻辑是什么?完整训练流程与关键注意事项有哪些?](#面试问题:预训练 + 微调范式的核心逻辑是什么?完整训练流程与关键注意事项有哪些?)
- [面试问题:对比学习的核心思想与基本原理是什么?它为什么能提升特征表示质量?在 AIGC 中有哪些应用?](#面试问题:对比学习的核心思想与基本原理是什么?它为什么能提升特征表示质量?在 AIGC 中有哪些应用?)
- 面试问题:样本不平衡会对模型训练造成哪些负面影响?从损失层面、训练层面分别有哪些解决方案?
- [面试问题:什么是参数高效微调(PEFT)?LoRA/QLoRA/Adapter/Prefix Tuning 的原理与区别是什么?](#面试问题:什么是参数高效微调(PEFT)?LoRA/QLoRA/Adapter/Prefix Tuning 的原理与区别是什么?)
1.3.4.4 模型评估与泛化分析
[1. 模型评估核心方法与泛化能力分析](#1. 模型评估核心方法与泛化能力分析)
- 面试问题:模型评估的核心目标是什么?常用的模型评估方法有哪些?
- 面试问题:什么是交叉验证?为什么要做交叉验证?常见的交叉验证方式有哪些?深度学习场景使用有什么注意事项?
- [面试问题:介绍一下精确率、召回率、F1 分数的定义与各自的适用场景?](#面试问题:介绍一下精确率、召回率、F1 分数的定义与各自的适用场景?)
- [面试问题:什么是 ROC 曲线与 AUC 值?它和 PR 曲线的核心差异及适用场景是什么?类别不平衡场景为什么优先用 PR 曲线?](#面试问题:什么是 ROC 曲线与 AUC 值?它和 PR 曲线的核心差异及适用场景是什么?类别不平衡场景为什么优先用 PR 曲线?)
- 面试问题:什么是泛化误差?如何用偏差-方差的权衡关系指导模型调优?
- 面试问题:如何通过训练指标判断模型是过拟合还是欠拟合?分别有哪些系统性的解决方案与调优优先级?
- [面试问题:AIGC 生成模型(大语言模型、文生图扩散模型)的评估和传统判别模型有什么核心区别?](#面试问题:AIGC 生成模型(大语言模型、文生图扩散模型)的评估和传统判别模型有什么核心区别?)
1.3.1 数据工程基础
1. 模型训练中数据预处理与质量优化的核心方法
面试问题:数据标注常见类型及适用任务有哪些?标注质量如何评估?
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐ (4/5)
标注这一步基本决定了模型能做到的上限。质量上靠交叉标注、黄金标准集校验、标注员能力分级来卡;效率上靠"模型预标注 + 人工修正"提速度;成本上靠主动学习挑难例、数据增强省标注量。
一、常见标注类型与适用任务
- 文本标注(大模型核心)
- 内容:文本分类、命名实体识别(NER)、关系抽取、摘要、对话上下文、指令-响应对、RLHF 偏好排序、安全合规
- 任务:大语言模型预训练/指令微调/RLHF、文本生成、对话、机器翻译、信息抽取
- 图像标注
- 内容:分类、检测框、语义分割、实例分割、关键点、图像描述(caption)、图文匹配
- 任务:文生图(Stable Diffusion/Midjourney)、图像理解、多模态大模型(CLIP/GPT-4V)、OCR
- 音频标注
- 内容:语音转文字(ASR)、情感、声纹、音效分类、TTS 文本-语音对
- 任务:语音识别/生成、声纹识别、音频生成、多模态语音交互
- 视频标注
- 内容:动作识别、目标跟踪、时序分割、视频描述、视频-文本对齐
- 任务:文生视频(Sora)、视频理解、动作捕捉、视频编辑
- 3D 点云标注
- 内容:3D 检测框、3D 语义分割、点云配准、场景重建
- 任务:具身智能、机器人导航、自动驾驶、3D 生成
- 多模态对齐标注
- 内容:图文跨模态对齐、音视频跨模态对齐、多模态指令-响应对
- 任务:多模态大模型、跨模态检索、图文/音视频生成
- 大模型专属高级标注
- 内容:复杂指令遵循、思维链(CoT)、工具调用、RLHF 人类偏好排序、安全/价值观对齐
- 任务:大模型能力提升、工具使用训练、安全与价值观对齐
二、标注质量评估方法
- 黄金标准集:由领域专家标注的基准集,所有结果与之对比。适合高精度场景,如大模型指令标注、安全对齐标注。
- 多人交叉标注:2-3 人独立标同一批,算一致性。适合主观性强的任务,如 RLHF 偏好排序、情感标注、CoT 标注。
- 分层抽样复核:按难度、批次分层抽 5%-20% 人工复核,适合大规模项目的日常监控。
- 标注员能力校准:定期做标准化测试,按准确率和一致性分级,用于长期团队管理。
- 模型反馈:用标注数据训一版初模,从模型预测错误反推标注问题,适合迭代式流程。
三、量化指标
-
标注准确率 = 正确数 / 总数 × 100%。不同任务门槛不同:医疗影像 ≥ 98.5%,大模型指令 ≥ 95%,通用图像分类 ≥ 90%。检测任务用 IoU 量化框,一般要求 IoU ≥ 0.5。
-
标注一致性(用 Kappa 系数,消除随机一致的影响):
κ = P o − P e 1 − P e \kappa = \frac{P_o - P_e}{1 - P_e} κ=1−PePo−Pe
P o P_o Po 为观测一致率, P e P_e Pe 为随机一致率。Cohen's Kappa 用于两人,Fleiss' Kappa 用于三人及以上。工程上 κ ≥ 0.8 \kappa \geq 0.8 κ≥0.8 为高度一致, κ ≥ 0.6 \kappa \geq 0.6 κ≥0.6 可接受, κ < 0.4 \kappa < 0.4 κ<0.4 要重标。
四、工程经验
- 质量控制走"模型预标注 → 初检 → 交叉标注 → 专家仲裁"四级流水线;
- 不同标注类型用不同标准(文本看语义一致性,图像看边界精度);
- 建错误追溯,定期分析错误类型,回头改标注规范和培训。
面试问题:什么是噪声标签(Noisy Labels)?深度学习场景下有哪些成熟的处理方案?
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐ (4/5)
噪声标签就是和样本真实语义对不上的错误标注,在互联网爬取数据、自动标注数据这种大规模场景里很普遍。
一、分类
- 对称噪声(均匀噪声):标签随机错,被错标成其他类的概率相同,实际中少见。
- 非对称噪声(类相关噪声):标签偏向错成语义相近的类(如"哈士奇"标成"阿拉斯加"),这是真实数据里最主要的噪声类型。
二、主要来源(AIGC 场景)
- 标注员主观失误、标准不统一;
- 样本本身语义模糊(边界样本、多标签样本);
- 自动标注/伪标签出错(AIGC 大规模数据的主要来源);
- 爬取过程标签错位。
三、对模型的影响
- 微调阶段过拟合噪声,泛化掉得快;
- 生成内容语义错误、风格混乱;
- RLHF 阶段奖励信号失真;
- 多轮对话上下文理解退化。
四、处理框架
- 数据层面(首选)
- 大模型清洗:用通用大模型(Qwen、Llama)自动识别低质量标注、修语义错误,比传统方法快得多;
- 置信度过滤:用预训练模型预测,滤掉"预测与标签不一致且置信度 > 0.9"的高风险样本;
- 去重与一致性校验:删重复样本,同一内容的多个标注投票取优。
- 损失函数层面
- 鲁棒损失:替掉对噪声敏感的标准交叉熵。广义交叉熵(GCE): L G C E = 1 − p t q / q L_{GCE}=1-p_t^q/q LGCE=1−ptq/q,用 q q q 控制对高置信错误样本的惩罚力度;对称交叉熵(SCE)同时优化预测→真实和真实→预测双向交叉熵,对对称噪声鲁棒。
- 标签平滑:把硬标签转软标签(如 0.1 , 0.8 , 0.1 0.1, 0.8, 0.1 0.1,0.8,0.1),压低模型对错误标签的过度自信。
- 训练策略层面
- 早停:模型先拟合干净数据、后拟合噪声,在验证集准确率开始掉的时候停;
- 课程学习:先训高置信干净样本,再逐步放低置信样本进来;
- 自训练/伪标签修正:用训练中模型的高置信预测替换原始噪声标签。
- AIGC 场景特殊优化
- 指令微调数据分级:按质量分 A/B/C 级,训练时给不同权重;
- RLHF 噪声隔离:用奖励模型过滤低质量人类反馈,挡住错误奖励信号;
- LoRA 微调:低秩适配比全参数微调对噪声更鲁棒,过拟合风险低。
实际里通常数据清洗打底,再叠标签平滑和早停;AIGC 大规模数据尤其先把自动清洗跑起来。
面试问题:常用的数据增强方式有哪些?CV/NLP/多模态生成任务分别有哪些专属方法?
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)
数据增强就是不增加真实采集成本的前提下扩充数据、提泛化、压过拟合、提升对分布偏移的鲁棒性。
一、按范式分类的通用方法
- 传统手工设计:基于领域先验,计算成本极低。如随机裁剪、水平翻转、亮度调整、同义词替换。
- 自动增强:用强化学习/进化算法搜最优增强组合,效果好但训练贵。如 AutoAugment、RandAugment(轻量、工业界最常用)、TrivialAugment。
- 混合样本增强:线性混合多个样本及其标签,平滑决策边界。如 Mixup、CutMix(一般比 Mixup 好)、Manifold Mixup(特征层混合)。
- 生成式增强:用生成模型合成符合真实分布的新样本,是 AIGC 解决小样本、长尾的关键手段。如扩散模型、大语言模型、GAN 系列。
二、不同任务的专属方法
- CV
- 基础变换:几何(旋转、缩放、平移)、像素级(亮度、对比度、高斯噪声);
- 区域擦除:Cutout、GridMask、Random Erasing(提遮挡鲁棒性);
- 检测专属:Mosaic、MixUp、CutMix(YOLO 系标配,明显提小目标检测);
- 3D 专属:点云旋转、平移、随机采样、法向量扰动;
- 红线:别用改变语义的变换(数字识别翻转 6/9、车牌识别大角度旋转)。
- NLP
- 词级:同义词替换(WordNet)、随机插入/删除/交换(EDA,轻量首选)、随机掩码;
- 句子级:回译(效果最好但贵)、随机打乱语序、大模型复述;
- 对抗:FGM、PGD、FreeAT(提对抗鲁棒性);
- 注意:同义词替换别造成语义漂移;大模型复述是当前 NLP 增强主流。
- 语音(ASR)
- 时域:语速、时间拉伸、音量、随机裁剪;
- 频域:频谱掩蔽(SpecAugment,工业界事实标准);
- 环境:加背景噪声、混响、回声;
- 优势:SpecAugment 极便宜,可在线训练时做。
- 多模态大模型
- 图文对齐:随机裁剪图像、随机截断文本、跨模态随机掩码;
- 模态替换:用生成模型替换某一模态(图转文、文转图);
- 价值:提跨模态对齐和泛化。
容易追问:CutMix 比 Mixup 好在哪?生成式增强怎么避免引入分布外噪声?
面试问题:深度学习训练前的数据清洗有哪些核心方法?核心处理逻辑是什么?
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)
训练前先把数据洗干净,这一步基本决定模型能做到的水平。脏数据里的错误、不一致、缺失、重复、乱码都会被模型学进去。
一、五类方法
- 完整性:处理缺失值,保证字段完整。
- 一致性:统一格式、单位、命名,解决冲突。
- 准确性:识别异常值、错误值、逻辑矛盾。
- 唯一性:去重,避免模型过拟合重复样本。
- 有效性:滤掉空文本、乱码、低质量样本。
二、工程要点
- 先做全局探查(统计缺失率、重复率、分布),再定清洗策略;
- 清洗要可复现,别靠手动操作;
- 留原始备份,记录每一步操作;
- AIGC 额外过滤有害内容、低质量文本、重复对话。
面试问题:什么是数据长尾分布?可以从哪些层面解决数据长尾问题?
难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)
一、定义
长尾分布指类别频率服从幂律(Zipf 定律):少数头部类别占绝大多数样本,大量尾部类别样本极少。
- 头部:前 10%-20% 的类,贡献 80%-90% 的样本;
- 尾部:后 80%-90% 的类,只贡献 10%-20% 的样本;
- 曲线:头部陡降,尾部平缓拉得很长。
AIGC 典型场景:微调时常见任务占比高、小众任务稀缺;多模态生成里常见物体描述多、罕见物体少;语音识别里常用词充足、专业术语和方言稀疏。
二、负面影响
- 性能失衡:头部过拟合、对扰动敏感;尾部严重欠拟合、召回率甚至趋近 0;决策边界被头部压着往尾部偏。
- 生成有偏见且单一:概率空间塌到高频模式,生成同质化;对小众文化、边缘群体内容生成差甚至出错。
- 知识稀疏与幻觉:低频知识没有稳定向量表示;同一问题换问法答案差很多;这是大模型幻觉的核心成因之一。
- 评估失真:整体准确率被头部主导,"Demo 好、上线差";20% 的长尾 case 可能占 50% 的用户投诉。
三、处理方法(按落地优先级)
- 数据层面(首选)
- 重采样:上采样(尾部重复,小心过拟合)、下采样(头部随机丢,小心信息损失)、混合采样;
- 数据增强:对尾部针对性增强(文本回译/同义词;图像裁剪/旋转/风格迁移);
- 合成数据:AIGC 的优势,用大模型生成尾部类别高质量样本;
- 数据融合:引外部公开集补尾部。
- 算法层面(不改数据分布)
- 损失改进:Focal Loss(降易分头部权重、聚焦难分尾部)、LDAM Loss(按类别有效样本数的边际损失,专为长尾设计)、Balanced Softmax(按样本量归一化);
- 解耦训练:先在全量数据学通用特征,再在均衡数据上微调分类器;
- 集成:训多个针对不同类别子集的模型,加权融合。
- 模型层面(AIGC 特有)
- 加权微调:给尾部样本更高学习率或损失权重;
- LoRA 分层:对尾部类别单独训专属 LoRA 适配器;
- RAG:把尾部知识存向量库,推理时检索补充;
- 零样本/少样本:靠大模型泛化,用提示工程提尾部性能。
- 评估层面(别漏掉)
- 不能只看整体准确率;
- 重点看尾部类别的召回率、F1;
- 用混淆矩阵分析类别间错误模式。
1.3.2 正则化基础
1. 正则化的定义、分类及常用方法
面试问题:什么是正则化?它从原理上为什么能提升模型泛化能力?显式正则化和隐式正则化有什么区别?
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)
一、定义
正则化是防过拟合、提泛化的手段,背后是奥卡姆剃刀:能解释数据的模型里,选最简单的那个。
做法上,要么在损失里加惩罚项,要么对模型结构或训练过程加约束,限制模型表达能力,让它不去死抠训练数据里的噪声和异常值,从而在测试数据上表现更好。
二、为什么能提泛化
- 限制复杂度:惩罚项约束参数取值,让模型学整体规律而不是噪声细节;
- 缩小假设空间:把最优解关进更小的参数空间,降低过拟合噪声的可能;
- 引入随机性:Dropout、BN 训练时引入扰动,近似集成,提鲁棒性;
- 引导平坦极小值:权重衰减、SWA 让模型收敛到更平坦的极小值,泛化更好。
三、显式 vs 隐式
- 显式正则化:人为显式设计、在损失或训练流程里看得见的手段。如 L1/L2、Dropout、早停、数据增强、标签平滑、权重衰减。
- 隐式正则化:不是显式加的,而是优化算法或训练机制本身顺带带来的。如 SGD 偏好平坦解;BN 的 batch 统计量噪声;随机打乱数据;预训练当初始化;小批量的梯度噪声。
四、常用方法
- 参数范数惩罚:L2 L t o t a l = L o r i g i n a l + λ ∑ i w i 2 L_{total}=L_{original}+\lambda\sum_{i}w_i^2 Ltotal=Loriginal+λ∑iwi2(权重衰减,最常用);L1 L t o t a l = L o r i g i n a l + λ ∑ i ∣ w i ∣ L_{total}=L_{original}+\lambda\sum_{i}|w_i| Ltotal=Loriginal+λ∑i∣wi∣(稀疏权重、特征选择);Elastic Net(L1+L2)。
- 数据增强:翻转、旋转、裁剪、Mixup、CutMix 等,几乎无成本提泛化。
- Dropout 系列:训练时随机失活并缩放保留单元(Inverted Dropout),测试时无需额外缩放。
- 早停:监控验证集性能,不再提升就提前停。
- BN:归一化层输入,batch 统计量噪声顺带正则。
- 其他:标签平滑、权重约束、噪声注入、模型集成。
落地优先级:数据增强 > 早停 > L2 > BN > Dropout > 其他。
面试问题:介绍一下早停(EarlyStopping)的定义、原理、作用及实操注意事项
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)
一、定义
早停是无侵入式正则化里最简单的一个:训练中持续盯验证集性能,连续若干 epoch 不再提升就提前停,留下泛化最好的那版权重。
二、原理
训练分三个阶段:
- 欠拟合:训练、验证集性能一起稳步涨;
- 最佳拟合:验证集性能到顶;
- 过拟合:训练还在涨,验证开始掉。
早停就是卡在性能由升转降的那个点停,不让模型继续死抠训练噪声。本质是靠限制迭代次数控制复杂度,符合奥卡姆剃刀。
三、作用
- 防过拟合:拦住模型对训练数据过度优化;
- 省算力:一般能省 30%-80% 的训练时间;
- 免调轮数:不用预先定死训练多少轮,按表现动态决定;
- 直接选验证集最优权重。
四、工程要点
- 监控指标:优先 val_loss,比准确率稳、更能反映泛化潜力;分类任务也可看验证准确率。
- 参数:
- patience:允许性能不提升的最大连续轮数,一般 5-20。太小会被训练波动误杀,太大会浪费资源;
- min_delta:判定"提升"的最小幅度,一般取指标量级的 1%-5%,免得把微小波动当提升。
- 保存策略:存验证集最优那版权重,不是最后一个 epoch 的------这是早停能起作用的关键。
- 验证集:必须和训练集同分布,绝不掺测试集。
- 坑:数据增强效果不行或验证集太小时别用早停,容易过早终止。
面试问题:介绍一下 Dropout 及其核心变种(DropConnect、DropBlock、DropPath)的原理与适用场景
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐ (4/5)
Dropout 由 Hinton 2012 年提出:训练时按概率 p 随机把一部分神经元输出置 0,测试时全部参与计算。
一、原理
现代框架都用 Inverted Dropout(反向 Dropout):训练时把保留的神经元输出乘 1 / ( 1 − p ) 1/(1-p) 1/(1−p) 缩放,测试时不用再做额外缩放就能保证期望一致。好处是测试无额外开销,还能动态调 p。
作用:防过拟合、打破神经元间的共适应;相当于集成一堆不同结构的子网络;降复杂度、提泛化。
二、变种对比
| 方法 | 失活对象 | 适用场景 | 核心优势 |
|---|---|---|---|
| Dropout | 神经元输出 | 全连接层 | 实现简单,计算开销小 |
| DropConnect | 权重连接 | 全连接层 | 比 Dropout 更严格的正则化,泛化能力更强 |
| DropBlock | 连续区域块 | 卷积层 | 专门针对 CNN 设计,保留空间结构信息 |
| DropPath | 整条残差路径 | 残差块/Transformer | 丢弃整个分支,用于深层网络与 ViT 等 |
三、工程注意
- p 一般 0.2-0.5,输入层建议 0.1-0.2;
- 和 BatchNorm 一起用时注意顺序和统计量问题,现代 Transformer 多用 DropPath + LayerNorm;
- 小批量下效果好,大批量可能削弱正则效果。
面试问题:介绍一下 L1 正则、L2 正则,为什么 L1 能产生稀疏性,L2 不会?
难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)
L1、L2 是最常用的参数范数惩罚,在损失里加参数范数项限制复杂度、防过拟合。
一、形式
- L1: L = L 0 + λ ∑ i ∣ w i ∣ L = L_0 + \lambda \sum_{i} |w_i| L=L0+λ∑i∣wi∣
- L2(权重衰减): L = L 0 + λ ∑ i w i 2 L = L_0 + \lambda \sum_{i} w_i^2 L=L0+λ∑iwi2
L 0 L_0 L0 是原始损失, λ \lambda λ 是正则强度。
二、为什么 L1 稀疏、L2 不稀疏
- 导数角度 :L1 导数是常数 ± λ \pm\lambda ±λ(次梯度),不管参数多大,梯度都在。参数接近 0 时 L1 梯度仍然很大,会直接把它推到 0;L2 导数是 2 λ w 2\lambda w 2λw,参数接近 0 时梯度也趋近 0,只会把参数压小、压不到 0。
- 几何角度:L1 约束区是菱形(L1 球),和损失等高线交点更容易落在坐标轴顶点,于是某些参数恰好为 0;L2 约束区是圆(L2 球),交点一般不在坐标轴上,所有参数都不为 0、只是都被缩小。
三、工程对比
- L1:产生稀疏权重,可做特征选择,但优化不如 L2 稳;
- L2:权重分布更均匀、数值稳定、计算简单,是最常用的正则。
面试问题:标签平滑(Label Smoothing)的原理及作用?在大模型/生成模型训练中有什么注意事项?
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐ (4/5)
标签平滑解决的是硬标签(one-hot)让模型过自信的问题。
一、原理
把硬标签 y i ∈ { 0 , 1 } y_i \in \{0,1\} yi∈{0,1} 转成软标签:
y i ′ = ( 1 − ϵ ) y i + ϵ K y'_i = (1-\epsilon)y_i + \frac{\epsilon}{K} yi′=(1−ϵ)yi+Kϵ
ϵ \epsilon ϵ 是平滑系数(一般 0.1), K K K 是类别数。比如二分类 1 , 0 1,0 1,0 会变成 0.95 , 0.05 0.95, 0.05 0.95,0.05。
二、作用
- 防过自信:不让模型给预测塞太高的置信度,提泛化;
- 缓解标签噪声:降低错误标签的影响;
- 提鲁棒性:对输入扰动不敏感;
- 防梯度消失:softmax 交叉熵下硬标签可能让梯度趋零,标签平滑能保住梯度。
三、大模型/生成模型注意
- ϵ \epsilon ϵ 一般 0.1 左右;太大(0.2 以上)会损害置信度和精度;
- 适合多分类和词表预测,类别越多收益越明显;
- 知识蒸馏里教师该不该用标签平滑有争议:Hinton 原始工作建议教师别用,以保留类别间相对关系(dark knowledge);后续研究(Müller et al., 2019)显示教师用标签平滑在部分场景也能提蒸馏效果;
- 大模型预训练常用(GPT、ViT),但下游评估和推理时不要用,否则人为压低概率、影响生成和排序;
- 数据很干净很充足时收益不明显;生成模型过度平滑会让多样性下降、logits 区分度变弱。
面试问题:权重衰减(Weight Decay)与 L2 正则的关系是什么?为什么 Adam 优化器中二者不等价?AdamW 中是如何实现的?
难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐ (4/5)
一、关系
标准 SGD 里,权重衰减等价于 L2 正则;但 Adam 这种自适应学习率优化器里,两者不等价。
二、SGD 里的等价性
- 带 L2 的损失: L = L 0 + λ 2 ∥ w ∥ 2 L = L_0 + \frac{\lambda}{2}\|w\|^2 L=L0+2λ∥w∥2
- 对 w w w 求导: ∂ L ∂ w = ∂ L 0 ∂ w + λ w \frac{\partial L}{\partial w} = \frac{\partial L_0}{\partial w} + \lambda w ∂w∂L=∂w∂L0+λw
- SGD 更新:
w t + 1 = w t − η ∂ L ∂ w = ( 1 − η λ ) w t − η ∂ L 0 ∂ w w_{t+1} = w_t - \eta\frac{\partial L}{\partial w} = (1-\eta\lambda)w_t - \eta\frac{\partial L_0}{\partial w} wt+1=wt−η∂w∂L=(1−ηλ)wt−η∂w∂L0
可见 L2 的效果就是每次更新把权重乘衰减系数 ( 1 − η λ ) (1-\eta\lambda) (1−ηλ),这正是"权重衰减"的名字来源。
三、为什么 Adam 里不等价
关键在 Adam 的自适应学习率。L2 把 λ w \lambda w λw 加进梯度 g g g,然后整体被 Adam 的二阶矩 v + ϵ \sqrt{v+\epsilon} v+ϵ 归一化:
w t + 1 = w t − η ⋅ g + λ w v + ϵ w_{t+1} = w_t - \eta \cdot \frac{g + \lambda w}{\sqrt{v} + \epsilon} wt+1=wt−η⋅v +ϵg+λw
不同参数的 v \sqrt{v} v 不同,正则强度被各自的 v \sqrt{v} v 扭曲------梯度大的参数其衰减也被放大缩小,正则不均匀。真正的权重衰减应该直接对参数衰减: w ← ( 1 − η λ ) w w \leftarrow (1-\eta\lambda)w w←(1−ηλ)w,和梯度无关。所以 Adam 里 L2 和权重衰减行为不一致,经验上 L2 效果更差、泛化更弱。
四、AdamW 的做法
AdamW 把权重衰减从梯度里解耦 :先像标准 Adam 那样用纯梯度 g g g 更新(自适应缩放),再独立对参数施加衰减:
w t + 1 = w t − η ⋅ m ^ v ^ + ϵ − η λ w t w_{t+1} = w_t - \eta \cdot \frac{\hat{m}}{\sqrt{\hat{v}}+\epsilon} - \eta\lambda w_t wt+1=wt−η⋅v^ +ϵm^−ηλwt
第一项是标准 Adam 更新(纯梯度、自适应缩放、不含正则),第二项是解耦的权重衰减(直接作用于参数、不受 v \sqrt{v} v 影响)。这样衰减不再受自适应学习率影响,行为和 SGD 里的权重衰减一致,泛化比 Adam + L2 好。
五、工程
- PyTorch 里
torch.optim.SGD和torch.optim.AdamW都有weight_decay参数,AdamW 实现的是解耦权重衰减; - 别同时用 L2 正则项和权重衰减,否则强度翻倍;
- 大模型训练用 AdamW + 权重衰减,不要用 Adam + L2。
面试问题:不同正则化方法分别适用于什么场景?实际训练中如何选型与组合使用?
难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐ (4/5)
一、各方法适用场景
- L2/权重衰减:深度学习的默认基线,数值稳、优化友好,适合整体限制参数大小。大模型里是 AdamW 的标配。
- L1:需要特征选择、希望模型稀疏可解释时用,如传统线性模型;深度学习里少单独用,多配 Elastic Net。
- Dropout/DropPath:全连接层和深层网络/Transformer,数据量中等、易过拟合时;DropPath 专用于残差块、ViT。
- 早停:通用、几乎无成本,有验证集就该开。
- 数据增强:CV/NLP/语音/多模态通用,数据不够、要提分布鲁棒性时。
- 标签平滑:多分类、词表预测、知识蒸馏;大模型预训练常用。
- BN:CNN 和中等批量场景,顺带加速收敛和隐式正则。
二、选型与组合
- 按数据规模:数据少 → 数据增强 + Dropout + 早停;数据多 → 权重衰减 + 早停,Dropout 可减弱。
- 按模型规模:大模型 → 权重衰减(AdamW)+ DropPath + 标签平滑,别上高 Dropout 拖慢收敛;小模型 → Dropout + 数据增强。
- 按任务:CV → 数据增强 + BN + 权重衰减;NLP/大模型 → DropPath + 权重衰减 + 标签平滑;生成模型 → 权重衰减 + 早停,慎用高 Dropout(影响生成质量)。
- 能叠但别过度:正则手段可叠加,但要盯验证集,过度正则会欠拟合、训不收敛。
- 优先级:数据增强 + 早停做底线标配,再叠权重衰减,最后看情况加 Dropout/标签平滑。
1.3.3 学习率与优化器基础
1. 学习率核心作用与调优策略
面试问题:介绍一下学习率是什么?学习率过大/过小分别会对模型训练造成什么影响?
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)
一、定义
学习率控制每次梯度下降更新参数的步长。梯度给方向,学习率决定沿这个方向迈多大一步。
二、作用
决定参数往损失最小值方向走的速度,直接卡收敛速度和最终性能。
三、过大/过小
- 过小:
- 收敛极慢,训练成本高;
- 容易陷局部最优或鞍点跳不出来;
- 长时间停在次优解。
- 过大:
- 步长太大,损失震荡甚至发散,收敛不了;
- 跨过最优区,在最优点附近来回震荡;
- 数值不稳,可能触发梯度爆炸或 NaN。
- 合适:损失平稳下降,最终收敛到不错的极小值。
四、经验
- 传统小模型:1e-3 量级起点(配 Adam);
- 大模型预训练:1e-4 ~ 5e-4;
- 大模型微调:1e-5 ~ 5e-5(远小于预训练,别破坏预训练知识);
- 配 warmup 和衰减能进一步稳。
面试问题:常用的学习率衰减方法有哪些?各自的特点与适用场景是什么?
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐ (4/5)
学习率衰减让训练后期逐步缩步长:前期快速逼近、后期精细收敛。常用 5 种:
- 固定步长衰减(Step Decay)
- 每隔固定 epoch 或 step 把学习率乘衰减因子 γ \gamma γ;
- 公式: l r = l r i n i t × γ ⌊ e p o c h / s t e p _ s i z e ⌋ lr = lr_{init} \times \gamma^{\lfloor epoch / step\_size \rfloor} lr=lrinit×γ⌊epoch/step_size⌋;
- 实现简单、高效,最基础的衰减。
- 指数衰减(Exponential Decay)
- 学习率随步数指数下降;
- 公式: l r = l r i n i t × γ e p o c h lr = lr_{init} \times \gamma^{epoch} lr=lrinit×γepoch;
- 衰减快,适合要快速收敛的场景。
- 余弦退火(Cosine Annealing)
- 学习率按余弦从初始值平滑降到最小值;
- 公式: l r = l r m i n + 1 2 ( l r i n i t − l r m i n ) ( 1 + cos ( T c u r T m a x π ) ) lr = lr_{min} + \frac{1}{2}(lr_{init} - lr_{min})\left(1 + \cos\left(\frac{T_{cur}}{T_{max}}\pi\right)\right) lr=lrmin+21(lrinit−lrmin)(1+cos(TmaxTcurπ));
- 平滑,能更好探索参数空间,大模型里用得多。
- 线性衰减(Linear Decay)
- 从初始值线性降到最小值;
- 公式: l r = l r i n i t − ( l r i n i t − l r m i n ) × s t e p t o t a l _ s t e p s lr = lr_{init} - (lr_{init} - lr_{min}) \times \frac{step}{total\_steps} lr=lrinit−(lrinit−lrmin)×total_stepsstep;
- 简单、衰减均匀,大语言模型主流之一。
- 带重启的余弦退火(Cosine Annealing with Warm Restarts,SGDR)
- 余弦退火基础上周期性把学习率重置回初始值;
- 能帮模型跳出局部最优。
选型:大模型多用"线性 warmup + 余弦退火/线性衰减";传统 CV 常用 Step Decay;要跳出局部最优可用带重启的余弦退火。
面试问题:学习率 warmup 的核心目的是什么?常用的 warmup 方式有哪些?如何设计 warmup 策略?
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐ (4/5)
一、warmup 的目的
warmup 是训练初期让学习率从很小的值慢慢升到预设初始学习率。目的三点:
- 缓解初始化不稳定:参数随机初始化时梯度方向不准,一开始就上大学习率会震荡甚至发散。
- 保护底层特征:微调预训练模型时,warmup 避免大学习率破坏预训练好的底层特征。
- 稳定训练:帮训练初期平稳过渡;同时缓解 Adam 等优化器二阶矩估计初期不准的问题。
二、常用 warmup 策略
- 线性 warmup(最常用)
- 从 0 线性增到初始学习率;
- 公式: l r = l r i n i t × s t e p w a r m u p _ s t e p s lr = lr_{init} \times \frac{step}{warmup\_steps} lr=lrinit×warmup_stepsstep;
- 简单、稳,大模型标配。
- 常数 warmup
- warmup 阶段保持一个较小的固定学习率,结束切到初始学习率;
- 最简单,适合小模型。
- 指数 warmup (较少用)
- 从接近 0 的极小值指数增到初始学习率;
- 前期慢、后期快,更保护初始化。
- 余弦 warmup
- 按余弦从 0 增到初始学习率;
- 平滑,和后续余弦退火衔接自然。
三、关键参数
- warmup 步数:一般总步数的 1%-10%。大模型常用 1000-10000 步;
- 初始学习率:warmup 结束达到的学习率,按模型大小、batch、任务调;
- 衔接:warmup 结束后直接切到主衰减策略(线性衰减、余弦退火)。
面试问题:工业界常用的学习率组合策略是什么?大模型训练中为什么普遍采用「线性 warmup + 余弦退火」?
难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)
一、工业界常用组合
主流是"warmup + 主衰减"两段式:训练初期 warmup 把学习率从 0 线性升到峰值,随后用主衰减(余弦退火或线性衰减)逐步降到最小值。最经典就是「线性 warmup + 余弦退火」。
二、为什么大模型普遍用「线性 warmup + 余弦退火」
- 线性 warmup 解决初期不稳
- 大模型参数多、初始化后梯度方差大,初期大学习率易发散;
- Adam 类二阶矩初期不准,warmup 给统计量时间收敛到合理值;
- 线性形式简单、稳,工程默认。
- 余弦退火兼顾探索和精细收敛
- 曲线平滑、中前期降得慢(保留较大学习率探索参数空间)、后期降得快(精细收敛到极小值);
- 比 Step Decay 突变式衰减平滑,损失曲线稳,不易因突变震荡;
- 比纯线性衰减,余弦前期保留更久的高学习率,探索更充分。
- 工程友好、可复现
- 超参少(warmup steps、峰值 lr、最小 lr);
- LLaMA、GPT、Stable Diffusion 都用这套,复现和迁移经验多。
三、典型配置
- 大模型预训练:warmup ratio 1%-3%,峰值 lr 1e-4~5e-4,余弦退火到峰值的 10%(或 1e-5);
- 微调:warmup ratio 3%-10%,峰值 lr 1e-5~5e-5,退火到更小值;
- 扩散模型:同样 warmup + 余弦退火,并按噪声调度调整。
面试问题:有哪些常用的学习率调优方法?LR Finder 的核心原理是什么?
难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐ (3/5)
一、常用调优方法
- 经验法:按模型规模和任务套经验区间(小模型 1e-3、预训练 1e-4~5e-4、微调 1e-5~5e-5),再微调。
- 网格/随机搜索:候选区间内网格或随机采几个学习率,短周期比验证集表现。
- LR Finder:自动定位合理学习率区间,工业界最常用。
- 基于损失的自动调度:ReduceLROnPlateau,验证损失 plateau 时自动降学习率。
- 超参优化工具:Optuna、Ray Tune、W&B 做贝叶斯搜索。
二、LR Finder 原理
Leslie Smith 提出:让学习率从极小值按指数逐 step 递增,每个 step 做一次前向反向并记损失,画"学习率-损失"曲线。
操作流程:
- 初始化模型,设极小起始学习率(如 1e-7);
- 每个 batch 后把学习率乘固定因子(如 1.01)指数增大;
- 记每个学习率对应的损失;
- 画 lr-loss 曲线,看损失下降最快(斜率最陡)的区间。
确定原则:选损失下降最陡处对应的学习率,一般取该区间的 1/10 或左端点做初始学习率,别取最低点(最低点往往已开始发散)。
三、注意
- 用小数据子集跑短周期,成本低;
- 找到的是初始峰值学习率,仍要配 warmup + 衰减;
- 损失曲线常需平滑(滑动平均)才能读出稳定区间;
- 大模型训练前可用它校验学习率量级,但最终仍以完整训练曲线为准。
2. 介绍一下优化器原理与选型
面试问题:优化器的本质原理是什么?简述从 SGD 到 AdamW 的核心发展脉络,各阶段分别解决了什么问题?
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)
一、优化器在干什么
优化器利用损失对参数的梯度,按一定规则迭代更新参数、最小化损失,解决的是"怎么高效找到损失最小值"。学习率是"步长",优化器是"怎么迈这一步"的算法,负责算梯度方向并套学习率更新参数。
二、发展脉络
分四个阶段,每个解决前一个的痛点:
- 基础梯度下降(SGD)
- 直接梯度乘学习率更新 w ← w − η g w \leftarrow w - \eta g w←w−ηg;
- 缺点:收敛慢、对学习率敏感、易陷局部最优、震荡大。
- 动量加速(SGD-Momentum、Nesterov)
- 引入动量,累积历史梯度,给更新"惯性";
- 加速收敛、减少震荡、更容易冲出局部最优。
- 自适应学习率(AdaGrad、RMSprop、Adam)
- 给每个参数自适应调学习率,不再全局统一;
- Adam 结合动量和自适应,收敛稳、快、对超参不敏感,成当时主流。
- 大模型优化(AdamW、Lion、Sophia)
- 针对大模型内存和效率优化;
- AdamW 修正 Adam 权重衰减的实现错误,成最通用优化器;Lion、Sophia 进一步提大模型训练效率。
三、工业界主流
- AdamW(最通用、大模型默认):在 Adam 上解耦权重衰减,收敛快、鲁棒、对超参不敏感,泛化优于 Adam。适用几乎所有深度学习任务。
- Lion(大模型新宠):符号优化器,只用梯度符号更新,只跟动量(优化器状态内存比 AdamW 减半),训练快 2%-15%。适合大语言模型预训练,尤其千亿级以上。
- SGD with Momentum:泛化好、最终精度高,但收敛慢、对学习率敏感。适合 CV(如 ResNet)、对泛化要求极高的场景。
- RMSprop:梯度平方指数衰减平均自适应调学习率,解决 AdaGrad 学习率过早衰减。适合 RNN/LSTM 等传统序列模型。
- Sophia(前沿):轻量二阶优化器,引入 Hessian 对角估计,收敛约 AdamW 的 2 倍。适合大模型预训练,还在验证推广阶段。
工程经验 :大模型优先 AdamW 或 Lion,学习率一般 1e-45e-4;微调用更小学习率(1e-55e-5)配 warmup;新优化器在超大模型上优势明显,小模型差异不大。
面试问题:SGD、Adam、AdamW 三者各有什么优缺点?为什么大模型预训练与微调几乎都用 AdamW?深度学习场景下如何选型?
难度评分:⭐⭐⭐⭐ (4/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)
一、三者对比
| 优化器 | 核心机制 | 优点 | 缺点 |
|---|---|---|---|
| SGD(+Momentum) | 梯度直接更新,可选动量 | 泛化好、最终精度高、内存占用小 | 收敛慢、对学习率与初始化敏感、需精心调参 |
| Adam | 一阶动量 + 二阶矩自适应学习率 | 收敛快、对超参不敏感、几乎免调参 | 泛化略逊 SGD;权重衰减实现不当(与 L2 等价)影响正则效果 |
| AdamW | Adam + 解耦权重衰减 | 收敛快、鲁棒、泛化优于 Adam、正则正确 | 内存仍需存二阶矩(比 Lion 多一倍) |
二、为什么大模型预训练与微调几乎都用 AdamW
- 收敛快且稳:大模型参数多、训练贵,AdamW 对超参不敏感、收敛稳,降低调参成本和训练失败风险。
- 泛化优于 Adam:解耦权重衰减后正则更合理,最终泛化更好。
- 适配大模型训练范式:和 warmup + 余弦退火、梯度裁剪、混合精度组合良好,工程链路成熟。
- 生态共识:LLaMA、GPT、Stable Diffusion 都用 AdamW,经验和超参配方可迁移,复现性好。
AdamW 和标准 Adam 的核心区别在权重衰减的实现。标准 Adam 把 λ w \lambda w λw 加进梯度 g g g,再随梯度一起被二阶矩 v \sqrt{v} v 归一化:
w t + 1 = w t − η ⋅ g + λ w v + ϵ w_{t+1} = w_t - \eta \cdot \frac{g + \lambda w}{\sqrt{v}+\epsilon} wt+1=wt−η⋅v +ϵg+λw
不同参数 v \sqrt{v} v 不同,权重衰减被自适应学习率扭曲,正则强度不均匀、效果变差。AdamW 把权重衰减解耦:先用纯梯度做标准 Adam 更新,再独立对参数施加衰减:
w t ← w t − η ⋅ m ^ v ^ + ϵ w t ← w t − η λ ⋅ w t \begin{aligned} w_t &\leftarrow w_t - \eta \cdot \frac{\hat{m}}{\sqrt{\hat{v}}+\epsilon} \\ w_t &\leftarrow w_t - \eta\lambda \cdot w_t \end{aligned} wtwt←wt−η⋅v^ +ϵm^←wt−ηλ⋅wt
这样每个参数的衰减强度一致,正则效果和 SGD 里的权重衰减等价,泛化更好(详见 q4-2-6)。这也是大模型训练里 AdamW 几乎完全取代 Adam 的关键原因。
三、选型
- 大模型预训练/微调:首选 AdamW。收敛快、稳、泛化好,当前工业界标准。
- 对最终精度要求极高的 CV 任务(如 ResNet/ImageNet 刷分):可用 SGD+Momentum,泛化和最终精度常优于自适应优化器。
- 快速实验/调参预算有限:Adam/AdamW,几乎免调参,适合快速验证想法。
- RNN/LSTM 传统序列:RMSprop 或 Adam。
- 资源受限/超大模型:Lion(内存减半)。
四、经验
- 小数据/强过拟合风险:AdamW + 权重衰减 + warmup;
- 收敛慢用自适应优化器,精度差再换 SGD 精调;
- 别在 Adam 上用 L2 正则替代权重衰减(见 q4-2-6)。
面试问题:目前 AIGC 场景(大模型、扩散模型)常用的优化器有哪些?选型的核心依据是什么?
难度评分:⭐⭐⭐⭐ (4/5) | 考察频率:⭐⭐⭐⭐ (4/5)
一、AIGC 场景常用优化器
- AdamW(绝对主流):大语言模型预训练/微调、扩散模型训练(Stable Diffusion 等)的事实标准,收敛稳、泛化好、工程链路成熟。
- Lion:符号优化器,优化器状态内存比 AdamW 减半(总训练显存约省 15%-25%),适合千亿级大模型预训练降本;Google 系大模型常用,但小模型/微调上不一定比 AdamW 强。
- Adafactor:用矩阵分解存二阶矩,明显降显存,适合显存受限的超大模型训练(如 T5/Flan-T5)。
- Sophia(前沿):轻量二阶优化器,收敛约 AdamW 的 2 倍,还在验证推广阶段。
- SGD+Momentum:部分 GAN 变体里生成器和判别器可能用不同优化器(如判别器 SGD、生成器 Adam),但主流架构(StyleGAN 系列)普遍用 Adam/AdamW。
二、选型依据
- 模型规模与显存预算:超大模型显存紧 → Adafactor/Lion 降显存;中等规模 → AdamW。
- 收敛稳定性与失败成本:训练成本越高越倾向 AdamW(最稳);实验阶段可试 Lion/Sophia 提速。
- 泛化与最终质量:生成质量要求高 → AdamW;追求极致精度的小模型 → SGD 精调。
- 与训练栈兼容性:是否支持 ZeRO/FSDP 分布式、混合精度、梯度检查点等;AdamW 生态最完善。
- 任务阶段:预训练重稳定与吞吐 → AdamW/Lion;微调重保真防灾难性遗忘 → AdamW + 小学习率 + warmup。
三、典型组合
- LLM 预训练:AdamW + 线性 warmup + 余弦退火 + BF16 混合精度 + 梯度裁剪;
- LLM 微调(LoRA/QLoRA):AdamW + 小学习率(1e-5~5e-5)+ warmup;
- 扩散模型训练:AdamW + warmup + 余弦退火 + EMA 权重平均。
1.3.4 训练全流程实操技巧
1.3.4.1 训练前准备
1. 数据集划分原则、作用与落地方法
面试问题:模型训练中训练集、验证集、测试集的作用分别是什么?有哪些划分原则与常见的落地方式?
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)
一、三个集的作用
| 集合 | 作用 | 参与模型调整 |
|---|---|---|
| 训练集 | 学习可训练参数(权重、偏置),梯度下降更新 | 是 |
| 验证集 | 调超参(学习率、batch、网络结构等)、监控训练、早停防过拟合、选最优 checkpoint | 是(只调超参和选模型,不更新参数) |
| 测试集 | 最终评估泛化能力,模拟未知真实数据上的表现 | 否(一旦用过,模型不能再动) |
二、划分原则
- 分布一致:三个集必须同分布,否则评估没意义(不能用中文训练集评估英文模型)。
- 严格互斥:三个集无任何重叠,避免数据泄露导致评估失真。
- 代表性:每个集都反映原始数据特征(如分层抽样保证类别比例)。
- 测试集独立:测试集只用一次,只做最终泛化评估,绝不用于参数更新、超参调优或早停。
三、常见落地方式
- 基础随机划分(留出法):最通用,适合独立同分布(IID)数据。标准比例 7:2:1(训练:验证:测试);大数据集(>100 万)可调到 9:0.5:0.5,少量验证/测试就够稳定评估。
- 分层抽样:分类任务用,尤其类别不平衡。严格按各类别比例划分,保证三集类别分布一致,避免稀有类在某集缺失。
- 时序划分:时间序列任务强制用。严格按时间顺序(如前 70% 训练、中 20% 验证、后 10% 测试),绝不能随机划分,否则未来数据泄露。
- k 折交叉验证:适合小数据集(<1 万)。分 k 份(常用 5/10 折),每次 k-1 训练、1 验证,重复 k 次取平均。最终仍需独立测试集评估泛化。
四、大数据集 vs 小数据集
- 大数据集:直接留出法,比例可极端到 98:1:1,数据够多,少量验证/测试统计上已稳;不用交叉验证(贵且没必要);可在线评估、持续采样。
- 小数据集:用 k 折交叉验证把数据用足;验证集和测试集都要保证代表性,必要时分层抽样;可配数据增强扩有效训练量;更要警惕单次划分的随机性偏差。
五、工程要点
- 划分前别做全局预处理(归一化、去重),必须先划分,再只用训练集算预处理统计量(均值、方差)套到所有集;
- 大模型微调时验证集留 1000-5000 样本,够监控过拟合和早停就行。
面试问题:AIGC 场景(大模型微调、文生图扩散模型)的数据集划分和传统判别任务有什么区别?有哪些特殊注意事项?
难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐ (4/5)
一、和传统判别任务的区别
- 评估对象不同:判别任务有明确标签、可用准确率等客观指标;AIGC 生成任务输出是开放式生成内容,验证/测试常需人工或模型评判(LLM-as-a-judge、人类偏好对比)。
- 数据形态不同:指令微调数据是"指令-响应"对,扩散模型是"图文对/条件-图像对",划分时要保持对完整,不能把一条指令-响应对拆到不同集。
- 分布匹配要求更高:微调数据要和实际部署场景的任务、风格、长度分布一致,否则生成质量和对齐性下降。
- 去重与防泄露更严:预训练数据巨大,必须严格去重(精确去重 + MinHash 模糊去重),并剔除评估基准的污染数据,否则验证/测试指标严重虚高。
二、特殊注意
- 指令微调:按任务类型分层划分,保证验证集覆盖所有能力维度(推理、代码、对话、安全等);划分在样本级而非 token 级。
- RLHF:偏好数据要把同一 prompt 的多个排序响应留在同一 split,避免跨集泄露;奖励模型训练集和策略模型微调集要独立。
- 扩散模型:图文对划分保证对完整;验证集要含多样 prompt 和概念,便于 FID/CLIP Score 与人工评估。
- 基准污染检测:用 n-gram 匹配查训练集是否含评估集(如 MMLU、HumanEval)题目,发现就剔除。
- 在线评估:AIGC 最终评估常以线上 A/B + 人类偏好为准,离线验证集只能做粗筛。
2. Batch Size 选型逻辑与实操方法
面试问题:什么是 Batch Size?Batch Size 过大/过小分别有什么影响?实际训练中如何选型?
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)
一、定义
Batch Size(批次大小):一次参数更新同时处理的样本数。
二、过大/过小
- 过小(<8):
- 梯度噪声大,训练震荡难收敛;
- 吃不满 GPU 并行算力,吞吐低、训练慢;
- 但梯度噪声带隐式正则,有时泛化更好。
- 过大(>2048):
- 梯度更新次数减少,收敛变慢(相同 epoch 下);
- 易收敛到尖锐局部最小值,泛化掉;
- 显存占用大,硬件要求高;
- 要同步增大学习率(线性缩放规则),调参更复杂。
- 适中:一般泛化最好,收敛和效率平衡得好,具体量级视任务而定(CV 分类常数十到数百)。
三、显存
Batch Size 越大,激活值和梯度占显存越多;混合精度和梯度累积能在不增显存下等效增大有效批次。
四、选择原则
- 硬件上限优先:先测 GPU 显存能装下的最大 batch size,这是最基础的约束。
- 训练稳定性:过小梯度噪声大、震荡;过大更新次数少、收敛慢。在稳定和效率间平衡。
- 泛化:适中的 batch size 一般泛化最好;过大易收敛到尖锐局部最小值。
- 分布式线性扩展:GPU 数加 N 倍时,batch size 和学习率也同步加 N 倍(线性缩放规则)。
五、经验值
- 一般 CV 分类:32-256;
- 检测/分割:显存占用大,常取较小值(2-16)配梯度累积;
- 收敛慢可适度增大 batch size 并同步调大学习率。
面试问题:AIGC 场景(大模型微调、扩散模型训练)下,Batch Size 的选型和传统场景有什么核心区别?有哪些特殊约束?
难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐ (4/5)
一、和传统场景的区别
AIGC 场景模型参数和单样本显存占用都大,单卡几乎装不下较大 batch size,所以普遍用小 micro-batch + 梯度累积 + 数据并行等效实现大全局 batch size,而不是传统场景直接增大单卡 batch size。
二、特殊约束
- 显存是硬约束:微调受显存限制,micro-batch 常用 1、2、4、8、16,再靠梯度累积等效增大有效批次。
- 序列长度影响大:LLM 训练显存随序列长度平方增长(注意力),长序列下 batch size 必须更小,常用序列并行/FlashAttention 缓解。
- 全局 batch size 仍要够大:保证训练稳定和吞吐,靠数据并行(DP/ZeRO/FSDP)把全局 batch size 撑到数百甚至数千。
- 学习率要同步:全局 batch size 变时学习率按线性缩放规则调,并配 warmup。
- 扩散模型特殊:训练时常需较大 batch size(如数百)保证噪声条件分布估计稳定,配 EMA 提稳。
三、典型配置
- LLM 全参微调:micro-batch 1-8 + 梯度累积 8-32 + 多卡 DP;
- LoRA 微调:能扛较大 micro-batch(8-32);
- 扩散模型训练:全局 batch size 256-2048,配 EMA。
3. 超参数调优策略与实操
面试问题:深度学习中模型参数与超参数有什么本质区别?AIGC 大模型训练中常见的核心超参数有哪些?
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)
一、定义
- 模型参数:模型内部可学习的变量(权重、偏置、注意力矩阵等),梯度下降自动更新。
- 超参数:训练前人工设定的配置(学习率、batch size、网络层数、dropout 率等),不参与梯度下降,用来控制模型结构、训练过程和正则强度。
二、区别
| 对比维度 | 模型参数 | 超参数 |
|---|---|---|
| 定义 | 模型内部可学习变量 | 模型外部人工设定配置 |
| 示例 | 权重、偏置、注意力矩阵 | 学习率、batch size、网络层数、dropout 率 |
| 更新方式 | 梯度下降自动更新 | 人工调整或调优算法搜索 |
| 数量 | 百万级到千亿级 | 几十到几百个 |
| 作用 | 拟合训练数据 | 控制学习能力和泛化能力 |
注意:早停的轮数、学习率调度参数都不是模型参数,是超参数。超参数选择直接决定模型性能上限,往往比改模型结构还重要。
三、AIGC 大模型常见超参数
- 优化相关 :学习率(峰值/最小值)、warmup steps/比例、权重衰减、动量 β 1 , β 2 \beta_1,\beta_2 β1,β2、梯度裁剪阈值;
- 数据与批次:batch size、梯度累积步数、序列长度、训练总步数/epoch;
- 模型结构:层数、隐藏维度、注意力头数、上下文长度、词汇表大小;
- 正则化:dropout 率、标签平滑系数、LoRA rank/alpha;
- 训练策略:混合精度类型(BF16/FP16)、EMA 衰减率、学习率调度类型。
面试问题:超参数调优的基本流程是什么?调优过程中有哪些核心原则?
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐ (4/5)
一、基本流程
- 定优化目标:定评估指标(验证 loss、下游任务精度、生成质量)和约束(算力、时间)。
- 划定搜索空间:按经验给每个超参候选区间(学习率对数均匀、dropout 线性等)。
- 选调优方法:手动/网格/随机/贝叶斯,按算力和模型成本选。
- 小规模预筛:用小数据子集或小模型跑短周期,剔除明显差的配置。
- 完整训练评估:对候选配置做完整训练,比验证集表现。
- 细化与复现:最优点附近细化搜索,最终固定超参并复现。
二、原则
- 按影响力排序调:先调影响最大的------学习率 > batch size > 正则强度 > 网络结构参数。
- 调优顺序:先学习率和 batch size,再正则参数,最后网络结构参数。
- 用早停:调优过程用早停省训练时间。
- 别碰测试集:超参调优只在验证集上做,测试集泄露会严重过估。
- 避免验证集过拟合:别过度调参,否则在验证集上过拟合;留独立测试集做最终确认。
- 固定随机种子:保证可复现,减少比较中的噪声。
- 一次只改少数变量:控制变量法,别同时改多个超参导致无法归因。
面试问题:常用的超参数调优方法有哪些(网格搜索/随机搜索/贝叶斯优化)?各自的优缺点与适用场景是什么?
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)
一、常用方法
- 手动调优
- 基于经验调关键超参;
- 优点:灵活、能结合领域知识;缺点:依赖经验、难复现;
- 适用:绝大多数项目日常调参。
- 网格搜索(Grid Search)
- 遍历所有超参组合;
- 优点:简单、穷举;缺点:维度灾难,计算成本极高;
- 适用:超参数极少的情况,工业界已很少用。
- 随机搜索(Random Search)
- 超参空间随机采样组合评估;
- 优点:比网格搜索高效(重要超参获得更多采样)、易并行;缺点:可能错过最优;
- 适用:超参数较多,工业界主流方法。
- 贝叶斯优化(Bayesian Optimization)
- 基于历史评估建概率代理模型(如高斯过程/TPE),指导下一次采样方向;
- 优点:效率远高于随机搜索,样本利用率高;缺点:串行性强、实现复杂、有开销;
- 适用:训练成本高的复杂模型(如大模型),单次评估昂贵时收益最大。
二、自动化工具
Optuna(TPE/支持剪枝)、Ray Tune(分布式)、Weights & Biases Sweeps,集成多种高效算法,支持并行调优和可视化。
三、选型
- 超参少 + 训练快 → 网格/随机;
- 超参多 + 训练快 → 随机搜索;
- 训练昂贵(大模型)→ 贝叶斯优化 + 早停剪枝。
面试问题:AIGC 大模型/扩散模型的超参数调优和传统小模型有什么核心区别?有哪些专属的调优原则?
难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐ (4/5)
一、和传统小模型的区别
- 单次训练成本极高:大模型一次完整训练动辄几小时到几天、烧巨额算力,没法像小模型那样大量网格搜索,必须用贝叶斯优化 + 小规模代理任务预筛。
- 搜索空间维度高且耦合:学习率、batch size、warmup、序列长度、权重衰减强耦合,孤立调一个超参容易失效。
- 评估困难且昂贵:生成质量要人工或 LLM-as-judge,没法像小模型那样用单一准确率快速判别。
- Scaling Law 指导:大模型调参可用 scaling law 外推,而不是纯试错。
二、专属原则
- 代理任务预筛:用小数据/小模型/短序列做超参预筛,再迁移到大模型全量训练验证。
- 遵循 Scaling Law:用计算最优缩放(Chinchilla 等)定模型大小、数据量、batch size 配比,避免盲目调参。
- 关键超参优先且保守:学习率和 warmup 最关键,先在小规模定区间,全量训练只做微调。
- batch size 与学习率联动:全局 batch size 变时按线性缩放规则调学习率,并同步调 warmup 步数。
- 贝叶斯优化 + 早停剪枝:用 Optuna 等做贝叶斯搜索,配 median/multi-arm 剪枝提前终止差的试验。
- 复用经验配方:优先迁移同规模开源模型(LLaMA 等)的超参配方,再小范围微调。
- 生成质量多维评估:用 FID/CLIP Score/人工偏好 + 自动指标组合,避免单指标误导。
1.3.4.2 训练稳定性与异常排查
1. 训练稳定性提升与常见异常排查方法
面试问题:梯度消失、梯度爆炸与梯度震荡的核心区别是什么?分别是什么原因导致的?有哪些解决方法?
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)
一、原因
梯度消失和爆炸本质都是反向传播链式乘法效应:
- 激活函数导数绝对值小于 1 时,多层相乘梯度指数衰减,浅层参数几乎不更新(梯度消失);
- 导数绝对值大于 1 时,多层相乘梯度指数增长,参数更新步长过大,模型震荡发散(梯度爆炸)。
二、诱因
- 网络过深:层数越多,链式累积越明显;
- 激活函数不当:Sigmoid、Tanh 大部分区域导数小于 1,易梯度消失;
- 权重初始化不合理:过大易爆炸,过小易消失;
- 学习率过高:加剧爆炸。
三、解决方法
- 梯度消失:用 ReLU/GELU 等激活、残差连接(ResNet)、BN、LSTM/GRU 门控、预训练+微调。
- 梯度爆炸:梯度裁剪、权重正则、降学习率、BN。
四、和梯度震荡的区别
| 问题 | 本质 | 表现 | 主要原因 |
|---|---|---|---|
| 梯度消失 | 梯度过小 | 损失下降缓慢,浅层参数不更新 | 激活函数、网络过深 |
| 梯度爆炸 | 梯度过大 | 损失急剧上升,模型发散 | 权重初始化、学习率过高 |
| 梯度震荡 | 梯度方向频繁变化 | 损失曲线上下波动,收敛缓慢 | 学习率过高、数据分布不均、优化器选择不当 |
面试问题:梯度裁剪(Gradient Clipping)为何能提升训练稳定性?阈值如何确定?大模型训练中有什么注意事项?
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐ (4/5)
一、为什么用
- 防梯度爆炸:限制梯度最大范数,避免更新步长过大导致发散;
- 提稳:RNN、Transformer 等序列模型尤其需要,它们容易梯度爆炸;
- 允许更高学习率:有裁剪保护时可适当提高学习率加快收敛;
- 处理异常样本:个别异常样本产生极大梯度时,裁剪能压住其负面影响。
二、阈值怎么定
- 经验法(最常用):初始值一般 1.0~10.0;Transformer 常用 1.0;RNN 常用 5.0。
- 动态阈值:算所有梯度范数统计量(均值、标准差),阈值设为均值 + k 倍标准差(k 一般 2~3),自适应不同训练阶段。
- 实验调优:从较大阈值(如 10.0)逐渐减小,看损失曲线和梯度范数变化,选既防爆炸又不影响收敛的阈值。
三、工程注意
- 优先用按范数裁剪(Clip by Norm)而不是按值裁剪(Clip by Value),前者保留梯度方向、只缩放大小;
- 裁剪在梯度算完、参数更新前做;
- 阈值别太小,否则梯度消失、收敛变慢;
- 大模型训练:普遍开梯度裁剪(阈值常 1.0),配 warmup、BF16、权重衰减一起保稳;分布式训练时在 all-reduce 后对全局梯度范数裁剪。
面试问题:梯度累积(Gradient Accumulation)的核心原理是什么?和直接增大 Batch Size 有什么本质区别?有哪些适用场景?
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐ (4/5)
一、原理
梯度累积是在有限显存下模拟大批次训练:
- 把一个大批次拆成多个小批次(mini-batch);
- 依次算每个小批次的梯度,但不立即更新参数;
- 累积 N 个小批次梯度后,用累积梯度总和做一次参数更新;
- 数学上等价于用大小 N×batch_size 的批次训练(梯度意义下)。
二、代码示意
Python
# 梯度累积训练
accumulation_steps = N
for i, batch in enumerate(dataloader):
loss = model(batch)
loss = loss / accumulation_steps # 归一化损失
loss.backward()
if (i + 1) % accumulation_steps == 0:
optimizer.step()
optimizer.zero_grad()
三、和直接增大 Batch Size 的区别
- BN 统计量:BatchNorm 统计量基于每个小 micro-batch 算,和真正的大 batch 不同,可能影响效果(用 LN/SyncBN 可缓解)。
- 显存:梯度累积不增峰值显存,直接增大 batch size 显存线性增长。
- 计算结果:梯度意义下等价,但有 BN 时统计不等价;用 LN(如 Transformer)则高度等价。
- 学习率:累积增大有效批次后,学习率一般要按线性缩放规则调。
四、适用场景
- 显存不够装大批次训练;
- 大模型单卡显存撑不起大批次;
- 小批次训练不稳的任务(检测、分割);
- 分布式节点少时靠梯度累积增加有效批次。
面试问题:混合精度训练的核心原理是什么?FP16 和 BF16 如何选择?为什么大模型训练普遍用 BF16?
难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)
一、原理
混合精度训练同时用 FP16 和 FP32:
- 权重、激活、梯度用 FP16 存储和计算,省显存、快;
- 权重主备份用 FP32 存,避免精度损失导致训练不稳;
- 用损失缩放(Loss Scaling)防 FP16 下梯度下溢为 0。
二、关键技术
- FP32 主权重备份:参数更新时把 FP16 梯度转 FP32 更新 FP32 主权重,再转回 FP16 做前向。
- 损失缩放:把损失乘较大缩放因子(如 1024 或动态调整),把梯度相应放大避免 FP16 下下溢;参数更新前再除以缩放因子。
三、FP16 与 BF16 对比
| 特性 | FP16(半精度) | BF16(Brain Float) |
|---|---|---|
| 总位数 | 16 位 | 16 位 |
| 符号位 | 1 位 | 1 位 |
| 指数位 | 5 位 | 8 位 |
| 尾数位 | 10 位 | 7 位 |
| 数值范围 | 约 ±6.55e4,最小正规数 ~6e-5 | 约 ±3.4e38,最小正规数 ~1.2e-38 |
| 精度 | 较高(尾数多) | 较低(尾数少) |
| 硬件支持 | NVIDIA Volta 及以上 | NVIDIA Ampere 及以上,AMD,Intel |
四、为什么大模型普遍用 BF16
- 数值范围和 FP32 相同:BF16 指数位 8 位和 FP32 一致,几乎不会梯度下溢/溢出;
- 无需损失缩放:训练更简单稳,省掉动态 loss scaling 的工程负担;
- 硬件加速:现代 GPU(Ampere 及以上)对 BF16 有专门硬件加速;
- 大模型梯度动态范围大:BF16 的大动态范围比 FP16 的高精度更重要。
五、何时仍用 FP16
- 硬件不支持 BF16(如 Volta 架构);
- 任务对尾数精度要求极高且动态范围不大;
- 老版本框架对 BF16 支持不完善。
工程收益:显存减约 50%,训练快 30%~100%,能用更大 batch size。
面试问题:什么是权重平均(EMA/SWA)?它的原理是什么?为什么能提升模型泛化能力与鲁棒性?
难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐ (4/5)
一、EMA(Exponential Moving Average)
- 对权重做指数移动平均,保留历史权重信息;
- 公式: w E M A = α ⋅ w E M A + ( 1 − α ) ⋅ w c u r r e n t w_{EMA} = \alpha \cdot w_{EMA} + (1-\alpha) \cdot w_{current} wEMA=α⋅wEMA+(1−α)⋅wcurrent;
- 超参数:衰减率 α \alpha α 一般 0.999 或 0.9999;
- 平滑参数更新、减少波动。扩散模型训练几乎标配 EMA。
二、SWA(Stochastic Weight Averaging)
- 训练后期沿损失面的平坦区域采样多个 checkpoint 的权重做简单平均;
- 经典 SWA 用恒定较高学习率在平坦区域等间隔采样权重;也有变种配循环学习率或余弦退火,每个周期结束时存权重再取平均;
- 能找到更平坦的损失极小值点。
三、对泛化的作用
- 找更平坦的极小值:平坦极小值一般泛化更好;
- 减少过拟合:平均多个权重相当于集成多个模型;
- 平滑参数更新:减少高频波动,模型更稳。
四、对鲁棒性的作用
- 对输入扰动更鲁棒:平均后模型对微小输入变化不敏感;
- 对超参数变化更鲁棒:SWA 对学习率选择不敏感;
- 对训练数据变化更鲁棒:EMA 平滑训练数据噪声。
五、工程
- EMA 一般在整个训练过程持续做;
- SWA 一般在训练最后 10%~20% 迭代做;
- 两者可结合:先 EMA 训练,再用 SWA 做最终平均;
- 推理用平均后权重,一般能涨 1%~3% 性能;扩散模型推理几乎必用 EMA 权重。
面试问题:训练中出现 NaN/Inf 的常见原因有哪些?有什么系统的排查与解决方法?
难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐ (4/5)
一、常见原因
- 梯度爆炸:梯度过大,参数更新后出现 NaN。
- 损失计算错误:对数函数输入 0 或负数 log ( 0 ) \log(0) log(0);除法分母为 0;交叉熵中标签和输出不匹配。
- 学习率过高:更新步长过大,损失急剧上升。
- 数据问题:输入存在 NaN/Inf;归一化不当导致数值过大或过小。
- 混合精度问题:FP16 数值溢出;损失缩放因子设置不当。
- 权重初始化不当:权重过大导致前向激活值爆炸。
二、排查方法
- 定位位置:用
torch.autograd.detect_anomaly()自动检测产生 NaN 的操作;逐步打印损失和梯度数值,确定哪一步出问题。 - 检查数据:验证输入是否有 NaN/Inf:
torch.isnan(x).any();检查归一化是否正确。 - 检查损失函数:损失计算前加数值检查;对数函数加极小值 log ( x + 1 e − 8 ) \log(x + 1e-8) log(x+1e−8);除法加分母保护。
- 调超参:降学习率;开梯度裁剪;调混合精度损失缩放因子。
- 检查模型结构:验证权重初始化是否合理;查是否有数值不稳定操作(指数函数、平方根)。
三、快速修复
- 开梯度裁剪,阈值设 1.0;
- 学习率降到原来 1/10;
- 损失计算里加数值保护;
- 暂时关掉混合精度确认是不是精度问题;
- 用更小 batch size。
面试问题:常见的权重初始化方法有哪些(Xavier/He)?原理是什么?为什么初始化对训练如此重要?
难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐ (4/5)
权重初始化决定训练的起点,前向激活和反向梯度的方差能不能逐层稳住,基本就看它。初始化不好,训练还没开始就已经梯度消失或爆炸了。
一、为什么初始化重要
目标:让各层激活方差和梯度方差尽量保持一致,信号能稳定地前向传播、反向回传。坏初始化的典型坑:
- 全零或常数初始化:所有神经元同质、对称性无法打破,前向输出一样、反向梯度一样,根本学不动;
- 过大:前向激活逐层爆炸,梯度爆炸,很快 NaN;
- 过小:激活和梯度逐层衰减,梯度消失;
- 随机但方差没对上:方差逐层累积失稳,照样发散或消失。
二、核心方法
-
随机初始化(基础):高斯或均匀采样,打破对称性,但方差要按下面方法选,不能随便。
-
Xavier(Glorot)初始化:目标是对称饱和激活(tanh、sigmoid)保持各层激活方差和反向梯度方差一致。
- 正态版: Var ( W ) = 2 n i n + n o u t \text{Var}(W)=\dfrac{2}{n_{in}+n_{out}} Var(W)=nin+nout2
- 均匀版: W ∼ U ( − a , a ) W\sim U(-a,a) W∼U(−a,a), a = 6 n i n + n o u t a=\sqrt{\dfrac{6}{n_{in}+n_{out}}} a=nin+nout6
- 推导同时要求前向 Var ( y ) = Var ( x ) \text{Var}(y)=\text{Var}(x) Var(y)=Var(x)、反向 Var ( ∇ x ) = Var ( ∇ y ) \text{Var}(\nabla x)=\text{Var}(\nabla y) Var(∇x)=Var(∇y),严格成立需要 n i n = n o u t n_{in}=n_{out} nin=nout,一般情况是两个条件的折中,故方差取 2 n i n + n o u t \dfrac{2}{n_{in}+n_{out}} nin+nout2。
- 适用:tanh、sigmoid 这类零均值、近线性区间的对称激活。
-
He(Kaiming)初始化:针对 ReLU 及其单侧抑制变体(LeakyReLU、PReLU)。
- 正态版: Var ( W ) = 2 n i n \text{Var}(W)=\dfrac{2}{n_{in}} Var(W)=nin2
- 均匀版: a = 6 n i n a=\sqrt{\dfrac{6}{n_{in}}} a=nin6
- 原理:ReLU 负半轴置零,激活的神经元约只有一半, E ReLU ( W x ) 2 ≈ n i n ⋅ Var ( W ) / 2 E\\text{ReLU}(Wx)\^2\approx n_{in}\cdot\text{Var}(W)/2 EReLU(Wx)2≈nin⋅Var(W)/2,要 Var ( y ) = Var ( x ) \text{Var}(y)=\text{Var}(x) Var(y)=Var(x) 需 Var ( W ) = 2 / n i n \text{Var}(W)=2/n_{in} Var(W)=2/nin。
- 适用:ReLU、LeakyReLU、PReLU。
-
其他:
- 正交初始化:权重矩阵正交化,常用于 RNN,保梯度范数不爆炸;
- 偏置初始化:一般 0;BN 的 β = 0 、 γ = 1 \beta=0、\gamma=1 β=0、γ=1;
- 残差末端小初始化:残差分支末端权重置 0 或小值,保证训练初期残差路径接近恒等映射,稳;
- 预训练初始化:直接用预训练权重当起点,迁移学习默认,效果最稳。
三、和激活匹配 + 注意点
- 初始化要和激活函数对上:tanh/sigmoid 配 Xavier,ReLU 系配 He。
- GELU/SiLU 不是严格的 ReLU 变体------它们对负值不直接置零、方差不会减半,理论上 He 的"2 倍补偿"理由并不严格成立;实际工程里大模型多沿用 He 经验值,但要心里有数这俩不能简单等同 ReLU 来推。
- Xavier 的折中前提( n i n = n o u t n_{in}=n_{out} nin=nout 时两条件才严格相等)记牢,别把折中说成严格等式。
- 大模型有预训练权重就别从头训;真要从头训,按激活类型选 Xavier/He,并配 warmup、BN/LN、残差连接一起保稳。
面试问题:BatchNorm/LayerNorm/GroupNorm/InstanceNorm 的原理与区别是什么?为什么 Transformer 用 LayerNorm 而不用 BatchNorm?
难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)
归一化层把中间特征拉回零均值、单位方差,再经可学习的缩放 γ \gamma γ、偏移 β \beta β 还原表达能力,作用是稳定激活分布、加速收敛、缓解梯度消失/爆炸,顺带正则。四者的差别全在"沿哪个维度求统计量"。
一、BN 原理
输入记作 N N N(batch) × C \times C ×C(channel) × H × W \times H\times W ×H×W。BN 对每个通道,沿 ( N , H , W ) (N,H,W) (N,H,W) 算均值方差,即每个 channel 一组统计:
x ^ = x − μ B σ B 2 + ϵ , y = γ x ^ + β \hat{x}=\frac{x-\mu_B}{\sqrt{\sigma_B^2+\epsilon}},\quad y=\gamma\hat{x}+\beta x^=σB2+ϵ x−μB,y=γx^+β
训练用当前 batch 统计,测试用训练期累计的移动平均统计------所以 BN 测试依赖 batch。
二、四种 Norm 对比
| 方法 | 求统计的维度 | 一组统计对应 | 对 batch 敏感 | 典型场景 |
|---|---|---|---|---|
| BN | ( N , H , W ) (N,H,W) (N,H,W) | 一个 channel | 是(小 batch 不稳) | CNN、大 batch |
| LN | ( C , H , W ) (C,H,W) (C,H,W) | 一个样本 | 否 | Transformer、RNN |
| IN | ( H , W ) (H,W) (H,W) | 一个样本一个 channel | 否 | 风格迁移、GAN |
| GN | ( C / G , H , W ) (C/G,H,W) (C/G,H,W) | 一个样本一组(G 个组) | 否 | 小 batch CNN(检测、分割) |
- LN:对单个样本的所有特征维一起归一化,和 batch 无关,推理不用外部统计。
- IN:每个样本每个 channel 单独算,常用于风格迁移(剥离内容、保留风格统计)。
- GN:把 channel 分 G 组、组内归一化,是小 batch 下 BN 的替代(batch 太小 BN 估计噪声大时用 GN)。
三、为什么 Transformer 用 LN 不用 BN
- 序列长度可变:BN 按 batch 对固定维度求统计,变长序列下 batch 内各样本长度不一,batch 统计不稳;LN 按样本独立算,不受长度影响。
- batch 常极小:大模型微调/推理 batch 很小甚至为 1,BN 在小 batch 下方差估计噪声大、抖得厉害;LN 和 batch 无关。
- 推理一致性:BN 推理用移动平均统计,和训练 batch 分布有 gap;LN 推理不用外部统计,训练/推理行为一致。
- 语义边界:NLP 里一个样本(token 序列)是一个语义整体,沿特征维归一化合理;BN 跨样本混 token 会破坏样本内语义结构。
- 实证:LN 在 Transformer 上训练更稳、效果更好,已成标准;BN 在 CNN 上仍是主流(空间局部性强、大 batch 能估准)。
四、工程
- CNN 大 batch 用 BN,小 batch(检测/分割)用 GN;Transformer/RNN 用 LN。
- 现代大模型多用 Pre-LN(归一化放在残差子层输入、残差外):深层训练更稳、不易梯度爆炸;经典 Post-LN(残差后归一化)深层易不稳,需要 warmup 兜着。
- BN 推理要切
eval模式用移动平均统计,别用 batch 统计;BN 和 Dropout 共存注意顺序和统计量相互污染。
面试问题:常见的激活函数有哪些(ReLU/GELU/SiLU/SwiGLU)?各自的原理与适用场景是什么?为什么大模型普遍用 GELU/SiLU?
难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)
激活函数给网络引入非线性------没它,多层线性层叠起来等价一层。选型核心看四点:是否缓解梯度消失、计算成本、是否零均值(利于优化)、平滑可导。
一、常见激活函数
- Sigmoid : σ ( x ) = 1 1 + e − x \sigma(x)=\dfrac{1}{1+e^{-x}} σ(x)=1+e−x1,输出 ( 0 , 1 ) (0,1) (0,1)。缺点:饱和区梯度趋零→梯度消失;非零均值→优化有偏移;指数算得贵。少用于隐藏层,多用于二分类输出。
- Tanh : tanh ( x ) \tanh(x) tanh(x),输出 ( − 1 , 1 ) (-1,1) (−1,1),零均值。仍饱和,会梯度消失。早期 RNN 用,现多被 ReLU 系取代。
- ReLU : max ( 0 , x ) \max(0,x) max(0,x)。优点:计算便宜、正区梯度恒 1(不饱和,缓梯度消失)、稀疏激活。缺点:负区梯度恒 0→"死亡 ReLU"(神经元永久不激活);非零均值;原点不可导(用次梯度处理)。CNN 主力。
- LeakyReLU / PReLU : max ( α x , x ) \max(\alpha x,x) max(αx,x), α \alpha α 取小常数(如 0.01)或可学习。负区留小梯度,解决死亡 ReLU。
- GELU : x ⋅ Φ ( x ) x\cdot\Phi(x) x⋅Φ(x), Φ \Phi Φ 是标准正态 CDF。对负值不硬置零而是软门控,性质接近"自适应 Dropout"(相近、非等价)。BERT、GPT、ViT 常用。
- SiLU / Swish : x ⋅ σ ( x ) x\cdot\sigma(x) x⋅σ(x)。和 GELU 形态相近,平滑、有下界无上界。LLaMA 等用,常略优于 ReLU。
- SwiGLU :FFN 用的门控单元,把单路 W 2 σ ( x W 1 ) W_2\,\sigma(xW_1) W2σ(xW1) 换成双路门控:
FFN SwiGLU ( x ) = ( SiLU ( x W 1 ) ⊙ ( x V ) ) W 2 \text{FFN}_{\text{SwiGLU}}(x)=\big(\text{SiLU}(xW_1)\odot(xV)\big)\,W_2 FFNSwiGLU(x)=(SiLU(xW1)⊙(xV))W2
一路 SiLU ( x W 1 ) \text{SiLU}(xW_1) SiLU(xW1) 做激活、一路 x V xV xV 做线性门控,逐元素相乘。LLaMA、PaLM 等标配,同等参数下比 GELU FFN 表现更好。
- ReLU6 : min ( max ( 0 , x ) , 6 ) \min(\max(0,x),6) min(max(0,x),6),双侧饱和,移动端偶尔用。
二、为什么大模型普遍用 GELU/SiLU
- 平滑可导:处处可导,优化更顺,不像 ReLU 原点有折角。
- 负区非零响应:不硬置零,信息不完全丢,缓解死亡神经元。
- 自门控:对输入幅值自适应放行/抑制,自带轻微正则。
- 实证:大模型上 GELU/SiLU 常略优于 ReLU,平滑利于深层稳训练;SwiGLU 进一步提 FFN 表达力。
三、注意点
- GELU"≈自适应 Dropout"是相近非等价,别说成"等价"。
- ReLU 只左饱和(负区),ReLU6 才双侧饱和。
- GELU/SiLU 不是严格的 ReLU 变体:不置零负值、方差不减半,初始化别简单套"He 专为 ReLU"的结论,实际沿用 He 经验但理论上要区分。
- SwiGLU 反向梯度要注意细节:记 a = SiLU ( x W 1 ) a=\text{SiLU}(xW_1) a=SiLU(xW1)、 b = x V b=xV b=xV、上游梯度 g = ∂ L / ∂ o g=\partial L/\partial o g=∂L/∂o,则
∂ L ∂ x = ( ( g W 2 ⊤ ) ⊙ b ) ⊙ SiLU ′ ( x W 1 ) W 1 ⊤ + ( g W 2 ⊤ ) ⊙ a V ⊤ \frac{\partial L}{\partial x}=\Big\\big((gW_2\^{\\!\\top})\\odot b\\big)\\odot \\text{SiLU}'(xW_1)\\BigW_1^{\!\top}+\big(gW_2\^{\\!\\top})\\odot a\\bigV^{\!\top} ∂x∂L=((gW2⊤)⊙b)⊙SiLU′(xW1)W1⊤+(gW2⊤)⊙aV⊤
SiLU ′ \text{SiLU}' SiLU′ 只挂在 x W 1 xW_1 xW1 那一支, x V xV xV 这一支是线性的、没有 SiLU ′ \text{SiLU}' SiLU′;且 a a a 已经是 SiLU ( x W 1 ) \text{SiLU}(xW_1) SiLU(xW1),别再写成 SiLU ( a ) \text{SiLU}(a) SiLU(a)。这条面试追问常考。
面试问题:大模型分布式训练的并行策略有哪些(数据并行/模型并行/管道并行/ZeRO/FSDP)?各自原理与适用场景是什么?
难度评分:⭐⭐⭐⭐ (4/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)
单卡装不下大模型------参数、梯度、优化器状态、激活加起来远超单卡显存,于是要把计算和显存切到多卡,顺带靠数据并行提吞吐。
一、核心并行策略
-
数据并行(DP):每卡完整拷贝一份模型,各处理一部分数据,反向后 all-reduce 同步梯度。优点是实现简单;缺点是每卡存全量模型+优化器状态,显存冗余大,模型超过单卡显存就不能用。
-
张量并行(TP,模型并行的一种):把单层权重切片到多卡(矩阵按列或按行切),各卡算部分矩阵乘,再通信拼回。优点是能训超过单卡显存的宽层;缺点是层内通信频繁,强依赖高速互联(NVLink)。
-
管道并行(PP):把模型按层切到多卡,一卡管若干层,微批次像流水线一样流过去,用 1F1B 调度压气泡。优点是层间通信少;缺点是有流水线气泡(下游等上游),要足够多 micro-batch 填满。
-
ZeRO(零冗余优化器,DeepSpeed):在数据并行基础上分阶段切掉显存冗余:
- ZeRO-1:切优化器状态(最省一档,收益最大);
- ZeRO-2:再切梯度;
- ZeRO-3:再切参数,每卡只存一部分,前向反向按需 all-gather 取回。最省显存,但通信最多。
- 本质是"数据并行 + 显存分片"。
-
FSDP(完全分片数据并行,PyTorch 原生):思路同 ZeRO-3,参数、梯度、优化器状态全分片,前向按需 all-gather 参数。PyTorch 原生集成、易用、生态对接好。
-
序列并行(SP):把激活或序列长度切分到多卡,缓解长序列注意力的显存压力(常配 FlashAttention)。
二、对比
| 策略 | 切分对象 | 通信特点 | 适用 |
|---|---|---|---|
| DP | 数据 | 梯度 all-reduce | 模型装得下单卡 |
| TP | 单层权重 | 层内高频通信,需高速互联 | 层宽大、有 NVLink |
| PP | 模型按层 | 层间少量通信 | 深层网络 |
| ZeRO/FSDP | 参数+梯度+优化器状态 | 按需 gather,通信较多 | 大模型、通用 |
| SP | 激活/序列 | 层内通信 | 长序列 |
三、显存构成(追问常考)
训练显存 ≈ 参数 + 梯度 + 优化器状态 + 激活。AdamW 的优化器状态约是参数量的 2 倍(一阶动量 m m m + 二阶动量 v v v)。混合精度下(FP16 参数/梯度 + FP32 主权重/ m m m/ v v v)单参数约 16 字节,ZeRO-3 把这 16 字节分片到 N N N 卡,每卡约 16 / N 16/N 16/N 字节,显存显著下降。
四、实际组合与选型
- 大模型训练多是混合并行:DP/ZeRO + TP + PP + SP,例如 Megatron-LM 的 3D 并行(TP+PP+DP)。
- 选型:模型装得下单卡 → DP;超单卡 → ZeRO-3/FSDP;层宽大且节点内 NVLink 充足 → 加 TP;层数极深 → 加 PP;序列特长 → 加 SP。
- 并行度越高省显存越多,但通信开销也越大,要在显存和通信之间平衡,不是越切越细越好。
1.3.4.3 进阶训练范式与泛化提升
1. 进阶训练范式与泛化能力提升方法
面试问题:什么是迁移学习?它的核心假设是什么?常见的迁移学习范式有哪些?
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐ (4/5)
一、定义
迁移学习是把从一个任务(源任务)学到的知识用到另一个相关但不同的任务(目标任务)上,提升目标任务的学习性能。深度学习里主要表现为:用大规模数据预训练好的模型当起点,在目标任务上微调,明显减少目标任务所需数据量和训练时间。
二、假设
相关任务之间存在可共享的知识或特征表示------源域和目标域的低层特征(边缘、纹理、语法结构等)有共性,能迁移复用。
三、预训练模型选择原则
- 领域匹配度(最重要):优先选和目标任务领域最接近的预训练模型,领域越匹配、微调数据需求越少、性能一般越好(如医疗文本用医疗文献预训练模型);
- 模型大小与资源匹配:按算力、推理延迟、任务复杂度选合适大小;资源有限可用 LoRA 等方法用上更大模型;
- 预训练数据规模与质量:规模越大质量越高,通用知识越丰富;
- 任务类型匹配:生成任务选 Decoder-only(GPT 系列),理解任务选 Encoder-only(BERT 系列),多模态选 CLIP/LLaVA;
- 开源生态与社区支持:文档完善、社区活跃、权重齐全,便于上手和排错。
四、常见范式
- 基于实例的迁移:重加权源域样本辅助目标域;
- 基于特征的迁移:学域不变特征表示(如 DANN 对抗对齐);
- 基于参数/模型的迁移:预训练 + 微调(最主流),含全参微调、参数高效微调(LoRA/Adapter/Prefix Tuning);
- 基于关系的迁移:迁移源域学到的规则或关系结构。
面试问题:预训练 + 微调范式的核心逻辑是什么?完整训练流程与关键注意事项有哪些?
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)
一、逻辑
预训练是在大规模通用数据上学通用特征表示,微调是把通用知识迁移到特定任务上,用少量任务数据调整参数,快速获得任务特定能力。本质是"先学通用知识,再学专业技能",降低数据需求和训练成本。
二、流程
- 预训练阶段
- 数据准备:收集大规模无标注通用数据(文本、图像);
- 自监督任务:设计无需人工标注的预训练任务(掩码语言模型 MLM、对比学习、下一个 token 预测等);
- 模型训练:从零训大模型,学数据通用分布和特征表示;
- 模型保存:保存预训练权重作为基础模型。
- 微调阶段
- 任务数据准备:收集并标注特定任务数据集;
- 模型加载:加载预训练权重作为初始化;
- 微调策略选择:全参数微调、参数高效微调(LoRA、Adapter、Prefix Tuning 等);
- 训练配置:设较小学习率(一般为预训练的 1/10~1/100)、适当批次和轮次;
- 模型评估:验证集评估,选最优模型。
三、注意事项
- 过拟合风险:微调数据量一般较小,易过拟合,用早停、权重衰减、Dropout 等正则;
- 学习率:过大破坏预训练通用知识,过小收敛过慢;
- 灾难性遗忘:全参数微调可能让模型忘掉预训练通用知识,参数高效微调可有效缓解;
- 数据分布匹配:微调数据分布尽量和实际部署分布一致;
- 训练稳定性:大模型微调易梯度爆炸/消失,需梯度裁剪、混合精度等。
面试问题:对比学习的核心思想与基本原理是什么?它为什么能提升特征表示质量?在 AIGC 中有哪些应用?
难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐ (4/5)
一、思想
对比学习是自监督学习方法,思想是"相似的样本在特征空间里应该距离更近,不相似的应该更远"。靠构造正样本对和负样本对,让模型学到能区分相似与不相似样本的特征表示。
二、基本框架
- 数据增强:对同一样本做两次不同增强得到两个视图,构成正样本对;
- 特征提取:用编码器(CNN、Transformer)把两个视图映射到特征空间;
- 对比损失计算:算正样本对相似度和负样本对相似度,最小化对比损失。
三、经典损失:InfoNCE Loss
L I n f o N C E = − log exp ( sim ( z i , z j ) / τ ) ∑ k = 1 N exp ( sim ( z i , z k ) / τ ) \mathcal{L}{InfoNCE} = -\log \frac{\exp(\text{sim}(z_i, z_j)/\tau)}{\sum{k=1}^{N}\exp(\text{sim}(z_i, z_k)/\tau)} LInfoNCE=−log∑k=1Nexp(sim(zi,zk)/τ)exp(sim(zi,zj)/τ)
其中:
- z i z_i zi 和 z j z_j zj 是正样本对的特征表示;
- z k z_k zk 为负样本特征( k k k 遍历包含正样本的候选集,分母对 N N N 个候选求和);
- sim ( ⋅ , ⋅ ) \text{sim}(\cdot,\cdot) sim(⋅,⋅) 是相似度函数,一般用余弦相似度;
- τ \tau τ 是温度参数,控制相似度分布的尖锐程度;
- N N N 是候选样本总数(包含 1 个正样本和 N − 1 N-1 N−1 个负样本)。
四、为什么能提特征表示质量
- 不依赖人工标签,利用数据自身结构学通用表示;
- 拉近正样本、推远负样本,学到对增强不变的高级语义特征;
- 大量负样本提供丰富判别信号,特征空间结构更清晰。
五、关键技术要点
- 数据增强策略:好的增强应保留语义同时产生足够多样性;
- 负样本数量:更多负样本一般带来更好性能,但增加计算成本;
- 温度参数: τ \tau τ 越小越关注难负样本,越大越关注所有负样本;
- 动量编码器:如 MoCo 用动量更新队列存负样本,突破 batch size 限制负样本数量;
- 对称损失:如 SimCLRv2 同时算 z i z_i zi 对 z j z_j zj 和 z j z_j zj 对 z i z_i zi 的损失,提稳定性。
六、AIGC 中的应用
- 多模态对齐:CLIP 用图文对比学习对齐文本和图像特征空间,是文生图/多模态大模型的基础;
- 表示预训练:为下游生成/理解任务提供高质量视觉或文本编码器;
- 图像检索、人脸识别、推荐系统等需相似度计算的任务;
- 扩散模型条件控制:CLIP 文本特征作为条件引导生成。
面试问题:样本不平衡会对模型训练造成哪些负面影响?从损失层面、训练层面分别有哪些解决方案?
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐ (4/5)
一、负面影响
- 决策边界偏向多数类:模型为最小化总体损失,倾向预测多数类,少数类召回率低;
- 评估指标失真:整体准确率被多数类主导,反映不出少数类性能;
- 训练不充分:少数类样本少,模型难学到其有效特征表示;
- 实际危害大:欺诈检测、疾病诊断等场景漏掉少数类代价极高。
二、数据层面
- 重采样
- 过采样:复制少数类样本,简单但易过拟合;SMOTE 合成少数类样本缓解过拟合;
- 欠采样:删多数类样本,简单但可能丢信息;EasyEnsemble 集成多个欠采样子集缓解信息丢失;
- 混合采样:如 SMOTE+Tomek Links。
- 数据增强:对少数类样本增强(文本回译/同义词;图像旋转/Mixup/CutMix 等)。
三、损失层面
- 类别权重调整 :给少数类分配更高损失权重, l o s s = − ∑ i = 1 N w i y i log ( y ^ i ) loss = -\sum_{i=1}^{N} w_i y_i \log(\hat{y}_i) loss=−∑i=1Nwiyilog(y^i);常见权重 w i = N C × N i w_i = \frac{N}{C \times N_i} wi=C×NiN( N N N 总样本数、 C C C 类别数、 N i N_i Ni 第 i i i 类样本数,即逆频率)。
- 损失函数改进
- Focal Loss:降易分类样本权重、聚焦难分类样本, F L ( p t ) = − α t ( 1 − p t ) γ log ( p t ) FL(p_t) = -\alpha_t (1-p_t)^\gamma \log(p_t) FL(pt)=−αt(1−pt)γlog(pt);
- Dice Loss:基于交并比,对样本不平衡不敏感,常用于分割。
- 集成学习:Bagging 对多数类多次欠采样后集成;Boosting 每轮重点关注前一轮错分的样本。
四、评估指标
- 别用准确率做唯一指标;
- 推荐精确率、召回率、F1、AUC-ROC、AUC-PR、混淆矩阵;
- 极度不平衡时优先用 PR 曲线和 AUC-PR。
面试问题:什么是参数高效微调(PEFT)?LoRA/QLoRA/Adapter/Prefix Tuning 的原理与区别是什么?
难度评分:⭐⭐⭐⭐ (4/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)
全参微调要更新大模型全部参数,显存和存储代价大(每个下游任务都得存一份全量权重),还容易灾难性遗忘。参数高效微调(PEFT)只训少量新增或选定参数(占比常 <1%),冻结主体,明显降显存和存储、缓解遗忘,效果还接近全参微调------是 AIGC 在有限算力下适配多任务的主流做法。
一、主流方法
-
Adapter Tuning:在 Transformer 层里插入小 bottleneck 模块(下投影→非线性→上投影),只训 Adapter,主体冻结。缺点是推理多一层计算。
-
Prefix Tuning / Prompt Tuning:
- Prompt Tuning:在输入 embedding 前加可学连续 prompt 向量,只训这些向量;
- Prefix Tuning:在每层 K/V 前加可学前缀向量(作用更深、更强),常配 MLP 重参数化稳训练。主体冻结,推理序列变长。
-
LoRA(Low-Rank Adaptation) :假设权重更新 Δ W \Delta W ΔW 是低秩的,用两个小矩阵 A ∈ R d × r A\in\mathbb{R}^{d\times r} A∈Rd×r、 B ∈ R r × d B\in\mathbb{R}^{r\times d} B∈Rr×d 逼近 Δ W = B A \Delta W=BA ΔW=BA,只训 A A A、 B B B,原 W W W 冻结:
h = W x + Δ W x = W x + B A x h = Wx + \Delta Wx = Wx + BAx h=Wx+ΔWx=Wx+BAx
r ≪ d r\ll d r≪d(常用 8/16/64),参数量从 d 2 d^2 d2 降到 2 d r 2dr 2dr。一般 A A A 用随机高斯初始化、 B B B 初始化为 0,保证训练开始 Δ W = 0 \Delta W=0 ΔW=0、不破坏预训练。推理时 B A BA BA 可合并进 W W W,零额外延迟。
- QLoRA :在 LoRA 基础上把基座 W W W 用 4-bit NF4 量化存储(明显省显存),LoRA 部分仍用 BF16 训练,配双重量化、分页优化器,让单卡能微调几百亿参数模型。核心是"4-bit 冻结基座 + 高精度小量 LoRA 可训"。
二、对比
| 方法 | 可训位置 | 参数量占比 | 推理额外开销 | 特点 |
|---|---|---|---|---|
| 全参微调 | 全部权重 | 100% | 无 | 显存大、易遗忘 |
| Adapter | 新增 bottleneck 模块 | ~1% | 多一层 | 改结构、推理有额外计算 |
| Prefix/Prompt Tuning | 前缀/prompt 向量 | <1% | 序列变长 | 轻量,深层效果有限 |
| LoRA | 低秩 A/B | <1%(常用) | 可合并,零延迟 | 主流、效果好 |
| QLoRA | LoRA + 4bit 基座 | <1% | 同 LoRA | 单卡微调超大模型 |
三、LoRA 工程要点
- rank r r r:8/16/64,任务越复杂、数据越多可适当加大;太小欠拟合,太大接近全参且易过拟合。
- alpha α \alpha α :缩放系数, Δ W \Delta W ΔW 实际贡献为 α r ⋅ B A \frac{\alpha}{r}\cdot BA rα⋅BA,调 α \alpha α 控制 LoRA 项强度。
- 应用模块:常加在 Q/K/V/O 投影或全部线性层;加在注意力投影是主流。
- 学习率:比全参微调略大(1e-4~1e-3 量级),因可训参数少。
- 多 LoRA:一个基座挂多个任务适配器,即插即用,方便多任务部署。
四、为什么 LoRA 是主流
参数极少、显存友好、能合并进基座(推理零延迟)、效果接近全参微调、工程链路成熟------这是 LoRA 成为当前 AIGC 微调事实标准的原因。资源更紧或模型更大时退到 QLoRA;要动到深层表示又不愿改结构时考虑 Adapter/Prefix。
1.3.4.4 模型评估与泛化分析
1. 模型评估核心方法与泛化能力分析
面试问题:模型评估的核心目标是什么?常用的模型评估方法有哪些?
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐ (4/5)
一、目标
模型评估是量化模型在未知数据上预测能力的过程,用于验证是否达到业务要求、比较不同模型优劣、指导调优。
二、常用方法
- 按数据划分方式
- 留出法(Holdout):随机划分为训练集(70%-80%)和测试集(20%-30%);
- 交叉验证(Cross Validation):分 k 个互不重叠子集,轮流 k-1 训练、1 测试,取 k 次平均;
- 自助法(Bootstrap):有放回采样生成训练集,未被采样的作测试集,适合小数据集。
- 按评估指标类型
- 分类:准确率、精确率、召回率、F1、ROC/AUC、PR 曲线;
- 回归:均方误差(MSE)、平均绝对误差(MAE)、决定系数( R 2 R^2 R2);
- 生成(AIGC 特有):BLEU、ROUGE、Perplexity(困惑度)、FID(Fréchet Inception Distance)、CLIP Score、人类评估。
- 按评估阶段
- 离线评估:在历史数据集上评估,快速验证效果;
- 在线 A/B 测试:真实业务环境中随机分流比业务指标,是最终验证模型价值的金标准。
面试问题:什么是交叉验证?为什么要做交叉验证?常见的交叉验证方式有哪些?深度学习场景使用有什么注意事项?
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐ (4/5)
一、定义
交叉验证是更可靠的评估方法,通过多次划分数据集重复训练测试,获得更稳定、更准确的性能估计。
二、常见类型
- k 折交叉验证(k-fold CV):最常用,数据集随机分 k 个大小相等的互不重叠子集,每次选 1 个作测试集、其余 k-1 个作训练集,重复 k 次取平均;
- 留一交叉验证(LOOCV):k 等于样本数的特殊情况,每次留一个样本作测试集;
- 分层 k 折交叉验证(Stratified k-fold):划分时保持每子集正负样本比例和原始一致,适合样本不平衡场景。
三、为什么要做
- 解决留出法的随机性:单次留出法结果受划分随机性影响大,交叉验证多次划分取平均更稳;
- 更充分利用数据:所有样本都被用于训练和测试,特别适合小数据集;
- 有效避免过拟合:更准确评估泛化能力,帮选最优超参;
- 检测数据分布问题:若 k 次结果差异大,说明数据可能分布不均或质量有问题。
四、深度学习场景注意
- 深度学习训练成本高,常减少折数(5 折或 3 折)或用小数据子集做交叉验证;
- 大模型微调一般用单一固定验证集做超参搜索,很少用交叉验证;只在数据量较小且算力允许时用 3-5 折,最终用全部数据训练;
- 折数过高(如 LOOCV)训练次数过多、成本不可接受;
- 注意数据泄露:每折的预处理统计量只能在训练折上算。
面试问题:介绍一下精确率、召回率、F1 分数的定义与各自的适用场景?
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)
一、基于混淆矩阵
混淆矩阵四个基本元素:
- TP(真正例):实际为正,预测为正;
- FN(假负例):实际为正,预测为负;
- FP(假正例):实际为负,预测为正;
- TN(真负例):实际为负,预测为负。
三个指标:
- 精确率(Precision):所有被预测为正的样本中实际为正的比例
P = T P T P + F P P = \frac{TP}{TP+FP} P=TP+FPTP
- 召回率(Recall):所有实际为正的样本中被正确预测为正的比例
R = T P T P + F N R = \frac{TP}{TP+FN} R=TP+FNTP
- F1 分数:精确率和召回率的调和平均
F 1 = 2 × P × R P + R F1 = \frac{2 \times P \times R}{P+R} F1=P+R2×P×R
二、适用场景
- 精确率优先:错误预测为正代价高时,如垃圾邮件过滤(正常邮件误判为垃圾邮件代价高)、医疗诊断阳性确认;
- 召回率优先:遗漏正样本代价高时,如癌症筛查、欺诈检测、安全漏洞检测;
- F1 优先:需平衡精确率和召回率时,如信息检索、文本分类、AIGC 内容质量评估。
工程提示:AIGC 内容审核要按业务调阈值平衡精确率和召回率,如涉政内容审核要极高召回率,即使牺牲精确率也在所不惜。
面试问题:什么是 ROC 曲线与 AUC 值?它和 PR 曲线的核心差异及适用场景是什么?类别不平衡场景为什么优先用 PR 曲线?
难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐ (4/5)
一、ROC 曲线与 AUC
- ROC 曲线(Receiver Operating Characteristic) :以假阳性率(FPR)为横轴、真阳性率(TPR)为纵轴绘制。
- 真阳性率 T P R = T P / ( T P + F N ) TPR = TP/(TP+FN) TPR=TP/(TP+FN):所有正样本中被正确预测为正的比例;
- 假阳性率 F P R = F P / ( F P + T N ) FPR = FP/(FP+TN) FPR=FP/(FP+TN):所有负样本中被错误预测为正的比例。
- AUC 值(Area Under Curve) :ROC 曲线下面积,取值 0 , 1 0,1 0,1。AUC=1 完美分类器;AUC=0.5 随机分类器;AUC<0.5 比随机还差。
二、PR 曲线
PR 曲线(Precision-Recall)以召回率(Recall)为横轴、精确率(Precision)为纵轴绘制。
三、核心差异
| 维度 | ROC 曲线 | PR 曲线 |
|---|---|---|
| 对样本不平衡的敏感度 | 不敏感,正负比例变化时曲线基本稳定 | 非常敏感,正负比例变化时曲线显著变化 |
| 关注重点 | 模型区分正负样本的整体能力 | 模型在正样本上的预测准确性 |
| 曲线下面积 | AUC | AP(Average Precision) |
四、类别不平衡时为什么优先用 PR 曲线
负样本远多于正样本时,FPR = FP/(FP+TN) 分母 TN 极大,即使 FP 很多 FPR 也可能很小,ROC 曲线看起来依然很好,掩盖了模型在正样本上表现差的事实。而 PR 曲线的精确率 P = TP/(TP+FP) 直接反映正样本预测的准确程度,对正样本稀少的场景更敏感、更能真实反映性能。
五、适用场景
- ROC/AUC:正负样本分布均衡、需评估整体区分能力、比较不同模型整体性能;
- PR 曲线:样本极度不平衡(异常检测、欺诈识别、罕见病诊断)、更关注正样本预测准确性。
工程提示:AIGC 分类任务(如内容审核)负样本远多于正样本,PR 曲线比 ROC 曲线更能真实反映模型性能。
面试问题:什么是泛化误差?如何用偏差-方差的权衡关系指导模型调优?
难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐ (4/5)
一、回答
泛化误差是模型在未知测试数据上的期望误差,是衡量泛化能力的指标。偏差-方差分解是理解它的重要理论工具。
二、泛化误差的分解
E ( y − f \^ ( x ) ) 2 = Bias ( f ^ ( x ) ) 2 + Var ( f ^ ( x ) ) + σ 2 E(y-\\hat{f}(x))\^2 = \text{Bias}(\hat{f}(x))^2 + \text{Var}(\hat{f}(x)) + \sigma^2 E(y−f\^(x))2=Bias(f^(x))2+Var(f^(x))+σ2
- 偏差(Bias) :模型预测期望值与真实值的差异,反映拟合能力。高偏差:模型过简单,学不到数据真实规律,导致欠拟合。
- 方差(Variance) :模型在不同训练集上预测结果的差异,反映稳定性。高方差:模型过复杂,对训练数据微小变化敏感,导致过拟合。
- 噪声( σ 2 \sigma^2 σ2):数据本身不可约误差,无法通过改进模型消除。
三、偏差-方差权衡指导调优
- 模型复杂度低:偏差高、方差低,总误差主要由偏差贡献 → 增大模型、减少正则、延长训练;
- 模型复杂度高:偏差低、方差高,总误差主要由方差贡献 → 增加数据、增强正则、降模型复杂度;
- 最优复杂度是偏差与方差之和最小的点。
工程提示:AIGC 大模型时代,随参数量增加偏差持续降低,方差可通过增加训练数据有效控制,这是"大模型 + 大数据"范式成功的理论基础之一。
面试问题:如何通过训练指标判断模型是过拟合还是欠拟合?分别有哪些系统性的解决方案与调优优先级?
难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)
一、定义与表现
- 欠拟合(Underfitting):模型在训练集和测试集上都差,学不到数据基本规律。典型表现:训练 loss 高、训练指标也低、验证 loss 和训练 loss 同步高。
- 过拟合(Overfitting):模型在训练集表现极好但测试集差,学到了噪声和特异性特征。典型表现:训练 loss 持续下降但验证 loss 开始上升、训练和验证指标差距大。
二、通过指标判断
- 训练 loss 高 + 验证 loss 高 → 欠拟合;
- 训练 loss 低 + 验证 loss 高 → 过拟合;
- 训练 loss 低 + 验证 loss 低且收敛 → 拟合良好。
三、主要成因
- 欠拟合:模型复杂度太低、训练时间不足、特征工程不到位、学习率过小;
- 过拟合:模型复杂度过高、训练数据量不足、数据分布和真实分布不一致、训练时间过长。
四、解决方案与优先级
- 解决欠拟合(增能力)
- 增加模型复杂度:更深网络、更多参数;
- 增加特征数量和质量:更细致特征工程;
- 调整训练策略:增大学习率、延长训练、减少正则强度。
- 解决过拟合(数据 > 正则 > 模型)
- 数据层面:增加训练数据量、数据增强、数据清洗去噪(最高优先级);
- 模型层面:降低模型复杂度、加正则(L1/L2/Dropout);
- 训练层面:早停、集成学习;
- AIGC 特有:用 LoRA/QLoRA 轻量微调、限制微调步数、指令调优数据增强。
面试问题:AIGC 生成模型(大语言模型、文生图扩散模型)的评估和传统判别模型有什么核心区别?
难度评分:⭐⭐⭐⭐ (4/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)
一、和传统判别模型的区别
- 评估对象不同:判别模型输出是确定标签、可用准确率等客观指标;生成模型输出是开放式生成内容,没有唯一正确答案,需多维质量评估。
- 指标性质不同:判别任务指标客观可自动计算;生成任务很多指标(相关性、连贯性、安全性、美感)依赖人工或模型评判。
- 维度更多:生成评估要兼顾正确性、流畅性、多样性、一致性、安全性、可控性等多个维度。
二、大语言模型常用评估
- 自动指标 :
- 困惑度(Perplexity):衡量语言模型对文本的建模能力,越低越好;
- BLEU:n-gram 精确率,用于机器翻译/文本生成;
- ROUGE:n-gram 召回率,用于摘要生成;
- 代码/推理任务 pass@k:生成 k 个候选中至少一个通过的比例。
- 基准测试:MMLU、HumanEval、GSM8K、C-Eval 等标准化题库。
- 模型评判(LLM-as-a-judge):用强模型(GPT-4)对生成结果打分,成本低、规模可扩展。
- 人类偏好评估:Elo 评分、胜率对比(A vs B),是生成质量金标准。
三、文生图扩散模型常用评估
- 保真度与质量:FID(Fréchet Inception Distance,越低越好,衡量生成分布与真实分布距离)、IS(Inception Score);
- 图文一致性:CLIP Score(生成图与文本条件的 CLIP 相似度);
- 多样性与覆盖度:CMMD、Coverage 指标;
- 人工评估:整体美感、结构合理性、文本-图像匹配度、伪影评分。
四、工程提示
- AIGC 评估必须组合自动指标 + 模型评判 + 人工偏好,单一指标容易误导;
- 自动指标(如 BLEU/FID)和人类真实偏好有 gap,最终以人工/在线 A/B 为准;
- 评估要关注安全性(毒性、偏见、版权)和可控性(指令遵循、条件控制)。