Skip to content

全量微调 vs. LoRA vs. RAG

Full-model Fine-tuning vs. LoRA vs. RAG

rag p134 1

这三种技术都是用来在不改变原有模型的基础上,用额外数据来增强模型知识的方法。

1)全量微调(Full fine-tuning)

微调指的是在一个新数据集上调整预训练模型的权重,以获得更好的表现。

rag p135 1

虽然这种微调技术已经被成功使用了很长时间,但当我们把它用在规模大得多的模型——比如 LLM——上时,问题就出现了,主要原因在于:

模型的体量。

微调所有权重所需的成本。

维护所有这些大型微调模型所需的成本。

2)LoRA 微调

LoRA 微调正是为了解决传统微调的这些局限性而生的。

其核心思路是把原始模型的权重矩阵(部分或全部)分解成低秩矩阵,转而只训练这些低秩矩阵。

举例来说,在下图中,下方的网络代表大型预训练模型,上方的网络则代表加了 LoRA 层之后的模型。

rag p136 1

这里的思路是只训练 LoRA 网络,同时冻结住那个大模型。

看了上面这张图,你可能会想:

可是 LoRA 模型的神经元数量比原模型还多,这怎么能帮上忙呢?

要理解这一点,你需要先明确:神经元的数量和网络所占用的内存其实没有关系。神经元只是用来展示数据从一层到另一层的维度变换。

真正占用内存的,是权重矩阵——也就是两层之间的连接。

所以,我们应该比较的其实是这些连接:

rag p137 1

看了上面这张图就会很清楚,LoRA 网络的连接数量相对要少得多。

3)RAG

检索增强生成(RAG)是另一种相当巧妙的方式,可以在不对模型进行微调的前提下,用额外信息来增强神经网络。

如下图所示:

rag p137 2

整个过程共有 7 个步骤,上图中也已标出:

步骤 1-2:拿到额外数据,做嵌入之后存入向量数据库。(这一步只需要做一次。如果数据在不断更新,只需持续把新的

嵌入存入向量数据库即可,不需要针对全部数据重复这个过程。)

步骤 3:用同一个嵌入模型对用户查询做嵌入。

步骤 4-5:在向量数据库中找到与该查询嵌入最近的邻居。

步骤 6-7:把原始查询和检索到的文档(作为额外上下文)一起提供给 LLM,获得回答。

事实上,光看这项技术的名字,就足以说明我们用它做的事情:

rag p138 1

检索(Retrieval):从数据库或记忆等知识来源中获取并调用信息。

增强(Augmented):用额外的信息或上下文来强化、丰富某个过程——这里指的是文本生成过程。

生成(Generation):创造或产出某种内容的过程——这里指生成文本或语言。

当然,RAG 也存在不少问题,比如:

RAG 依赖查询向量和额外文档向量之间的相似度匹配。然而,问题在结构上往往和答案差异很大。

典型的 RAG 系统只适合用在基于查找的问答场景中。举例来说,我们没办法用 RAG 流程去对额外数据做摘要——因为相似度匹配这一步只会检索出排名靠前的结果,LLM 的提示词里永远不会包含所有文档的信息。

所以很明显,RAG 有利也有弊。

  • 我们完全不需要对模型做微调,这能节省大量算力。
  • 但这也把它的适用范围限制在了特定类型的系统上。

本站内容仅供学习交流,版权归原作者所有。