RAG与LoRA
RAG 与 LoRA 技术详解
本文档总结了 RAG (Retrieval-Augmented Generation) 和 LoRA (Low-Rank Adaptation) 两种在大型语言模型 (LLM) 领域常用的技术。
RAG (Retrieval-Augmented Generation) - 检索增强生成
核心思想
RAG 结合了信息检索和自然语言生成,在 LLM 生成响应前,先从外部知识库检索相关信息,并将这些信息作为上下文提供给 LLM,以生成更准确、更可靠的回答。
解决的问题
缓解 LLM 面临的挑战:
- 知识静态性: 无法获取最新信息。
- 幻觉: 编造错误信息。
- 领域知识缺乏: 专业知识不足。
- 无法访问私有/实时数据。
- 缺乏可解释性: 难以溯源信息来源。
- 更新成本高: 重新训练 LLM 成本高昂。
工作流程
- 输入 (Input): 用户提问或提示。
- 检索 (Retrieval):
- 查询编码 (Query Encoding): 将输入转为向量。
- 相似性搜索 (Similarity Search): 在向量数据库中搜索相似的文本块。
- 获取相关文本 (Retrieve Relevant Chunks): 得到 Top-K 相关文本块。
- 增强 (Augmentation):
- 构建上下文提示 (Contextual Prompt Construction): 将检索到的文本与原始查询组合成新提示。
- 生成 (Generation):
- LLM 推理 (LLM Inference): 将增强提示输入 LLM。
- 生成响应 (Generate Response): LLM 基于内部知识和外部上下文生成回答。
关键组成部分
- 检索器 (Retriever): 编码器、知识库(向量数据库)、索引。
- 生成器 (Generator): 大型语言模型 (LLM)。
- 知识库构建流程 (Indexing Pipeline): 数据加载、文本切分、向量化、索引存储。
优势
- 知识实时性: 可通过更新知识库获取最新信息。
- 减少幻觉: 提供事实依据。
- 提高准确性与相关性: 基于相关上下文生成。
- 领域适应性: 易于适应特定领域。
- 可解释性与可溯源性: 可追踪信息来源。
- 成本效益: 更新知识库比重训 LLM 便宜。
- 数据隐私: 私有数据可存于外部库。
挑战
- 检索质量: 检索效果是瓶颈。
- 文本块切分策略: 影响上下文和精度。
- 检索与生成的平衡。
- 处理冲突信息。
- 系统复杂性。
- 延迟: 检索增加响应时间。
- 成本: 向量数据库和检索仍有成本。
LoRA (Low-Rank Adaptation) - 低秩适应
背景与动机
解决大型模型完全微调 (Full Fine-tuning) 带来的问题:
- 计算资源消耗大 (显存、算力)。
- 存储成本高 (每个任务一个完整副本)。
- 训练时间长。
LoRA 是一种参数高效微调 (Parameter-Efficient Fine-Tuning, PEFT) 技术。
核心思想
假设模型权重在适应新任务时的变化量 ($\Delta W$) 是低秩 (Low-Rank) 的。因此,可以通过学习两个小的低秩矩阵 $A$ 和 $B$ (其中 $\Delta W = BA$) 来表示这个变化量,而无需更新全部原始权重 $W_0$。
工作原理
- 冻结原始模型权重 $W_0$。
- 在选定的层(如注意力 QKV 矩阵)旁边添加低秩适配器矩阵 $A$ ($r \times k$) 和 $B$ ($d \times r$),其中 $r$ 是秩 ($r \ll \min(d, k)$)。
- 只训练 $A$ 和 $B$ 的参数。
- 前向传播时计算:$h = W_0 x + \alpha B A x$。
关键组成部分与超参数
- 适配器矩阵 A 和 B: 新增的可训练参数。
- 秩 (Rank, r): 控制适配器大小的关键超参数 (如 4, 8, 16, …)。
- 缩放因子 ($\alpha$): 控制适配器影响程度。
- 目标模块 (Target Modules): 选择应用 LoRA 的层。
优势
- 极高参数效率: 显著降低显存需求。
- 减少存储: 只需存储小型适配器权重。
- 可能更快的训练: 低显存允许更大批量。
- 无额外推理延迟: 训练后可将 $BA$ 合并回 $W_0$ ($W = W_0 + BA$),推理时无额外计算。
- 可媲美的性能: 效果接近完全微调。
- 便捷的任务切换: 易于加载不同适配器。
挑战
- 超参数选择: $r$, $\alpha$, 目标模块需要调优。
- 并非万能: 对某些任务可能不如完全微调。
- 合并操作: 需要额外步骤来消除推理延迟。
应用场景
- LLM 下游任务微调。
- 模型风格、领域知识适应。
- 文生图模型(Stable Diffusion)的风格/人物学习。
- 高效实现对齐技术(如 SFT)。