模型训练相关问题
一、LoRA相关问题
Q: 介绍LoRA的原理,什么是低秩分解?
答案:
LoRA(Low-Rank Adaptation) 是微软2021年提出的参数高效微调(PEFT)技术。
核心原理:
- W₀:预训练模型的冻结权重矩阵(d×k)
- ΔW:权重更新量,分解为两个低秩矩阵 B(d×r) 和 A(r×k)
- r:秩,远小于d和k(通常r=8, 16, 32)
为什么"低秩"有效:
- 经验观察:大模型微调时的权重更新矩阵本质上是低秩的
- 参数效率:可训练参数减少100-1000倍
- 推理无开销:训练后可将BA合并回W₀,不增加推理延迟
初始化方法:
- 矩阵A:随机高斯分布初始化(均值0,标准差σ)
- 矩阵B:全零初始化
- 目的:训练开始时BA=0,模型行为与原始预训练模型完全一致
缩放因子: 使用 α/r 缩放(α通常为16或32),稳定训练
二、模型架构对比(Qwen vs LLaMA vs DeepSeek)
Q: Qwen、LLaMA、DeepSeek模型架构有什么区别?
答案:
| 特性 | LLaMA | Qwen | DeepSeek |
|---|---|---|---|
| Attention | GQA | GQA | MLA(多头潜在注意力) |
| 架构类型 | Dense | Dense | MoE(混合专家) |
| 归一化 | RMSNorm | RMSNorm | RMSNorm |
| 激活函数 | SwiGLU | SwiGLU | SwiGLU |
| 位置编码 | RoPE | RoPE(支持YaRN扩展) | RoPE |
| 中文支持 | 一般 | 优秀(tokenizer优化) | 优秀 |
核心差异:
- DeepSeek MLA:压缩KV Cache,显存更高效,适合超长上下文
- DeepSeek MoE:细粒度专家+共享专家设计,提升训练稳定性和效果
- Qwen:在中文场景优化更好,使用YaRN和窗口注意力扩展上下文
三、DeepSpeed ZeRO优化
Q: ZeRO-1、ZeRO-2、ZeRO-3分别做了哪些优化?
答案:
| 阶段 | 分片对象 | 显存节省 | 通信开销 | 适用场景 |
|---|---|---|---|---|
| ZeRO-1 | 优化器状态 | ~4倍 | 低 | 模型可放入单卡 |
| ZeRO-2 | 优化器+梯度 | ~8倍 | 中 | 模型+梯度可放入单卡 |
| ZeRO-3 | 优化器+梯度+参数 | ~N倍(N为GPU数) | 高 | 超大模型训练 |
核心原理:
- 传统DDP问题:N张卡存储N份完整模型状态(参数+梯度+优化器)
- ZeRO方案:将模型状态分片到不同GPU,消除冗余
- ZeRO-3动态获取:前向/反向传播时通过AllGather按需获取参数分片
四、精度格式(FP32/FP16/BF16/INT8)
Q: FP16和BF16有什么区别?训练时怎么选择?
答案:
| 精度 | 位数构成 | 动态范围 | 精度 | 适用场景 |
|---|---|---|---|---|
| FP32 | 1+8+23位 | 中等 | 最高 | 训练基准、小规模模型 |
| FP16 | 1+5+10位 | 小(易溢出) | 中等 | 推理、混合精度训练 |
| BF16 | 1+8+7位 | 大(同FP32指数) | 较低 | 大模型训练首选 |
| INT8 | 8位整数 | 有限 | 低 | 推理量化加速 |
选择建议:
- 训练:优先BF16混合精度(动态范围大,不易溢出)
- 推理:FP16或INT8量化(显存受限场景)
- 边缘设备:INT4量化
INT8表示范围: -128 到 127(有符号)
五、RLHF/PPO/DPO
Q: 讲一下RLHF流程,PPO和DPO的Loss表达式
答案:
RLHF流程:
- SFT(监督微调):用指令数据微调预训练模型
- 训练奖励模型(RM):用人类偏好数据训练
- PPO优化:用奖励模型指导策略模型优化
PPO Loss:
- r_t:策略比率 π(a|s)/π_old(a|s)
- A_t:优势函数
- KL约束:防止策略偏离参考模型太远
DPO Loss:
- 直接优化偏好,无需奖励模型
| 符号 | 含义 | 说明 |
|---|---|---|
| 偏好数据三元组 | x: 提示词, y_w: 偏好回答, y_l: 非偏好回答 | |
| 当前策略模型 | 待优化的模型 | |
| 参考模型 | SFT后的冻结模型 | |
| β | 温度/正则系数 | 控制偏离参考模型的程度,通常0.1-0.5 |
| σ | Sigmoid函数 | |
| 隐式奖励 | 相当于奖励模型的输出 |
对比:
| 维度 | PPO | DPO |
|---|---|---|
| 流程复杂度 | 高(3-4阶段) | 低(类SFT) |
| 计算成本 | 高 | 约PPO的1/3 |
| 训练稳定性 | 较差 | 较好 |
六、幻觉问题缓解
Q: 怎么缓解大模型的幻觉问题?
答案:
多层次缓解策略:
| 阶段 | 方法 | 说明 |
|---|---|---|
| 训练期 | 数据治理 | 高质量标注数据,减少错误标注 |
| RLHF对齐 | 通过人类反馈校正错误倾向 | |
| 事实监督 | 加入事实性验证数据 | |
| 系统工程 | RAG | 外部知识库检索增强,提供实时事实支撑 |
| 工具调用 | 让模型调用计算器、搜索引擎等 | |
| 推理期 | 低温度采样 | 降低softmax温度,减少随机性 |
| 引用溯源 | 要求模型提供信息来源 | |
| 拒答机制 | 不确定时让模型说"不知道" | |
| Verifier Agent | 用验证模型检查输出 |
最佳实践: 多技术协同(RAG+CoT+RLHF+主动检测)可降低幻觉率96%
七、长上下文处理
Q: 对于超长上下文业界一般是怎么做的?Qwen是怎么做的?
答案:
业界方案:
- RoPE变体:YaRN、NTK-aware插值
- 滑动窗口注意力:只关注局部窗口
- 稀疏注意力:只计算部分token的注意力
- KV Cache压缩:如DeepSeek MLA
Qwen方案:
- YaRN:改进的RoPE扩展方法
- 窗口注意力:结合局部和全局注意力
- 支持上下文:Qwen2.5支持128K+上下文
八、Flash Attention
Q: Flash Attention做法?
答案:
核心思想: IO感知的高效注意力实现
传统Attention瓶颈:
- 需存储N×N注意力矩阵,显存O(N²)
- 频繁读写HBM(高带宽内存),GPU利用率低
Flash Attention优化:
- 分块计算:将Q、K、V按块加载到GPU SRAM(共享内存)
- 算子融合:在块内完成Q·Kᵀ、softmax、加权求和
- 重算技术:反向传播时重计算注意力分数,减少显存占用
效果:
- 显存占用降低5-20倍(从O(N²)到O(N))
- 训练速度提升2-10倍
- 保持数学结果完全精确(无近似)
九、多模态融合
Q: 多模态大模型如何融合文本与图像信息?
答案:
两种主流方案:
| 方案 | 原理 | 代表模型 | 优点 | 缺点 |
|---|---|---|---|---|
| 投影到统一embedding | 用MLP将图像特征投影到文本embedding空间 | LLaVA、BLIP-2 | 简单高效,架构改动小 | 模态交互有限 |
| Cross-Attention | 在Transformer层插入交叉注意力,让文本query attend视觉key/value | Flamingo、Llama 3.2 Multimodal | 视觉信息按需融合,更高效 | 架构复杂,训练成本高 |
差异:
- 投影方案:图像token和文本token拼接后一起输入,底层融合
- Cross-Attention:视觉信息作为外部memory,语言模型按需查询
十、Attention Scaled
Q: Attention为什么要做scaled,不做会怎么样,为什么用根号d_k?
答案:
Scaled Attention公式:
1 | Attention(Q,K,V) = softmax(QK^T / √d_k) · V |
为什么要scaled:
- 防止softmax饱和:QK^T的点积值随d_k增大而增大
- 梯度消失问题:不做scaled时,softmax输入过大导致梯度接近0
为什么是√d_k:
- Q和K的每个元素方差假设为1
- QK^T的每个元素是d_k个独立变量的和,方差为d_k
- 除以√d_k后,方差恢复为1,保持稳定的梯度流
十一、显存计算
Q: 4B模型部署需要多少显存?怎么算的?
答案:
显存组成:
1 | 总显存 = 模型权重 + 优化器状态 + 梯度 + 激活值 + KV Cache |
4B模型推理显存估算:
- FP16权重:4B × 2字节 = 8GB
- KV Cache:约2-4GB(取决于上下文长度)
- 激活值:约1-2GB
- 总计:约12-14GB
训练显存估算(ZeRO-3):
- 权重:4B × 2字节 = 8GB(分片后更少)
- 梯度:8GB(分片)
- 优化器:16GB(Adam,分片)
- 激活值:随batch size变化
- 总计:约40-60GB(多卡分片后单卡约10-15GB)
十二、MoE结构
Q: 大模型MoE结构相比于Dense结构,训练难点主要是什么?
答案:
MoE训练难点:
- 负载均衡:专家间负载不均,部分专家过载
- 训练不稳定:专家选择波动大,收敛困难
- 通信开销:token路由增加跨设备通信
- 稀疏梯度:部分专家更新频率低
DeepSeek MoE效果好的原因:
- 细粒度专家:更多小专家,提高专家利用率
- 共享专家:所有token共享部分专家,稳定训练
- 辅助损失:负载均衡损失约束专家使用率
- 动态路由:改进的token路由策略
十三、模型评估
Q: 如何评估大语言模型的性能?
答案:
常见评测指标:
- 准确率/Accuracy:分类任务
- BLEU/ROUGE:生成任务
- Perplexity:语言建模
- Win Rate:模型对比胜率
基准数据集:
| 类型 | 数据集 | 评测能力 |
|---|---|---|
| 通用 | MMLU | 多领域知识 |
| 推理 | GSM8K | 数学推理 |
| 代码 | HumanEval | 代码生成 |
| 对话 | MT-Bench | 对话质量 |
| 长文本 | Needle In Haystack | 长上下文检索 |
内部评估体系设计:
- 自动化评测:构建测试集+自动化脚本
- 人工评测:关键场景人工抽查
- A/B测试:线上流量对比
- 监控指标:幻觉率、拒答率、用户满意度
十四、开放题
Q: 目前大模型发展的上限可能在哪里?有哪些突破方向?
答案:
潜在上限:
- 数据瓶颈:高质量训练数据即将耗尽
- 算力瓶颈:训练成本指数增长
- 架构瓶颈:Transformer可能不是最优架构
- 对齐瓶颈:价值观对齐难以量化
突破方向:
- 新架构:状态空间模型(Mamba)、混合架构
- 高效训练:MoE、课程学习、合成数据
- 多模态融合:统一感知-认知-行动框架
- 推理优化:测试时计算、思维链优化
- 具身智能:与物理世界交互学习
- 小模型大能力:知识蒸馏、模型压缩
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
