大模型技术热门面试题精选及解答指南
1. RAG 技术体系的总体思路
RAG(Retrieval-Augmented Generation)的核心流程如下:
- 数据预处理:清洗原始数据,去除噪声。
- 分块(Chunking):将文本切分为合适大小的片段,这一步对检索效果至关重要。
- 文本向量化:使用 Embedding 模型将文本片段转换为向量。
- Query 向量化:将用户查询转换为向量。
- 向量检索:在向量数据库中搜索最相似的 Top-K 片段。
- 重排(Rerank):利用交叉编码器对检索结果进行精细排序。
- 生成:将 Query 与检索内容拼接输入 LLM,生成最终回答。
2. 使用外挂知识库主要为了解决什么问题
- 克服遗忘问题:LLM 训练数据截止后无法获取新知识,外挂知识库可补充最新信息。
- 提升准确性与权威性:基于特定领域文档回答,减少幻觉。
- 解决小众领域覆盖不足:通用模型未训练的垂直领域知识可通过知识库注入。
- 提高可控性与可解释性:回答来源可追溯至具体文档片段,增强安全性。
3. 如何评价 RAG 项目效果的好坏
检索环节评估
- MMR (Maximal Marginal Relevance):平衡相关性与多样性。
- Hits Rate@K:前 K 项中包含正确答案的比例。
- NDCG (Normalized Discounted Cumulative Gain):衡量排序质量。
生成环节评估
- 非量化指标:完整性、正确性、相关性、流畅度。
- 量化指标:Rouge-L, BLEU, BERTScore。
4. 大模型的幻觉问题、复读机问题是什么
- 幻觉问题:模型生成的内容与事实不符或无中生有,不忠实于上下文。
- 复读机问题:模型在生成长文本时陷入循环,重复输出相同的短语或句子。
5. 针对问题 4,有没有什么解决办法
幻觉问题对策
- 引入外挂知识库约束生成范围。
- 加入系统提示词(System Prompt)纠偏规则。
- 限制输出长度,强制引用源文。
复读机问题对策
- 丰富数据集多样性,过滤重复文本。
- 同义词替换等数据增强手段。
- 调整 Temperature 参数增加随机性。
- 后处理检测并截断重复序列。
6. 出现问题 4 的原因有哪些
- 幻觉原因:
- 训练数据与源数据不一致或未对齐。
- 编码器理解能力缺陷或解码器策略错误。
- 用户问题超出模型认知范围。
- 复读机原因:
- 数据质量低,存在大量单一重复文本。
- 条件文本过长导致后续预测被淹没,Greedy Search 下概率最大 token 持续重复。
7. 当前主流的开源大模型是哪个,其架构具体是怎样的?
目前生态建设最好的是 Meta 的 LLaMA 系列。架构改进包括:
- 前置归一化:采用 RMSNorm 替代 LayerNorm,提升训练稳定性。
- 激活函数:使用 SwiGLU 替代 ReLU,受 PaLM 启发。
- 位置编码:从绝对位置嵌入改为旋转位置嵌入(RoPE),受 GPT-Neo 启发。
- Attention:使用 Causal Multi-head Attention 的高效实现,降低内存占用。
8. 有哪几种 SFT 方法
- 全微调 (Full Fine-tuning):更新所有参数。
- Adapter Tuning:插入小型适配器模块。
- Prefix/Prompt Tuning:优化前缀向量或软提示。
- LoRA (Low-Rank Adaptation):冻结主模型,训练低秩分解矩阵。
- RLHF (Reinforcement Learning from Human Feedback):基于人类反馈强化学习。
注:SFT 时学习率通常设为预训练阶段的 10% 左右效果较好。
9. 什么是 LoRA 微调
LoRA 通过在原始 PLM 旁路增加降维再升维的操作来模拟内在秩(Intrinsic Rank)。
- 原理:固定 PLM 参数,仅训练降维矩阵 A 与升维矩阵 B。
- 初始化:A 用随机高斯分布,B 用零矩阵,确保初始旁路为 0。
- 叠加:输出时将 BA 与 PLM 参数叠加,保持输入输出维度不变。
import torch
import torch.nn as nn
class LoRALayer(nn.Module):
def __init__(self, in_features, out_features, r):
super().__init__()
self.lora_A = nn.Linear(in_features, r, bias=False)
self.lora_B = nn.Linear(r, out_features, bias=False)
nn.init.normal_(self.lora_A.weight, mean=0, std=0.02)
nn.init.zeros_(self.lora_B.weight)
def forward(self, x):
return self.lora_B(self.lora_A(x))
10. RAG 的检索阶段,常见的向量检索模型有哪些?
- ANN 算法:近似最近邻搜索。
- 乘积向量:压缩向量表示。
- 暴力搜索:精确但慢。
- hnswlib:分层导航小世界图,速度快。
- KD 树:适用于低维空间。
11. 针对通用的 RAG,你觉得还有哪些改进点?
- Query 侧:纠错、改写、规范化、扩展(如 HyDE)。
- 索引层:对向量数据库做层次索引,提高效率。
- 模型层:针对垂直领域微调 LLM,提升专业性。
- 输出层:后处理过滤不合理 Case。
12. 什么是 LangChain
LangChain 是为大型语言模型搭建和集成提供的框架,简化复杂任务开发。类似于神经网络开发中 TensorFlow/PyTorch 的角色,支持链式调用、记忆管理、工具集成等功能。
13. LangChain 的常用模块有哪些?
document_loaders:文档加载。
text_splitter:文档分块。
embedding:向量化(如 HuggingFace)。
vectorstores:向量存储。
chain.RetrievalQA:检索问答链。
14. SFT 和 RLHF 优劣对比
| 特性 | SFT (Supervised Fine-Tuning) | RLHF (Reinforcement Learning from Human Feedback) |
|---|
| 目标 | 模仿人类指令格式 | 对齐人类价值观与偏好 |
| 数据 | 高质量指令 - 回复对 | 人类排序反馈数据 |
| 成本 | 较低,计算资源需求适中 | 较高,需训练 Reward Model 和 PPO |
| 效果 | 提升指令遵循能力 | 提升回答安全性、有用性 |
15. 详细介绍一下 RLHF
RLHF 包含三个主要阶段:
- 预训练 (Pre-training):基础模型训练。
- 监督微调 (SFT):构建指令数据集进行微调。
- 奖励模型训练 (Reward Modeling):根据人类偏好训练一个评分模型。
- PPO 优化:使用近端策略优化算法,最大化奖励模型的评分,同时通过 KL 散度惩罚防止偏离 SFT 模型过远。
该过程使模型输出更符合人类期望,减少有害内容。
16. 大模型训练经常出现一些 OOM 问题,有什么性能提升 trick
- 梯度累积:模拟大 Batch Size,减少显存峰值。
- 混合精度训练:使用 FP16/BF16 减少显存占用。
- ZeRO 优化:DeepSpeed ZeRO 分割参数、梯度和优化器状态。
- 分布式训练:多卡并行,分摊计算压力。
- 数据处理优化:使用数据流水线并行加载,减少内存驻留。
- Flash Attention:优化 Attention 计算 IO 瓶颈。
17. LLaMA 模型输入句子理论上可以无限长吗?
不可以。受限因素包括:
- 计算资源:显存容量限制。
- 训练阶段:长句子易导致梯度消失或爆炸(连乘形式损失函数)。
- 推理阶段:序列越长,预测错误率累积越高。
18. 如何让大模型处理更长的文本?
- 分块处理:重叠窗口保证连贯性。
- 架构升级:增加参数量,优化注意力机制(如 RoPE 扩展)。
- 稀疏注意力:减少计算复杂度。
19. 大模型推理时,显存中有哪几部分数据?
- 模型参数:权重本身。
- 输入数据:Token IDs。
- 计算中间结果:KV Cache 等。
- 内存管理策略:某些框架延迟释放显存以提高效率,可能导致显存占用持久化。
20. 介绍下 ChatGLM
ChatGLM 基座 GLM 兼具 Encoder 和 Decoder 能力。
- Mask 方式:
[mask]:BERT 形式,随机 Mask 短 Span。
[gmask]:GPT 形式,Mask 末尾长 Span(生成任务使用)。
- 结构变化:
- 位置编码:旋转位置编码。
- 激活函数:GeLU -> GLU -> SwiGLU。
- Normalization:DeepNorm / RMSNorm。
- ChatGLM 2.0 新增:
- FlashAttention 加速。
- Multi-Query Attention 降低显存。
21. 介绍下 GLU 激活函数和 SwiGLU 激活函数
- GLU:门控机制,通过乘法过滤信息,增强长距离建模能力。
- SwiGLU:结合 Swish 激活函数与 GLU,公式为 $x \cdot \sigma(Wx) \cdot V$,进一步提升表达能力。
22. LLaMA1/2 的异同
- 数据:Llama 2 为 2.0T tokens,Llama 1 为 1.4T。
- 上下文:Llama 1 为 2k,Llama 2 为 4k。
- 架构细节:
- 位置编码:均用 RoPE。
- Normalization:Llama 1 用 LayerNorm,Llama 2 用 RMSNorm。
- 激活函数:均采用 SwiGLU。
23. 模型在训练和推理的时候各占用显存的多少?
- 训练:约占用模型参数量的 16 倍(含优化器状态、梯度、激活值)。
- 推理:约占用模型参数量的 2 倍(FP16 为 2 字节/参数,INT8 为 1 字节/参数)。
24. 详细说说 DeepSpeed 的机制
DeepSpeed 提供数据并行优化,核心是 Ring All-Reduce 和 ZeRO。
- Ring All-Reduce:平摊通信压力,GPU 间并行通信。
- ZeRO 方案:
- Zero1:分割 Adam 参数,Forward 无影响,Gradient 需 All-Reduce。
- Zero2:分割 Adam 和 Gradient,减少通信量。
- Zero3:分割参数、Adam 和 Gradient,大幅节省显存,但通信开销增加。
- Stage3 优势:以 1.5 倍通讯开销换取近 120 倍显存节省。
- Offload:将部分参数移至 CPU 内存,进一步降低 GPU 负载。
25. 什么是混合精度训练
- 数据类型:FP64(8 字节), FP32(4 字节), FP16(2 字节)。
- 优点:
- 内存占用减半,可训练更大模型。
- 通讯效率提高,带宽减半。
- 计算效率更高(AI 芯片上)。
- 挑战:数据溢出、舍入误差。
- 解决方案:
- 权重备份:维护 FP32 主副本。
- 损失放大:Loss Scaling 避免 FP16 下溢。
- 精度累加:累加时使用 FP32。
26. 什么是 Prefix LM 和 Casual LM
- Prefix LM:输入双向注意力,输出单向注意力(如 ChatGLM)。
- Casual LM:严格自回归,从左到右单向注意力(如 LLaMA, Qwen)。
27. 说一说针对 MHA 后续的一些计算优化工作
- KV Cache:缓存 Key/Value 矩阵,避免重复计算历史 Token。
- MQA (Multi-Query Attention):多个 Head 共享一组 KV,减少显存。
- GQA (Grouped-Query Attention):Head 分组共享 KV,平衡 MQA 与 MHA。
- FlashAttention:分块计算,减少 HBM 与 SRAM 间 IO 传输。
28. 说说 Attention 几种常见的计算方式
- Self-Attention:标准 Transformer 机制。
- DIN Attention:保留权重原始信号强度,不 Softmax 归一化,利用 Sigmoid 限制 0-1,保留差异性。
总结与建议
掌握大模型技术需要理论与实践结合。建议按以下路径进阶:
- 系统设计:理解 RAG、Agent 架构。
- 提示工程:掌握 Prompt 设计与优化。
- 应用开发:使用 LangChain 构建实际系统。
- 微调实战:掌握 LoRA、QLoRA 等高效微调技术。
- 部署优化:学习量化、推理加速工具。
通过系统性学习,能够胜任大模型全栈工程岗位,解决企业级 AI 落地需求。