外观
全量微调 vs. LoRA vs. RAG
Full-model Fine-tuning vs. LoRA vs. RAG
下面这张图展示了“全量微调”、“用 LoRA 微调”和“检索增强生成(RAG)”三种方式。

这三种技术都用于用额外数据来扩充现有模型的知识。 .
微调是指在新的数据集上调整预训练模型的权重,以获得更好的性能。

虽然这种微调技术长期以来被成功使用,但当我们将它用在更大的模型上时——比如 LLM——就会出现问题,主要原因在于:
- 它们的规模。
- 对所有权重进行微调所涉及的成本。
- 维护所有大型微调模型所涉及的成本。
LoRA 微调解决了传统微调的局限。其核心思想是将原始模型的部分或全部权重矩阵分解为低秩矩阵,转而训练这些低秩矩阵。例如,在下图中,下方的网络代表大型预训练模型,上方的网络代表带 LoRA 层的模型。

其思路是只训练 LoRA 网络,而冻结大型模型。看上面这张图,你可能会想:但是 LoRA 模型的神经元比原模型还多。这有什么用呢?要理解这一点,你必须明确:神经元与网络的显存占用毫无关系,它们只是用来表示从一层到另一层的维度变换。真正占用显存的是权重矩阵(也就是两层之间的连接)。因此,我们应当比较的是这些连接:

看上面这张图,很显然 LoRA 网络的连接数量相对非常少。
检索增强生成(RAG)是另一种很酷的方式,可以在不微调模型的情况下,用额外信息来扩充神经网络。如下图所示: .

一共有 7 个步骤,在上图中也标了出来:
- 第 1-2 步:拿到额外数据,在做嵌入(embedding)后将其存入向量数据库。(这只需做一次。如果数据在持续演进,只要不断把新的嵌入存进向量数据库即可,无需对全部数据重复这一过程)
- 第 3 步:用同一个嵌入模型对用户查询做嵌入。
- 第 4-5 步:在向量数据库中找到与嵌入查询最近的邻居。
- 第 6-7 步:把原始查询和检索到的文档(作为更多上下文)提供给 LLM,以获得回答。事实上,这项技术的名字本身就完全说明了我们在做什么:

- Retrieval(检索):从知识源(如数据库或内存)中访问并提取信息。
- Augmented(增强):用额外的信息或上下文来增强或丰富某个东西,这里指的是文本生成过程。
- Generation(生成):创造或产生某个东西的过程,在此语境下指生成文本或语言。当然,RAG 也有许多问题,比如:
- RAG 涉及查询向量与额外文档向量之间的相似度匹配。然而,问题在结构上与答案截然不同。
- 典型的 RAG 系统只适合基于查找的问答系统。例如,我们无法用 RAG 流水线来对额外数据做摘要。LLM 永远无法在其 prompt 中获得所有文档的信息,因为相似度匹配这一步只会检索出最匹配的若干结果。所以很明显,RAG 既有优点也有缺点。
- 我们永远不必微调模型,从而节省大量算力。
- 但这也将其适用范围限制在了特定类型的系统上。
让我们在下一章继续讨论 LLM 微调。