一、LoRA + SFT 微调相关
【必考】
Q1. 你能简述一下 LoRA 微调的核心原理吗?
详细解读:
LoRA(Low-Rank Adaptation)是一种针对大型神经网络微调的参数高效方法。它的核心思想是,假设微调过程中的权重变化矩阵可以被近似为低秩矩阵的乘积,即:
$$\Delta W = BA, \quad B \in \mathbb{R}^{d \times r}, A \in \mathbb{R}^{r \times k}$$
这里$r$(rank)远小于$d$和$k$,大幅减少了训练参数。训练时,只更新$B$和$A$,而保持原权重$W_0$冻结,最终模型权重为:$W_{adapted} = W_0 + BA$
这种设计不仅降低了训练时显存和计算需求,而且避免了大规模参数更新可能导致的过拟合。LoRA特别适合大模型微调,尤其是在算力有限和数据量有限的科研应用场景。
面试官可能追问细节:
为什么微调的权重变化可以用低秩矩阵近似?
微调过程中,大模型的参数调整多集中在某些关键方向,整体权重变化空间维度远小于参数矩阵维度,因此低秩分解是合理近似。LoRA如何影响模型推理效率?
LoRA权重可在推理时动态叠加或预先合并,不增加推理计算复杂度。rank选取有什么指导原则?
一般从4或8开始尝试,平衡训练效果和显存消耗。rank过小可能欠拟合,过大则资源消耗高。LoRA与传统微调相比有哪些优势和限制?
优势是显存占用低、训练快,适合资源受限场景。限制是可能无法捕捉极其复杂的任务需求。
Q2. SFT(监督微调)与 LoRA 的关系是什么?
详细解读:
SFT是“监督微调”的简称,指在标注的任务特定数据上对预训练模型进行微调,提升模型在该任务上的表现。SFT通常更新模型大部分或全部参数。
LoRA是实现SFT的一种高效技术手段。通过引入低秩矩阵微调方式,LoRA只训练极少量参数,避免了传统SFT中的巨量参数更新与显存瓶颈。二者结合后,既能利用SFT的有监督优势,又保证训练资源效率,适合大模型的科学任务定制。
面试官可能追问细节:
SFT中常用的损失函数有哪些?
交叉熵损失(对分类/生成任务),有时还结合KL散度或序列标注损失。LoRA训练时,原模型参数为什么要冻结?
冻结保证原模型能力不丢失,同时减少训练负担。有没有其他高效微调方法?
Adapter、Prefix Tuning、Prompt Tuning、BitFit等。SFT和RLHF有什么区别?
SFT用监督数据微调,RLHF结合人类反馈进行强化学习。
Q3. 你在项目中如何使用LoRA?具体数据准备流程是怎样的?
详细解读:
数据准备:
将化学反应路径数据和分子动力学模拟结果,转化成结构化的自然语言描述,形成{instruction, input, output}格式,如:“请预测分子 Mo3O9 在反应体系中的持续时间”。模型准备:
选用开源预训练大模型(如Llama、Falcon),加载权重。LoRA配置:
指定目标注入层(通常是attention模块的query/key/value层),设置rank、alpha。训练:
使用混合精度训练,梯度累积,进行LoRA参数微调,冻结原权重。评估:
在验证集上监控准确率、损失,避免过拟合。推理:
加载基础模型和LoRA权重,合并后进行推理。
面试官可能追问细节:
训练数据中如何保证多样性和代表性?
结合不同反应路径和时间点,采样平衡,避免数据偏倚。训练优化器和学习率如何选?
通常使用AdamW,学习率在1e-4到5e-5间调整。如何监控微调过程中的过拟合?
观察验证集损失和准确率,采用早停和正则化。有没有考虑数据增强?
通过同义词替换、语序变化等提升数据丰富性。
二、RAG(LangChain)相关
【必考】
Q4. 什么是RAG?为什么它可以提高模型的知识时效性和准确性?
详细解读:
RAG是一种将检索系统与生成模型结合的框架。它的优势在于:
通过对外部知识库进行实时检索,补充生成模型内部训练时未覆盖或过时的信息。
检索到的相关文档作为上下文输入,增强生成时的事实依据,降低“幻觉”风险。
允许知识库动态更新,适应新兴领域或快速变化的科学知识。
RAG的流程是:用户问题 → 向量化 → 向量检索 → 获取Top-k文档 → 拼接Prompt → LLM生成回答。
面试官可能追问细节:
如何构建高质量的向量索引?
精心设计文本切分策略,使用强大Embedding模型,并维护索引更新。RAG如何避免检索到无关文档?
使用重排序模型(Cross Encoder),设计严格相似度阈值。检索文档数量如何确定?
根据上下文窗口限制和召回效果折中。RAG适合所有任务吗?
不适合纯语言生成的开放式任务,更适合有明确知识需求的场景。
Q5. 你在项目中是如何用LangChain实现RAG的?
详细解读:
准备知识库,将科学文档按语义完整性拆分成chunk。
通过embedding模型(如Instructor-xl)向量化chunk,存入FAISS。
使用LangChain的RetrievalQA接口,封装检索和生成逻辑。
定制Prompt模板,将检索内容格式化后注入模型上下文。
实现接口层(API),支持多轮对话和上下文记忆。
面试官可能追问细节:
LangChain如何支持多种检索器组合?
支持MultiRetriever,融合BM25、FAISS等多种检索方式。你如何调优Prompt模板?
通过实验不断调整检索内容长度、指令词、格式结构。检索响应时间如何优化?
预缓存查询结果,缩短向量检索时间,使用并行计算。
三、LoRA + SFT 与 RAG 的对比与应用
Q6. 在你的项目中,如何权衡LoRA微调与RAG的使用?
详细解读:
LoRA+SFT适合固定任务场景,模型具有强大结构化理解能力,生成连贯准确,但知识更新需要再训练。
RAG适合知识更新频繁或知识库庞大的场景,能灵活引入外部信息,减轻模型记忆压力。
结合使用可以先用LoRA微调模型基础能力,再通过RAG提升最新知识补充,实现更稳健的科学推理。
面试官可能追问细节:
如何设计混合系统的推理流程?
先模型生成草案,再用检索结果验证并修正输出。RAG和LoRA是否有冲突?
无冲突,属于互补。模型部署时如何平衡效率和准确性?
通过缓存策略和异步检索减少响应时间。
你知道什么是量化吗?
答:量化就是把模型的权重从高精度浮点数压缩到低精度整数,比如从 FP16 压到 INT8 或 INT4,这样模型的体积会缩小一半甚至四分之一,推理也更快。
我用过 Ollama 的 q4/q8 量化模型,本地 GPU 就能跑几十亿参数的 LLM。量化的优势是显存和延迟降低,但也需要关注精度损失问题。
Support me with a coffee?