【AIGC面试面经第10期】深度学习基础模型训练篇

注:以下内容摘自社区共建开源项目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. 模型训练中数据预处理与质量优化的核心方法)

1.3.2 正则化基础

[1. 正则化的定义、分类及常用方法](#1. 正则化的定义、分类及常用方法)

1.3.3 学习率与优化器基础

[1. 学习率核心作用与调优策略](#1. 学习率核心作用与调优策略)

[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. 训练稳定性提升与常见异常排查方法)

1.3.4.3 进阶训练范式与泛化提升

[1. 进阶训练范式与泛化能力提升方法](#1. 进阶训练范式与泛化能力提升方法)

1.3.4.4 模型评估与泛化分析

[1. 模型评估核心方法与泛化能力分析](#1. 模型评估核心方法与泛化能力分析)

1.3.1 数据工程基础

1. 模型训练中数据预处理与质量优化的核心方法

面试问题:数据标注常见类型及适用任务有哪些?标注质量如何评估?

难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐ (4/5)

标注这一步基本决定了模型能做到的上限。质量上靠交叉标注、黄金标准集校验、标注员能力分级来卡;效率上靠"模型预标注 + 人工修正"提速度;成本上靠主动学习挑难例、数据增强省标注量。

一、常见标注类型与适用任务

  1. 文本标注(大模型核心)
    • 内容:文本分类、命名实体识别(NER)、关系抽取、摘要、对话上下文、指令-响应对、RLHF 偏好排序、安全合规
    • 任务:大语言模型预训练/指令微调/RLHF、文本生成、对话、机器翻译、信息抽取
  2. 图像标注
    • 内容:分类、检测框、语义分割、实例分割、关键点、图像描述(caption)、图文匹配
    • 任务:文生图(Stable Diffusion/Midjourney)、图像理解、多模态大模型(CLIP/GPT-4V)、OCR
  3. 音频标注
    • 内容:语音转文字(ASR)、情感、声纹、音效分类、TTS 文本-语音对
    • 任务:语音识别/生成、声纹识别、音频生成、多模态语音交互
  4. 视频标注
    • 内容:动作识别、目标跟踪、时序分割、视频描述、视频-文本对齐
    • 任务:文生视频(Sora)、视频理解、动作捕捉、视频编辑
  5. 3D 点云标注
    • 内容:3D 检测框、3D 语义分割、点云配准、场景重建
    • 任务:具身智能、机器人导航、自动驾驶、3D 生成
  6. 多模态对齐标注
    • 内容:图文跨模态对齐、音视频跨模态对齐、多模态指令-响应对
    • 任务:多模态大模型、跨模态检索、图文/音视频生成
  7. 大模型专属高级标注
    • 内容:复杂指令遵循、思维链(CoT)、工具调用、RLHF 人类偏好排序、安全/价值观对齐
    • 任务:大模型能力提升、工具使用训练、安全与价值观对齐

二、标注质量评估方法

  1. 黄金标准集:由领域专家标注的基准集,所有结果与之对比。适合高精度场景,如大模型指令标注、安全对齐标注。
  2. 多人交叉标注:2-3 人独立标同一批,算一致性。适合主观性强的任务,如 RLHF 偏好排序、情感标注、CoT 标注。
  3. 分层抽样复核:按难度、批次分层抽 5%-20% 人工复核,适合大规模项目的日常监控。
  4. 标注员能力校准:定期做标准化测试,按准确率和一致性分级,用于长期团队管理。
  5. 模型反馈:用标注数据训一版初模,从模型预测错误反推标注问题,适合迭代式流程。

三、量化指标

  1. 标注准确率 = 正确数 / 总数 × 100%。不同任务门槛不同:医疗影像 ≥ 98.5%,大模型指令 ≥ 95%,通用图像分类 ≥ 90%。检测任务用 IoU 量化框,一般要求 IoU ≥ 0.5。

  2. 标注一致性(用 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)

噪声标签就是和样本真实语义对不上的错误标注,在互联网爬取数据、自动标注数据这种大规模场景里很普遍。

一、分类

  1. 对称噪声(均匀噪声):标签随机错,被错标成其他类的概率相同,实际中少见。
  2. 非对称噪声(类相关噪声):标签偏向错成语义相近的类(如"哈士奇"标成"阿拉斯加"),这是真实数据里最主要的噪声类型。

二、主要来源(AIGC 场景)

  • 标注员主观失误、标准不统一;
  • 样本本身语义模糊(边界样本、多标签样本);
  • 自动标注/伪标签出错(AIGC 大规模数据的主要来源);
  • 爬取过程标签错位。

三、对模型的影响

  • 微调阶段过拟合噪声,泛化掉得快;
  • 生成内容语义错误、风格混乱;
  • RLHF 阶段奖励信号失真;
  • 多轮对话上下文理解退化。

四、处理框架

  1. 数据层面(首选)
    • 大模型清洗:用通用大模型(Qwen、Llama)自动识别低质量标注、修语义错误,比传统方法快得多;
    • 置信度过滤:用预训练模型预测,滤掉"预测与标签不一致且置信度 > 0.9"的高风险样本;
    • 去重与一致性校验:删重复样本,同一内容的多个标注投票取优。
  2. 损失函数层面
    • 鲁棒损失:替掉对噪声敏感的标准交叉熵。广义交叉熵(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),压低模型对错误标签的过度自信。
  3. 训练策略层面
    • 早停:模型先拟合干净数据、后拟合噪声,在验证集准确率开始掉的时候停;
    • 课程学习:先训高置信干净样本,再逐步放低置信样本进来;
    • 自训练/伪标签修正:用训练中模型的高置信预测替换原始噪声标签。
  4. AIGC 场景特殊优化
    • 指令微调数据分级:按质量分 A/B/C 级,训练时给不同权重;
    • RLHF 噪声隔离:用奖励模型过滤低质量人类反馈,挡住错误奖励信号;
    • LoRA 微调:低秩适配比全参数微调对噪声更鲁棒,过拟合风险低。

实际里通常数据清洗打底,再叠标签平滑和早停;AIGC 大规模数据尤其先把自动清洗跑起来。

面试问题:常用的数据增强方式有哪些?CV/NLP/多模态生成任务分别有哪些专属方法?

难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)

数据增强就是不增加真实采集成本的前提下扩充数据、提泛化、压过拟合、提升对分布偏移的鲁棒性。

一、按范式分类的通用方法

  1. 传统手工设计:基于领域先验,计算成本极低。如随机裁剪、水平翻转、亮度调整、同义词替换。
  2. 自动增强:用强化学习/进化算法搜最优增强组合,效果好但训练贵。如 AutoAugment、RandAugment(轻量、工业界最常用)、TrivialAugment。
  3. 混合样本增强:线性混合多个样本及其标签,平滑决策边界。如 Mixup、CutMix(一般比 Mixup 好)、Manifold Mixup(特征层混合)。
  4. 生成式增强:用生成模型合成符合真实分布的新样本,是 AIGC 解决小样本、长尾的关键手段。如扩散模型、大语言模型、GAN 系列。

二、不同任务的专属方法

  1. CV
    • 基础变换:几何(旋转、缩放、平移)、像素级(亮度、对比度、高斯噪声);
    • 区域擦除:Cutout、GridMask、Random Erasing(提遮挡鲁棒性);
    • 检测专属:Mosaic、MixUp、CutMix(YOLO 系标配,明显提小目标检测);
    • 3D 专属:点云旋转、平移、随机采样、法向量扰动;
    • 红线:别用改变语义的变换(数字识别翻转 6/9、车牌识别大角度旋转)。
  2. NLP
    • 词级:同义词替换(WordNet)、随机插入/删除/交换(EDA,轻量首选)、随机掩码;
    • 句子级:回译(效果最好但贵)、随机打乱语序、大模型复述;
    • 对抗:FGM、PGD、FreeAT(提对抗鲁棒性);
    • 注意:同义词替换别造成语义漂移;大模型复述是当前 NLP 增强主流。
  3. 语音(ASR)
    • 时域:语速、时间拉伸、音量、随机裁剪;
    • 频域:频谱掩蔽(SpecAugment,工业界事实标准);
    • 环境:加背景噪声、混响、回声;
    • 优势:SpecAugment 极便宜,可在线训练时做。
  4. 多模态大模型
    • 图文对齐:随机裁剪图像、随机截断文本、跨模态随机掩码;
    • 模态替换:用生成模型替换某一模态(图转文、文转图);
    • 价值:提跨模态对齐和泛化。

容易追问:CutMix 比 Mixup 好在哪?生成式增强怎么避免引入分布外噪声?

面试问题:深度学习训练前的数据清洗有哪些核心方法?核心处理逻辑是什么?

难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)

训练前先把数据洗干净,这一步基本决定模型能做到的水平。脏数据里的错误、不一致、缺失、重复、乱码都会被模型学进去。

一、五类方法

  1. 完整性:处理缺失值,保证字段完整。
  2. 一致性:统一格式、单位、命名,解决冲突。
  3. 准确性:识别异常值、错误值、逻辑矛盾。
  4. 唯一性:去重,避免模型过拟合重复样本。
  5. 有效性:滤掉空文本、乱码、低质量样本。

二、工程要点

  • 先做全局探查(统计缺失率、重复率、分布),再定清洗策略;
  • 清洗要可复现,别靠手动操作;
  • 留原始备份,记录每一步操作;
  • AIGC 额外过滤有害内容、低质量文本、重复对话。

面试问题:什么是数据长尾分布?可以从哪些层面解决数据长尾问题?

难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)

一、定义

长尾分布指类别频率服从幂律(Zipf 定律):少数头部类别占绝大多数样本,大量尾部类别样本极少。

  • 头部:前 10%-20% 的类,贡献 80%-90% 的样本;
  • 尾部:后 80%-90% 的类,只贡献 10%-20% 的样本;
  • 曲线:头部陡降,尾部平缓拉得很长。

AIGC 典型场景:微调时常见任务占比高、小众任务稀缺;多模态生成里常见物体描述多、罕见物体少;语音识别里常用词充足、专业术语和方言稀疏。

二、负面影响

  1. 性能失衡:头部过拟合、对扰动敏感;尾部严重欠拟合、召回率甚至趋近 0;决策边界被头部压着往尾部偏。
  2. 生成有偏见且单一:概率空间塌到高频模式,生成同质化;对小众文化、边缘群体内容生成差甚至出错。
  3. 知识稀疏与幻觉:低频知识没有稳定向量表示;同一问题换问法答案差很多;这是大模型幻觉的核心成因之一。
  4. 评估失真:整体准确率被头部主导,"Demo 好、上线差";20% 的长尾 case 可能占 50% 的用户投诉。

三、处理方法(按落地优先级)

  1. 数据层面(首选)
    • 重采样:上采样(尾部重复,小心过拟合)、下采样(头部随机丢,小心信息损失)、混合采样;
    • 数据增强:对尾部针对性增强(文本回译/同义词;图像裁剪/旋转/风格迁移);
    • 合成数据:AIGC 的优势,用大模型生成尾部类别高质量样本;
    • 数据融合:引外部公开集补尾部。
  2. 算法层面(不改数据分布)
    • 损失改进:Focal Loss(降易分头部权重、聚焦难分尾部)、LDAM Loss(按类别有效样本数的边际损失,专为长尾设计)、Balanced Softmax(按样本量归一化);
    • 解耦训练:先在全量数据学通用特征,再在均衡数据上微调分类器;
    • 集成:训多个针对不同类别子集的模型,加权融合。
  3. 模型层面(AIGC 特有)
    • 加权微调:给尾部样本更高学习率或损失权重;
    • LoRA 分层:对尾部类别单独训专属 LoRA 适配器;
    • RAG:把尾部知识存向量库,推理时检索补充;
    • 零样本/少样本:靠大模型泛化,用提示工程提尾部性能。
  4. 评估层面(别漏掉)
    • 不能只看整体准确率;
    • 重点看尾部类别的召回率、F1;
    • 用混淆矩阵分析类别间错误模式。

1.3.2 正则化基础

1. 正则化的定义、分类及常用方法

面试问题:什么是正则化?它从原理上为什么能提升模型泛化能力?显式正则化和隐式正则化有什么区别?

难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)

一、定义

正则化是防过拟合、提泛化的手段,背后是奥卡姆剃刀:能解释数据的模型里,选最简单的那个。

做法上,要么在损失里加惩罚项,要么对模型结构或训练过程加约束,限制模型表达能力,让它不去死抠训练数据里的噪声和异常值,从而在测试数据上表现更好。

二、为什么能提泛化

  • 限制复杂度:惩罚项约束参数取值,让模型学整体规律而不是噪声细节;
  • 缩小假设空间:把最优解关进更小的参数空间,降低过拟合噪声的可能;
  • 引入随机性:Dropout、BN 训练时引入扰动,近似集成,提鲁棒性;
  • 引导平坦极小值:权重衰减、SWA 让模型收敛到更平坦的极小值,泛化更好。

三、显式 vs 隐式

  1. 显式正则化:人为显式设计、在损失或训练流程里看得见的手段。如 L1/L2、Dropout、早停、数据增强、标签平滑、权重衰减。
  2. 隐式正则化:不是显式加的,而是优化算法或训练机制本身顺带带来的。如 SGD 偏好平坦解;BN 的 batch 统计量噪声;随机打乱数据;预训练当初始化;小批量的梯度噪声。

四、常用方法

  1. 参数范数惩罚: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)。
  2. 数据增强:翻转、旋转、裁剪、Mixup、CutMix 等,几乎无成本提泛化。
  3. Dropout 系列:训练时随机失活并缩放保留单元(Inverted Dropout),测试时无需额外缩放。
  4. 早停:监控验证集性能,不再提升就提前停。
  5. BN:归一化层输入,batch 统计量噪声顺带正则。
  6. 其他:标签平滑、权重约束、噪声注入、模型集成。

落地优先级:数据增强 > 早停 > L2 > BN > Dropout > 其他。

面试问题:介绍一下早停(EarlyStopping)的定义、原理、作用及实操注意事项

难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)

一、定义

早停是无侵入式正则化里最简单的一个:训练中持续盯验证集性能,连续若干 epoch 不再提升就提前停,留下泛化最好的那版权重。

二、原理

训练分三个阶段:

  1. 欠拟合:训练、验证集性能一起稳步涨;
  2. 最佳拟合:验证集性能到顶;
  3. 过拟合:训练还在涨,验证开始掉。

早停就是卡在性能由升转降的那个点停,不让模型继续死抠训练噪声。本质是靠限制迭代次数控制复杂度,符合奥卡姆剃刀。

三、作用

  1. 防过拟合:拦住模型对训练数据过度优化;
  2. 省算力:一般能省 30%-80% 的训练时间;
  3. 免调轮数:不用预先定死训练多少轮,按表现动态决定;
  4. 直接选验证集最优权重。

四、工程要点

  1. 监控指标:优先 val_loss,比准确率稳、更能反映泛化潜力;分类任务也可看验证准确率。
  2. 参数:
    • patience:允许性能不提升的最大连续轮数,一般 5-20。太小会被训练波动误杀,太大会浪费资源;
    • min_delta:判定"提升"的最小幅度,一般取指标量级的 1%-5%,免得把微小波动当提升。
  3. 保存策略:存验证集最优那版权重,不是最后一个 epoch 的------这是早停能起作用的关键。
  4. 验证集:必须和训练集同分布,绝不掺测试集。
  5. 坑:数据增强效果不行或验证集太小时别用早停,容易过早终止。

面试问题:介绍一下 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 不稀疏

  1. 导数角度 :L1 导数是常数 ± λ \pm\lambda ±λ(次梯度),不管参数多大,梯度都在。参数接近 0 时 L1 梯度仍然很大,会直接把它推到 0;L2 导数是 2 λ w 2\lambda w 2λw,参数接近 0 时梯度也趋近 0,只会把参数压小、压不到 0。
  2. 几何角度: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

二、作用

  1. 防过自信:不让模型给预测塞太高的置信度,提泛化;
  2. 缓解标签噪声:降低错误标签的影响;
  3. 提鲁棒性:对输入扰动不敏感;
  4. 防梯度消失: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.SGDtorch.optim.AdamW 都有 weight_decay 参数,AdamW 实现的是解耦权重衰减;
  • 别同时用 L2 正则项和权重衰减,否则强度翻倍;
  • 大模型训练用 AdamW + 权重衰减,不要用 Adam + L2。

面试问题:不同正则化方法分别适用于什么场景?实际训练中如何选型与组合使用?

难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐ (4/5)

一、各方法适用场景

  1. L2/权重衰减:深度学习的默认基线,数值稳、优化友好,适合整体限制参数大小。大模型里是 AdamW 的标配。
  2. L1:需要特征选择、希望模型稀疏可解释时用,如传统线性模型;深度学习里少单独用,多配 Elastic Net。
  3. Dropout/DropPath:全连接层和深层网络/Transformer,数据量中等、易过拟合时;DropPath 专用于残差块、ViT。
  4. 早停:通用、几乎无成本,有验证集就该开。
  5. 数据增强:CV/NLP/语音/多模态通用,数据不够、要提分布鲁棒性时。
  6. 标签平滑:多分类、词表预测、知识蒸馏;大模型预训练常用。
  7. BN:CNN 和中等批量场景,顺带加速收敛和隐式正则。

二、选型与组合

  • 按数据规模:数据少 → 数据增强 + Dropout + 早停;数据多 → 权重衰减 + 早停,Dropout 可减弱。
  • 按模型规模:大模型 → 权重衰减(AdamW)+ DropPath + 标签平滑,别上高 Dropout 拖慢收敛;小模型 → Dropout + 数据增强。
  • 按任务:CV → 数据增强 + BN + 权重衰减;NLP/大模型 → DropPath + 权重衰减 + 标签平滑;生成模型 → 权重衰减 + 早停,慎用高 Dropout(影响生成质量)。
  • 能叠但别过度:正则手段可叠加,但要盯验证集,过度正则会欠拟合、训不收敛。
  • 优先级:数据增强 + 早停做底线标配,再叠权重衰减,最后看情况加 Dropout/标签平滑。

1.3.3 学习率与优化器基础

1. 学习率核心作用与调优策略

面试问题:介绍一下学习率是什么?学习率过大/过小分别会对模型训练造成什么影响?

难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)

一、定义

学习率控制每次梯度下降更新参数的步长。梯度给方向,学习率决定沿这个方向迈多大一步。

二、作用

决定参数往损失最小值方向走的速度,直接卡收敛速度和最终性能。

三、过大/过小

  1. 过小:
    • 收敛极慢,训练成本高;
    • 容易陷局部最优或鞍点跳不出来;
    • 长时间停在次优解。
  2. 过大:
    • 步长太大,损失震荡甚至发散,收敛不了;
    • 跨过最优区,在最优点附近来回震荡;
    • 数值不稳,可能触发梯度爆炸或 NaN。
  3. 合适:损失平稳下降,最终收敛到不错的极小值。

四、经验

  • 传统小模型:1e-3 量级起点(配 Adam);
  • 大模型预训练:1e-4 ~ 5e-4;
  • 大模型微调:1e-5 ~ 5e-5(远小于预训练,别破坏预训练知识);
  • 配 warmup 和衰减能进一步稳。

面试问题:常用的学习率衰减方法有哪些?各自的特点与适用场景是什么?

难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐ (4/5)

学习率衰减让训练后期逐步缩步长:前期快速逼近、后期精细收敛。常用 5 种:

  1. 固定步长衰减(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⌋;
    • 实现简单、高效,最基础的衰减。
  2. 指数衰减(Exponential Decay)
    • 学习率随步数指数下降;
    • 公式: l r = l r i n i t × γ e p o c h lr = lr_{init} \times \gamma^{epoch} lr=lrinit×γepoch;
    • 衰减快,适合要快速收敛的场景。
  3. 余弦退火(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π));
    • 平滑,能更好探索参数空间,大模型里用得多。
  4. 线性衰减(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;
    • 简单、衰减均匀,大语言模型主流之一。
  5. 带重启的余弦退火(Cosine Annealing with Warm Restarts,SGDR)
    • 余弦退火基础上周期性把学习率重置回初始值;
    • 能帮模型跳出局部最优。

选型:大模型多用"线性 warmup + 余弦退火/线性衰减";传统 CV 常用 Step Decay;要跳出局部最优可用带重启的余弦退火。

面试问题:学习率 warmup 的核心目的是什么?常用的 warmup 方式有哪些?如何设计 warmup 策略?

难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐ (4/5)

一、warmup 的目的

warmup 是训练初期让学习率从很小的值慢慢升到预设初始学习率。目的三点:

  1. 缓解初始化不稳定:参数随机初始化时梯度方向不准,一开始就上大学习率会震荡甚至发散。
  2. 保护底层特征:微调预训练模型时,warmup 避免大学习率破坏预训练好的底层特征。
  3. 稳定训练:帮训练初期平稳过渡;同时缓解 Adam 等优化器二阶矩估计初期不准的问题。

二、常用 warmup 策略

  1. 线性 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;
    • 简单、稳,大模型标配。
  2. 常数 warmup
    • warmup 阶段保持一个较小的固定学习率,结束切到初始学习率;
    • 最简单,适合小模型。
  3. 指数 warmup (较少用)
    • 从接近 0 的极小值指数增到初始学习率;
    • 前期慢、后期快,更保护初始化。
  4. 余弦 warmup
    • 按余弦从 0 增到初始学习率;
    • 平滑,和后续余弦退火衔接自然。

三、关键参数

  • warmup 步数:一般总步数的 1%-10%。大模型常用 1000-10000 步;
  • 初始学习率:warmup 结束达到的学习率,按模型大小、batch、任务调;
  • 衔接:warmup 结束后直接切到主衰减策略(线性衰减、余弦退火)。

面试问题:工业界常用的学习率组合策略是什么?大模型训练中为什么普遍采用「线性 warmup + 余弦退火」?

难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)

一、工业界常用组合

主流是"warmup + 主衰减"两段式:训练初期 warmup 把学习率从 0 线性升到峰值,随后用主衰减(余弦退火或线性衰减)逐步降到最小值。最经典就是「线性 warmup + 余弦退火」。

二、为什么大模型普遍用「线性 warmup + 余弦退火」

  1. 线性 warmup 解决初期不稳
    • 大模型参数多、初始化后梯度方差大,初期大学习率易发散;
    • Adam 类二阶矩初期不准,warmup 给统计量时间收敛到合理值;
    • 线性形式简单、稳,工程默认。
  2. 余弦退火兼顾探索和精细收敛
    • 曲线平滑、中前期降得慢(保留较大学习率探索参数空间)、后期降得快(精细收敛到极小值);
    • 比 Step Decay 突变式衰减平滑,损失曲线稳,不易因突变震荡;
    • 比纯线性衰减,余弦前期保留更久的高学习率,探索更充分。
  3. 工程友好、可复现
    • 超参少(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)

一、常用调优方法

  1. 经验法:按模型规模和任务套经验区间(小模型 1e-3、预训练 1e-4~5e-4、微调 1e-5~5e-5),再微调。
  2. 网格/随机搜索:候选区间内网格或随机采几个学习率,短周期比验证集表现。
  3. LR Finder:自动定位合理学习率区间,工业界最常用。
  4. 基于损失的自动调度:ReduceLROnPlateau,验证损失 plateau 时自动降学习率。
  5. 超参优化工具:Optuna、Ray Tune、W&B 做贝叶斯搜索。

二、LR Finder 原理

Leslie Smith 提出:让学习率从极小值按指数逐 step 递增,每个 step 做一次前向反向并记损失,画"学习率-损失"曲线。

操作流程

  1. 初始化模型,设极小起始学习率(如 1e-7);
  2. 每个 batch 后把学习率乘固定因子(如 1.01)指数增大;
  3. 记每个学习率对应的损失;
  4. 画 lr-loss 曲线,看损失下降最快(斜率最陡)的区间。

确定原则:选损失下降最陡处对应的学习率,一般取该区间的 1/10 或左端点做初始学习率,别取最低点(最低点往往已开始发散)。

三、注意

  • 用小数据子集跑短周期,成本低;
  • 找到的是初始峰值学习率,仍要配 warmup + 衰减;
  • 损失曲线常需平滑(滑动平均)才能读出稳定区间;
  • 大模型训练前可用它校验学习率量级,但最终仍以完整训练曲线为准。

2. 介绍一下优化器原理与选型

面试问题:优化器的本质原理是什么?简述从 SGD 到 AdamW 的核心发展脉络,各阶段分别解决了什么问题?

难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)

一、优化器在干什么

优化器利用损失对参数的梯度,按一定规则迭代更新参数、最小化损失,解决的是"怎么高效找到损失最小值"。学习率是"步长",优化器是"怎么迈这一步"的算法,负责算梯度方向并套学习率更新参数。

二、发展脉络

分四个阶段,每个解决前一个的痛点:

  1. 基础梯度下降(SGD)
    • 直接梯度乘学习率更新 w ← w − η g w \leftarrow w - \eta g w←w−ηg;
    • 缺点:收敛慢、对学习率敏感、易陷局部最优、震荡大。
  2. 动量加速(SGD-Momentum、Nesterov)
    • 引入动量,累积历史梯度,给更新"惯性";
    • 加速收敛、减少震荡、更容易冲出局部最优。
  3. 自适应学习率(AdaGrad、RMSprop、Adam)
    • 给每个参数自适应调学习率,不再全局统一;
    • Adam 结合动量和自适应,收敛稳、快、对超参不敏感,成当时主流。
  4. 大模型优化(AdamW、Lion、Sophia)
    • 针对大模型内存和效率优化;
    • AdamW 修正 Adam 权重衰减的实现错误,成最通用优化器;Lion、Sophia 进一步提大模型训练效率。

三、工业界主流

  1. AdamW(最通用、大模型默认):在 Adam 上解耦权重衰减,收敛快、鲁棒、对超参不敏感,泛化优于 Adam。适用几乎所有深度学习任务。
  2. Lion(大模型新宠):符号优化器,只用梯度符号更新,只跟动量(优化器状态内存比 AdamW 减半),训练快 2%-15%。适合大语言模型预训练,尤其千亿级以上。
  3. SGD with Momentum:泛化好、最终精度高,但收敛慢、对学习率敏感。适合 CV(如 ResNet)、对泛化要求极高的场景。
  4. RMSprop:梯度平方指数衰减平均自适应调学习率,解决 AdaGrad 学习率过早衰减。适合 RNN/LSTM 等传统序列模型。
  5. 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

  1. 收敛快且稳:大模型参数多、训练贵,AdamW 对超参不敏感、收敛稳,降低调参成本和训练失败风险。
  2. 泛化优于 Adam:解耦权重衰减后正则更合理,最终泛化更好。
  3. 适配大模型训练范式:和 warmup + 余弦退火、梯度裁剪、混合精度组合良好,工程链路成熟。
  4. 生态共识: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 的关键原因。

三、选型

  1. 大模型预训练/微调:首选 AdamW。收敛快、稳、泛化好,当前工业界标准。
  2. 对最终精度要求极高的 CV 任务(如 ResNet/ImageNet 刷分):可用 SGD+Momentum,泛化和最终精度常优于自适应优化器。
  3. 快速实验/调参预算有限:Adam/AdamW,几乎免调参,适合快速验证想法。
  4. RNN/LSTM 传统序列:RMSprop 或 Adam。
  5. 资源受限/超大模型:Lion(内存减半)。

四、经验

  • 小数据/强过拟合风险:AdamW + 权重衰减 + warmup;
  • 收敛慢用自适应优化器,精度差再换 SGD 精调;
  • 别在 Adam 上用 L2 正则替代权重衰减(见 q4-2-6)。

面试问题:目前 AIGC 场景(大模型、扩散模型)常用的优化器有哪些?选型的核心依据是什么?

难度评分:⭐⭐⭐⭐ (4/5) | 考察频率:⭐⭐⭐⭐ (4/5)

一、AIGC 场景常用优化器

  1. AdamW(绝对主流):大语言模型预训练/微调、扩散模型训练(Stable Diffusion 等)的事实标准,收敛稳、泛化好、工程链路成熟。
  2. Lion:符号优化器,优化器状态内存比 AdamW 减半(总训练显存约省 15%-25%),适合千亿级大模型预训练降本;Google 系大模型常用,但小模型/微调上不一定比 AdamW 强。
  3. Adafactor:用矩阵分解存二阶矩,明显降显存,适合显存受限的超大模型训练(如 T5/Flan-T5)。
  4. Sophia(前沿):轻量二阶优化器,收敛约 AdamW 的 2 倍,还在验证推广阶段。
  5. SGD+Momentum:部分 GAN 变体里生成器和判别器可能用不同优化器(如判别器 SGD、生成器 Adam),但主流架构(StyleGAN 系列)普遍用 Adam/AdamW。

二、选型依据

  1. 模型规模与显存预算:超大模型显存紧 → Adafactor/Lion 降显存;中等规模 → AdamW。
  2. 收敛稳定性与失败成本:训练成本越高越倾向 AdamW(最稳);实验阶段可试 Lion/Sophia 提速。
  3. 泛化与最终质量:生成质量要求高 → AdamW;追求极致精度的小模型 → SGD 精调。
  4. 与训练栈兼容性:是否支持 ZeRO/FSDP 分布式、混合精度、梯度检查点等;AdamW 生态最完善。
  5. 任务阶段:预训练重稳定与吞吐 → 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 是(只调超参和选模型,不更新参数)
测试集 最终评估泛化能力,模拟未知真实数据上的表现 否(一旦用过,模型不能再动)

二、划分原则

  1. 分布一致:三个集必须同分布,否则评估没意义(不能用中文训练集评估英文模型)。
  2. 严格互斥:三个集无任何重叠,避免数据泄露导致评估失真。
  3. 代表性:每个集都反映原始数据特征(如分层抽样保证类别比例)。
  4. 测试集独立:测试集只用一次,只做最终泛化评估,绝不用于参数更新、超参调优或早停。

三、常见落地方式

  1. 基础随机划分(留出法):最通用,适合独立同分布(IID)数据。标准比例 7:2:1(训练:验证:测试);大数据集(>100 万)可调到 9:0.5:0.5,少量验证/测试就够稳定评估。
  2. 分层抽样:分类任务用,尤其类别不平衡。严格按各类别比例划分,保证三集类别分布一致,避免稀有类在某集缺失。
  3. 时序划分:时间序列任务强制用。严格按时间顺序(如前 70% 训练、中 20% 验证、后 10% 测试),绝不能随机划分,否则未来数据泄露。
  4. k 折交叉验证:适合小数据集(<1 万)。分 k 份(常用 5/10 折),每次 k-1 训练、1 验证,重复 k 次取平均。最终仍需独立测试集评估泛化。

四、大数据集 vs 小数据集

  • 大数据集:直接留出法,比例可极端到 98:1:1,数据够多,少量验证/测试统计上已稳;不用交叉验证(贵且没必要);可在线评估、持续采样。
  • 小数据集:用 k 折交叉验证把数据用足;验证集和测试集都要保证代表性,必要时分层抽样;可配数据增强扩有效训练量;更要警惕单次划分的随机性偏差。

五、工程要点

  • 划分前别做全局预处理(归一化、去重),必须先划分,再只用训练集算预处理统计量(均值、方差)套到所有集;
  • 大模型微调时验证集留 1000-5000 样本,够监控过拟合和早停就行。

面试问题:AIGC 场景(大模型微调、文生图扩散模型)的数据集划分和传统判别任务有什么区别?有哪些特殊注意事项?

难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐ (4/5)

一、和传统判别任务的区别

  1. 评估对象不同:判别任务有明确标签、可用准确率等客观指标;AIGC 生成任务输出是开放式生成内容,验证/测试常需人工或模型评判(LLM-as-a-judge、人类偏好对比)。
  2. 数据形态不同:指令微调数据是"指令-响应"对,扩散模型是"图文对/条件-图像对",划分时要保持对完整,不能把一条指令-响应对拆到不同集。
  3. 分布匹配要求更高:微调数据要和实际部署场景的任务、风格、长度分布一致,否则生成质量和对齐性下降。
  4. 去重与防泄露更严:预训练数据巨大,必须严格去重(精确去重 + 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(批次大小):一次参数更新同时处理的样本数。

二、过大/过小

  1. 过小(<8):
    • 梯度噪声大,训练震荡难收敛;
    • 吃不满 GPU 并行算力,吞吐低、训练慢;
    • 但梯度噪声带隐式正则,有时泛化更好。
  2. 过大(>2048):
    • 梯度更新次数减少,收敛变慢(相同 epoch 下);
    • 易收敛到尖锐局部最小值,泛化掉;
    • 显存占用大,硬件要求高;
    • 要同步增大学习率(线性缩放规则),调参更复杂。
  3. 适中:一般泛化最好,收敛和效率平衡得好,具体量级视任务而定(CV 分类常数十到数百)。

三、显存

Batch Size 越大,激活值和梯度占显存越多;混合精度和梯度累积能在不增显存下等效增大有效批次。

四、选择原则

  1. 硬件上限优先:先测 GPU 显存能装下的最大 batch size,这是最基础的约束。
  2. 训练稳定性:过小梯度噪声大、震荡;过大更新次数少、收敛慢。在稳定和效率间平衡。
  3. 泛化:适中的 batch size 一般泛化最好;过大易收敛到尖锐局部最小值。
  4. 分布式线性扩展: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。

二、特殊约束

  1. 显存是硬约束:微调受显存限制,micro-batch 常用 1、2、4、8、16,再靠梯度累积等效增大有效批次。
  2. 序列长度影响大:LLM 训练显存随序列长度平方增长(注意力),长序列下 batch size 必须更小,常用序列并行/FlashAttention 缓解。
  3. 全局 batch size 仍要够大:保证训练稳定和吞吐,靠数据并行(DP/ZeRO/FSDP)把全局 batch size 撑到数百甚至数千。
  4. 学习率要同步:全局 batch size 变时学习率按线性缩放规则调,并配 warmup。
  5. 扩散模型特殊:训练时常需较大 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)

一、基本流程

  1. 定优化目标:定评估指标(验证 loss、下游任务精度、生成质量)和约束(算力、时间)。
  2. 划定搜索空间:按经验给每个超参候选区间(学习率对数均匀、dropout 线性等)。
  3. 选调优方法:手动/网格/随机/贝叶斯,按算力和模型成本选。
  4. 小规模预筛:用小数据子集或小模型跑短周期,剔除明显差的配置。
  5. 完整训练评估:对候选配置做完整训练,比验证集表现。
  6. 细化与复现:最优点附近细化搜索,最终固定超参并复现。

二、原则

  1. 按影响力排序调:先调影响最大的------学习率 > batch size > 正则强度 > 网络结构参数。
  2. 调优顺序:先学习率和 batch size,再正则参数,最后网络结构参数。
  3. 用早停:调优过程用早停省训练时间。
  4. 别碰测试集:超参调优只在验证集上做,测试集泄露会严重过估。
  5. 避免验证集过拟合:别过度调参,否则在验证集上过拟合;留独立测试集做最终确认。
  6. 固定随机种子:保证可复现,减少比较中的噪声。
  7. 一次只改少数变量:控制变量法,别同时改多个超参导致无法归因。

面试问题:常用的超参数调优方法有哪些(网格搜索/随机搜索/贝叶斯优化)?各自的优缺点与适用场景是什么?

难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)

一、常用方法

  1. 手动调优
    • 基于经验调关键超参;
    • 优点:灵活、能结合领域知识;缺点:依赖经验、难复现;
    • 适用:绝大多数项目日常调参。
  2. 网格搜索(Grid Search)
    • 遍历所有超参组合;
    • 优点:简单、穷举;缺点:维度灾难,计算成本极高;
    • 适用:超参数极少的情况,工业界已很少用。
  3. 随机搜索(Random Search)
    • 超参空间随机采样组合评估;
    • 优点:比网格搜索高效(重要超参获得更多采样)、易并行;缺点:可能错过最优;
    • 适用:超参数较多,工业界主流方法。
  4. 贝叶斯优化(Bayesian Optimization)
    • 基于历史评估建概率代理模型(如高斯过程/TPE),指导下一次采样方向;
    • 优点:效率远高于随机搜索,样本利用率高;缺点:串行性强、实现复杂、有开销;
    • 适用:训练成本高的复杂模型(如大模型),单次评估昂贵时收益最大。

二、自动化工具

Optuna(TPE/支持剪枝)、Ray Tune(分布式)、Weights & Biases Sweeps,集成多种高效算法,支持并行调优和可视化。

三、选型

  • 超参少 + 训练快 → 网格/随机;
  • 超参多 + 训练快 → 随机搜索;
  • 训练昂贵(大模型)→ 贝叶斯优化 + 早停剪枝。

面试问题:AIGC 大模型/扩散模型的超参数调优和传统小模型有什么核心区别?有哪些专属的调优原则?

难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐ (4/5)

一、和传统小模型的区别

  1. 单次训练成本极高:大模型一次完整训练动辄几小时到几天、烧巨额算力,没法像小模型那样大量网格搜索,必须用贝叶斯优化 + 小规模代理任务预筛。
  2. 搜索空间维度高且耦合:学习率、batch size、warmup、序列长度、权重衰减强耦合,孤立调一个超参容易失效。
  3. 评估困难且昂贵:生成质量要人工或 LLM-as-judge,没法像小模型那样用单一准确率快速判别。
  4. Scaling Law 指导:大模型调参可用 scaling law 外推,而不是纯试错。

二、专属原则

  1. 代理任务预筛:用小数据/小模型/短序列做超参预筛,再迁移到大模型全量训练验证。
  2. 遵循 Scaling Law:用计算最优缩放(Chinchilla 等)定模型大小、数据量、batch size 配比,避免盲目调参。
  3. 关键超参优先且保守:学习率和 warmup 最关键,先在小规模定区间,全量训练只做微调。
  4. batch size 与学习率联动:全局 batch size 变时按线性缩放规则调学习率,并同步调 warmup 步数。
  5. 贝叶斯优化 + 早停剪枝:用 Optuna 等做贝叶斯搜索,配 median/multi-arm 剪枝提前终止差的试验。
  6. 复用经验配方:优先迁移同规模开源模型(LLaMA 等)的超参配方,再小范围微调。
  7. 生成质量多维评估:用 FID/CLIP Score/人工偏好 + 自动指标组合,避免单指标误导。
1.3.4.2 训练稳定性与异常排查

1. 训练稳定性提升与常见异常排查方法

面试问题:梯度消失、梯度爆炸与梯度震荡的核心区别是什么?分别是什么原因导致的?有哪些解决方法?

难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)

一、原因

梯度消失和爆炸本质都是反向传播链式乘法效应:

  • 激活函数导数绝对值小于 1 时,多层相乘梯度指数衰减,浅层参数几乎不更新(梯度消失);
  • 导数绝对值大于 1 时,多层相乘梯度指数增长,参数更新步长过大,模型震荡发散(梯度爆炸)。

二、诱因

  1. 网络过深:层数越多,链式累积越明显;
  2. 激活函数不当:Sigmoid、Tanh 大部分区域导数小于 1,易梯度消失;
  3. 权重初始化不合理:过大易爆炸,过小易消失;
  4. 学习率过高:加剧爆炸。

三、解决方法

  • 梯度消失:用 ReLU/GELU 等激活、残差连接(ResNet)、BN、LSTM/GRU 门控、预训练+微调。
  • 梯度爆炸:梯度裁剪、权重正则、降学习率、BN。

四、和梯度震荡的区别

问题 本质 表现 主要原因
梯度消失 梯度过小 损失下降缓慢,浅层参数不更新 激活函数、网络过深
梯度爆炸 梯度过大 损失急剧上升,模型发散 权重初始化、学习率过高
梯度震荡 梯度方向频繁变化 损失曲线上下波动,收敛缓慢 学习率过高、数据分布不均、优化器选择不当

面试问题:梯度裁剪(Gradient Clipping)为何能提升训练稳定性?阈值如何确定?大模型训练中有什么注意事项?

难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐ (4/5)

一、为什么用

  1. 防梯度爆炸:限制梯度最大范数,避免更新步长过大导致发散;
  2. 提稳:RNN、Transformer 等序列模型尤其需要,它们容易梯度爆炸;
  3. 允许更高学习率:有裁剪保护时可适当提高学习率加快收敛;
  4. 处理异常样本:个别异常样本产生极大梯度时,裁剪能压住其负面影响。

二、阈值怎么定

  1. 经验法(最常用):初始值一般 1.0~10.0;Transformer 常用 1.0;RNN 常用 5.0。
  2. 动态阈值:算所有梯度范数统计量(均值、标准差),阈值设为均值 + k 倍标准差(k 一般 2~3),自适应不同训练阶段。
  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 的区别

  1. BN 统计量:BatchNorm 统计量基于每个小 micro-batch 算,和真正的大 batch 不同,可能影响效果(用 LN/SyncBN 可缓解)。
  2. 显存:梯度累积不增峰值显存,直接增大 batch size 显存线性增长。
  3. 计算结果:梯度意义下等价,但有 BN 时统计不等价;用 LN(如 Transformer)则高度等价。
  4. 学习率:累积增大有效批次后,学习率一般要按线性缩放规则调。

四、适用场景

  • 显存不够装大批次训练;
  • 大模型单卡显存撑不起大批次;
  • 小批次训练不稳的任务(检测、分割);
  • 分布式节点少时靠梯度累积增加有效批次。

面试问题:混合精度训练的核心原理是什么?FP16 和 BF16 如何选择?为什么大模型训练普遍用 BF16?

难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)

一、原理

混合精度训练同时用 FP16 和 FP32:

  • 权重、激活、梯度用 FP16 存储和计算,省显存、快;
  • 权重主备份用 FP32 存,避免精度损失导致训练不稳;
  • 用损失缩放(Loss Scaling)防 FP16 下梯度下溢为 0。

二、关键技术

  1. FP32 主权重备份:参数更新时把 FP16 梯度转 FP32 更新 FP32 主权重,再转回 FP16 做前向。
  2. 损失缩放:把损失乘较大缩放因子(如 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

  1. 数值范围和 FP32 相同:BF16 指数位 8 位和 FP32 一致,几乎不会梯度下溢/溢出;
  2. 无需损失缩放:训练更简单稳,省掉动态 loss scaling 的工程负担;
  3. 硬件加速:现代 GPU(Ampere 及以上)对 BF16 有专门硬件加速;
  4. 大模型梯度动态范围大: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 用恒定较高学习率在平坦区域等间隔采样权重;也有变种配循环学习率或余弦退火,每个周期结束时存权重再取平均;
  • 能找到更平坦的损失极小值点。

三、对泛化的作用

  1. 找更平坦的极小值:平坦极小值一般泛化更好;
  2. 减少过拟合:平均多个权重相当于集成多个模型;
  3. 平滑参数更新:减少高频波动,模型更稳。

四、对鲁棒性的作用

  1. 对输入扰动更鲁棒:平均后模型对微小输入变化不敏感;
  2. 对超参数变化更鲁棒:SWA 对学习率选择不敏感;
  3. 对训练数据变化更鲁棒:EMA 平滑训练数据噪声。

五、工程

  • EMA 一般在整个训练过程持续做;
  • SWA 一般在训练最后 10%~20% 迭代做;
  • 两者可结合:先 EMA 训练,再用 SWA 做最终平均;
  • 推理用平均后权重,一般能涨 1%~3% 性能;扩散模型推理几乎必用 EMA 权重。

面试问题:训练中出现 NaN/Inf 的常见原因有哪些?有什么系统的排查与解决方法?

难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐ (4/5)

一、常见原因

  1. 梯度爆炸:梯度过大,参数更新后出现 NaN。
  2. 损失计算错误:对数函数输入 0 或负数 log ⁡ ( 0 ) \log(0) log(0);除法分母为 0;交叉熵中标签和输出不匹配。
  3. 学习率过高:更新步长过大,损失急剧上升。
  4. 数据问题:输入存在 NaN/Inf;归一化不当导致数值过大或过小。
  5. 混合精度问题:FP16 数值溢出;损失缩放因子设置不当。
  6. 权重初始化不当:权重过大导致前向激活值爆炸。

二、排查方法

  1. 定位位置:用 torch.autograd.detect_anomaly() 自动检测产生 NaN 的操作;逐步打印损失和梯度数值,确定哪一步出问题。
  2. 检查数据:验证输入是否有 NaN/Inf:torch.isnan(x).any();检查归一化是否正确。
  3. 检查损失函数:损失计算前加数值检查;对数函数加极小值 log ⁡ ( x + 1 e − 8 ) \log(x + 1e-8) log(x+1e−8);除法加分母保护。
  4. 调超参:降学习率;开梯度裁剪;调混合精度损失缩放因子。
  5. 检查模型结构:验证权重初始化是否合理;查是否有数值不稳定操作(指数函数、平方根)。

三、快速修复

  1. 开梯度裁剪,阈值设 1.0;
  2. 学习率降到原来 1/10;
  3. 损失计算里加数值保护;
  4. 暂时关掉混合精度确认是不是精度问题;
  5. 用更小 batch size。

面试问题:常见的权重初始化方法有哪些(Xavier/He)?原理是什么?为什么初始化对训练如此重要?

难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐ (4/5)

权重初始化决定训练的起点,前向激活和反向梯度的方差能不能逐层稳住,基本就看它。初始化不好,训练还没开始就已经梯度消失或爆炸了。

一、为什么初始化重要

目标:让各层激活方差和梯度方差尽量保持一致,信号能稳定地前向传播、反向回传。坏初始化的典型坑:

  • 全零或常数初始化:所有神经元同质、对称性无法打破,前向输出一样、反向梯度一样,根本学不动;
  • 过大:前向激活逐层爆炸,梯度爆炸,很快 NaN;
  • 过小:激活和梯度逐层衰减,梯度消失;
  • 随机但方差没对上:方差逐层累积失稳,照样发散或消失。

二、核心方法

  1. 随机初始化(基础):高斯或均匀采样,打破对称性,但方差要按下面方法选,不能随便。

  2. 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 这类零均值、近线性区间的对称激活。
  3. 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。
  4. 其他

    • 正交初始化:权重矩阵正交化,常用于 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

  1. 序列长度可变:BN 按 batch 对固定维度求统计,变长序列下 batch 内各样本长度不一,batch 统计不稳;LN 按样本独立算,不受长度影响。
  2. batch 常极小:大模型微调/推理 batch 很小甚至为 1,BN 在小 batch 下方差估计噪声大、抖得厉害;LN 和 batch 无关。
  3. 推理一致性:BN 推理用移动平均统计,和训练 batch 分布有 gap;LN 推理不用外部统计,训练/推理行为一致。
  4. 语义边界:NLP 里一个样本(token 序列)是一个语义整体,沿特征维归一化合理;BN 跨样本混 token 会破坏样本内语义结构。
  5. 实证: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)

激活函数给网络引入非线性------没它,多层线性层叠起来等价一层。选型核心看四点:是否缓解梯度消失、计算成本、是否零均值(利于优化)、平滑可导。

一、常见激活函数

  1. Sigmoid : σ ( x ) = 1 1 + e − x \sigma(x)=\dfrac{1}{1+e^{-x}} σ(x)=1+e−x1,输出 ( 0 , 1 ) (0,1) (0,1)。缺点:饱和区梯度趋零→梯度消失;非零均值→优化有偏移;指数算得贵。少用于隐藏层,多用于二分类输出。
  2. Tanh : tanh ⁡ ( x ) \tanh(x) tanh(x),输出 ( − 1 , 1 ) (-1,1) (−1,1),零均值。仍饱和,会梯度消失。早期 RNN 用,现多被 ReLU 系取代。
  3. ReLU : max ⁡ ( 0 , x ) \max(0,x) max(0,x)。优点:计算便宜、正区梯度恒 1(不饱和,缓梯度消失)、稀疏激活。缺点:负区梯度恒 0→"死亡 ReLU"(神经元永久不激活);非零均值;原点不可导(用次梯度处理)。CNN 主力。
  4. LeakyReLU / PReLU : max ⁡ ( α x , x ) \max(\alpha x,x) max(αx,x), α \alpha α 取小常数(如 0.01)或可学习。负区留小梯度,解决死亡 ReLU。
  5. GELU : x ⋅ Φ ( x ) x\cdot\Phi(x) x⋅Φ(x), Φ \Phi Φ 是标准正态 CDF。对负值不硬置零而是软门控,性质接近"自适应 Dropout"(相近、非等价)。BERT、GPT、ViT 常用。
  6. SiLU / Swish : x ⋅ σ ( x ) x\cdot\sigma(x) x⋅σ(x)。和 GELU 形态相近,平滑、有下界无上界。LLaMA 等用,常略优于 ReLU。
  7. 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 表现更好。

  1. ReLU6 : min ⁡ ( max ⁡ ( 0 , x ) , 6 ) \min(\max(0,x),6) min(max(0,x),6),双侧饱和,移动端偶尔用。

二、为什么大模型普遍用 GELU/SiLU

  1. 平滑可导:处处可导,优化更顺,不像 ReLU 原点有折角。
  2. 负区非零响应:不硬置零,信息不完全丢,缓解死亡神经元。
  3. 自门控:对输入幅值自适应放行/抑制,自带轻微正则。
  4. 实证:大模型上 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)

单卡装不下大模型------参数、梯度、优化器状态、激活加起来远超单卡显存,于是要把计算和显存切到多卡,顺带靠数据并行提吞吐。

一、核心并行策略

  1. 数据并行(DP):每卡完整拷贝一份模型,各处理一部分数据,反向后 all-reduce 同步梯度。优点是实现简单;缺点是每卡存全量模型+优化器状态,显存冗余大,模型超过单卡显存就不能用。

  2. 张量并行(TP,模型并行的一种):把单层权重切片到多卡(矩阵按列或按行切),各卡算部分矩阵乘,再通信拼回。优点是能训超过单卡显存的宽层;缺点是层内通信频繁,强依赖高速互联(NVLink)。

  3. 管道并行(PP):把模型按层切到多卡,一卡管若干层,微批次像流水线一样流过去,用 1F1B 调度压气泡。优点是层间通信少;缺点是有流水线气泡(下游等上游),要足够多 micro-batch 填满。

  4. ZeRO(零冗余优化器,DeepSpeed):在数据并行基础上分阶段切掉显存冗余:

    • ZeRO-1:切优化器状态(最省一档,收益最大);
    • ZeRO-2:再切梯度;
    • ZeRO-3:再切参数,每卡只存一部分,前向反向按需 all-gather 取回。最省显存,但通信最多。
    • 本质是"数据并行 + 显存分片"。
  5. FSDP(完全分片数据并行,PyTorch 原生):思路同 ZeRO-3,参数、梯度、优化器状态全分片,前向按需 all-gather 参数。PyTorch 原生集成、易用、生态对接好。

  6. 序列并行(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)

一、定义

迁移学习是把从一个任务(源任务)学到的知识用到另一个相关但不同的任务(目标任务)上,提升目标任务的学习性能。深度学习里主要表现为:用大规模数据预训练好的模型当起点,在目标任务上微调,明显减少目标任务所需数据量和训练时间。

二、假设

相关任务之间存在可共享的知识或特征表示------源域和目标域的低层特征(边缘、纹理、语法结构等)有共性,能迁移复用。

三、预训练模型选择原则

  1. 领域匹配度(最重要):优先选和目标任务领域最接近的预训练模型,领域越匹配、微调数据需求越少、性能一般越好(如医疗文本用医疗文献预训练模型);
  2. 模型大小与资源匹配:按算力、推理延迟、任务复杂度选合适大小;资源有限可用 LoRA 等方法用上更大模型;
  3. 预训练数据规模与质量:规模越大质量越高,通用知识越丰富;
  4. 任务类型匹配:生成任务选 Decoder-only(GPT 系列),理解任务选 Encoder-only(BERT 系列),多模态选 CLIP/LLaVA;
  5. 开源生态与社区支持:文档完善、社区活跃、权重齐全,便于上手和排错。

四、常见范式

  1. 基于实例的迁移:重加权源域样本辅助目标域;
  2. 基于特征的迁移:学域不变特征表示(如 DANN 对抗对齐);
  3. 基于参数/模型的迁移:预训练 + 微调(最主流),含全参微调、参数高效微调(LoRA/Adapter/Prefix Tuning);
  4. 基于关系的迁移:迁移源域学到的规则或关系结构。

面试问题:预训练 + 微调范式的核心逻辑是什么?完整训练流程与关键注意事项有哪些?

难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)

一、逻辑

预训练是在大规模通用数据上学通用特征表示,微调是把通用知识迁移到特定任务上,用少量任务数据调整参数,快速获得任务特定能力。本质是"先学通用知识,再学专业技能",降低数据需求和训练成本。

二、流程

  1. 预训练阶段
    • 数据准备:收集大规模无标注通用数据(文本、图像);
    • 自监督任务:设计无需人工标注的预训练任务(掩码语言模型 MLM、对比学习、下一个 token 预测等);
    • 模型训练:从零训大模型,学数据通用分布和特征表示;
    • 模型保存:保存预训练权重作为基础模型。
  2. 微调阶段
    • 任务数据准备:收集并标注特定任务数据集;
    • 模型加载:加载预训练权重作为初始化;
    • 微调策略选择:全参数微调、参数高效微调(LoRA、Adapter、Prefix Tuning 等);
    • 训练配置:设较小学习率(一般为预训练的 1/10~1/100)、适当批次和轮次;
    • 模型评估:验证集评估,选最优模型。

三、注意事项

  • 过拟合风险:微调数据量一般较小,易过拟合,用早停、权重衰减、Dropout 等正则;
  • 学习率:过大破坏预训练通用知识,过小收敛过慢;
  • 灾难性遗忘:全参数微调可能让模型忘掉预训练通用知识,参数高效微调可有效缓解;
  • 数据分布匹配:微调数据分布尽量和实际部署分布一致;
  • 训练稳定性:大模型微调易梯度爆炸/消失,需梯度裁剪、混合精度等。

面试问题:对比学习的核心思想与基本原理是什么?它为什么能提升特征表示质量?在 AIGC 中有哪些应用?

难度评分:⭐⭐⭐ (3/5) | 考察频率:⭐⭐⭐⭐ (4/5)

一、思想

对比学习是自监督学习方法,思想是"相似的样本在特征空间里应该距离更近,不相似的应该更远"。靠构造正样本对和负样本对,让模型学到能区分相似与不相似样本的特征表示。

二、基本框架

  1. 数据增强:对同一样本做两次不同增强得到两个视图,构成正样本对;
  2. 特征提取:用编码器(CNN、Transformer)把两个视图映射到特征空间;
  3. 对比损失计算:算正样本对相似度和负样本对相似度,最小化对比损失。

三、经典损失: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 个负样本)。

四、为什么能提特征表示质量

  1. 不依赖人工标签,利用数据自身结构学通用表示;
  2. 拉近正样本、推远负样本,学到对增强不变的高级语义特征;
  3. 大量负样本提供丰富判别信号,特征空间结构更清晰。

五、关键技术要点

  1. 数据增强策略:好的增强应保留语义同时产生足够多样性;
  2. 负样本数量:更多负样本一般带来更好性能,但增加计算成本;
  3. 温度参数: τ \tau τ 越小越关注难负样本,越大越关注所有负样本;
  4. 动量编码器:如 MoCo 用动量更新队列存负样本,突破 batch size 限制负样本数量;
  5. 对称损失:如 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)

一、负面影响

  1. 决策边界偏向多数类:模型为最小化总体损失,倾向预测多数类,少数类召回率低;
  2. 评估指标失真:整体准确率被多数类主导,反映不出少数类性能;
  3. 训练不充分:少数类样本少,模型难学到其有效特征表示;
  4. 实际危害大:欺诈检测、疾病诊断等场景漏掉少数类代价极高。

二、数据层面

  1. 重采样
    • 过采样:复制少数类样本,简单但易过拟合;SMOTE 合成少数类样本缓解过拟合;
    • 欠采样:删多数类样本,简单但可能丢信息;EasyEnsemble 集成多个欠采样子集缓解信息丢失;
    • 混合采样:如 SMOTE+Tomek Links。
  2. 数据增强:对少数类样本增强(文本回译/同义词;图像旋转/Mixup/CutMix 等)。

三、损失层面

  1. 类别权重调整 :给少数类分配更高损失权重, 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 类样本数,即逆频率)。
  2. 损失函数改进
    • 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:基于交并比,对样本不平衡不敏感,常用于分割。
  3. 集成学习:Bagging 对多数类多次欠采样后集成;Boosting 每轮重点关注前一轮错分的样本。

四、评估指标

  • 别用准确率做唯一指标;
  • 推荐精确率、召回率、F1、AUC-ROC、AUC-PR、混淆矩阵;
  • 极度不平衡时优先用 PR 曲线和 AUC-PR。

面试问题:什么是参数高效微调(PEFT)?LoRA/QLoRA/Adapter/Prefix Tuning 的原理与区别是什么?

难度评分:⭐⭐⭐⭐ (4/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)

全参微调要更新大模型全部参数,显存和存储代价大(每个下游任务都得存一份全量权重),还容易灾难性遗忘。参数高效微调(PEFT)只训少量新增或选定参数(占比常 <1%),冻结主体,明显降显存和存储、缓解遗忘,效果还接近全参微调------是 AIGC 在有限算力下适配多任务的主流做法。

一、主流方法

  1. Adapter Tuning:在 Transformer 层里插入小 bottleneck 模块(下投影→非线性→上投影),只训 Adapter,主体冻结。缺点是推理多一层计算。

  2. Prefix Tuning / Prompt Tuning

    • Prompt Tuning:在输入 embedding 前加可学连续 prompt 向量,只训这些向量;
    • Prefix Tuning:在每层 K/V 前加可学前缀向量(作用更深、更强),常配 MLP 重参数化稳训练。主体冻结,推理序列变长。
  3. 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,零额外延迟。

  1. 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)

一、目标

模型评估是量化模型在未知数据上预测能力的过程,用于验证是否达到业务要求、比较不同模型优劣、指导调优。

二、常用方法

  1. 按数据划分方式
    • 留出法(Holdout):随机划分为训练集(70%-80%)和测试集(20%-30%);
    • 交叉验证(Cross Validation):分 k 个互不重叠子集,轮流 k-1 训练、1 测试,取 k 次平均;
    • 自助法(Bootstrap):有放回采样生成训练集,未被采样的作测试集,适合小数据集。
  2. 按评估指标类型
    • 分类:准确率、精确率、召回率、F1、ROC/AUC、PR 曲线;
    • 回归:均方误差(MSE)、平均绝对误差(MAE)、决定系数( R 2 R^2 R2);
    • 生成(AIGC 特有):BLEU、ROUGE、Perplexity(困惑度)、FID(Fréchet Inception Distance)、CLIP Score、人类评估。
  3. 按评估阶段
    • 离线评估:在历史数据集上评估,快速验证效果;
    • 在线 A/B 测试:真实业务环境中随机分流比业务指标,是最终验证模型价值的金标准。

面试问题:什么是交叉验证?为什么要做交叉验证?常见的交叉验证方式有哪些?深度学习场景使用有什么注意事项?

难度评分:⭐⭐ (2/5) | 考察频率:⭐⭐⭐⭐ (4/5)

一、定义

交叉验证是更可靠的评估方法,通过多次划分数据集重复训练测试,获得更稳定、更准确的性能估计。

二、常见类型

  • k 折交叉验证(k-fold CV):最常用,数据集随机分 k 个大小相等的互不重叠子集,每次选 1 个作测试集、其余 k-1 个作训练集,重复 k 次取平均;
  • 留一交叉验证(LOOCV):k 等于样本数的特殊情况,每次留一个样本作测试集;
  • 分层 k 折交叉验证(Stratified k-fold):划分时保持每子集正负样本比例和原始一致,适合样本不平衡场景。

三、为什么要做

  1. 解决留出法的随机性:单次留出法结果受划分随机性影响大,交叉验证多次划分取平均更稳;
  2. 更充分利用数据:所有样本都被用于训练和测试,特别适合小数据集;
  3. 有效避免过拟合:更准确评估泛化能力,帮选最优超参;
  4. 检测数据分布问题:若 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 低且收敛 → 拟合良好。

三、主要成因

  • 欠拟合:模型复杂度太低、训练时间不足、特征工程不到位、学习率过小;
  • 过拟合:模型复杂度过高、训练数据量不足、数据分布和真实分布不一致、训练时间过长。

四、解决方案与优先级

  1. 解决欠拟合(增能力)
    • 增加模型复杂度:更深网络、更多参数;
    • 增加特征数量和质量:更细致特征工程;
    • 调整训练策略:增大学习率、延长训练、减少正则强度。
  2. 解决过拟合(数据 > 正则 > 模型)
    • 数据层面:增加训练数据量、数据增强、数据清洗去噪(最高优先级);
    • 模型层面:降低模型复杂度、加正则(L1/L2/Dropout);
    • 训练层面:早停、集成学习;
    • AIGC 特有:用 LoRA/QLoRA 轻量微调、限制微调步数、指令调优数据增强。

面试问题:AIGC 生成模型(大语言模型、文生图扩散模型)的评估和传统判别模型有什么核心区别?

难度评分:⭐⭐⭐⭐ (4/5) | 考察频率:⭐⭐⭐⭐⭐ (5/5)

一、和传统判别模型的区别

  1. 评估对象不同:判别模型输出是确定标签、可用准确率等客观指标;生成模型输出是开放式生成内容,没有唯一正确答案,需多维质量评估。
  2. 指标性质不同:判别任务指标客观可自动计算;生成任务很多指标(相关性、连贯性、安全性、美感)依赖人工或模型评判。
  3. 维度更多:生成评估要兼顾正确性、流畅性、多样性、一致性、安全性、可控性等多个维度。

二、大语言模型常用评估

  1. 自动指标
    • 困惑度(Perplexity):衡量语言模型对文本的建模能力,越低越好;
    • BLEU:n-gram 精确率,用于机器翻译/文本生成;
    • ROUGE:n-gram 召回率,用于摘要生成;
    • 代码/推理任务 pass@k:生成 k 个候选中至少一个通过的比例。
  2. 基准测试:MMLU、HumanEval、GSM8K、C-Eval 等标准化题库。
  3. 模型评判(LLM-as-a-judge):用强模型(GPT-4)对生成结果打分,成本低、规模可扩展。
  4. 人类偏好评估:Elo 评分、胜率对比(A vs B),是生成质量金标准。

三、文生图扩散模型常用评估

  1. 保真度与质量:FID(Fréchet Inception Distance,越低越好,衡量生成分布与真实分布距离)、IS(Inception Score);
  2. 图文一致性:CLIP Score(生成图与文本条件的 CLIP 相似度);
  3. 多样性与覆盖度:CMMD、Coverage 指标;
  4. 人工评估:整体美感、结构合理性、文本-图像匹配度、伪影评分。

四、工程提示

  • AIGC 评估必须组合自动指标 + 模型评判 + 人工偏好,单一指标容易误导;
  • 自动指标(如 BLEU/FID)和人类真实偏好有 gap,最终以人工/在线 A/B 为准;
  • 评估要关注安全性(毒性、偏见、版权)和可控性(指令遵循、条件控制)。
相关推荐
程序员-李俞2 小时前
Mistral OCR 4真正改变的不是“识字”:文档AI正在变成Agent的数据入口
人工智能·windows·ai作画·aigc·ocr·ai编程·ai写作
ServBay2 小时前
DeepSeek Harness 实战:如何搭建完整的 AI Agent 本地开发环境
aigc·ai编程·deepseek
yingyuecom6 小时前
Seedance 2.5正式发布:映悦AI迎来“更长、更可控、更极致”的视频生成时代
人工智能·gpt·chatgpt·prompt·aigc
手写码匠9 小时前
华为云Flexus+DeepSeek征文|Dify 多 Agent 故障演练实战:用混沌工程主动“搞破坏“,让智能体系统越炸越稳
人工智能·深度学习·算法·aigc
leeyi9 小时前
Callback 源码:aspect_inject 切面注入(第87篇-E73)
aigc·agent·ai编程
牛哇网络工作室19 小时前
UnityHDRP写实数字人全流程基础5—语音输入和语音识别
android·unity·c#·游戏引擎·aigc·语音识别·xcode
怕浪猫20 小时前
DeepSeek Harness 源码实战第2章:Cordis——驱动 dsh 的插件引擎
aigc·openai·agent
王莹月1 天前
生图API 出问题怎么定位?给调用加 traceId 和结构化日志(nano-banana-pro)
gpt·ai·chatgpt·ai作画·aigc·agi
网易云信1 天前
政企共建!全国首个网易智企 AI OPC 社区落地衢州
aigc·agent