Skip to content

全量微调 vs. LoRA vs. RAG

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

下面这张图展示了“全量微调”、“用 LoRA 微调”和“检索增强生成(RAG)”三种方式。

ds p101 1

这三种技术都用于用额外数据来扩充现有模型的知识。 .

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

ds p102 1

虽然这种微调技术长期以来被成功使用,但当我们将它用在更大的模型上时——比如 LLM——就会出现问题,主要原因在于:

  • 它们的规模。
  • 对所有权重进行微调所涉及的成本。
  • 维护所有大型微调模型所涉及的成本。

LoRA 微调解决了传统微调的局限。其核心思想是将原始模型的部分或全部权重矩阵分解为低秩矩阵,转而训练这些低秩矩阵。例如,在下图中,下方的网络代表大型预训练模型,上方的网络代表带 LoRA 层的模型。

ds p102 2

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

ds p103 1

看上面这张图,很显然 LoRA 网络的连接数量相对非常少。

检索增强生成(RAG)是另一种很酷的方式,可以在不微调模型的情况下,用额外信息来扩充神经网络。如下图所示: .

ds p104 1

一共有 7 个步骤,在上图中也标了出来:

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

ds p104 2

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

让我们在下一章继续讨论 LLM 微调。

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