技术解读 3 days ago 130 Views 0 Comments

我是这样理解 LoRA 微调的

人人都是产品经理

Published 923 Articles

LoRA 微调到底怎么理解?本文将从“为什么是 LoRA”到“LoRA 怎么做”,系统拆解其核心机制、适用场景与工程优势,并结合实际案例,帮助你建立对 LoRA 的清晰认知框架。

接触 AI 的朋友,大多数人可能都听过目前最热门的参数高效微调方法——LoRA。但它到底是怎么回事,你了解吗?这篇文章就来给大家扫扫盲,从原理、流程到适用场景,帮你构建一个扎实、清晰的基础认知。

什么是 LoRA?

LoRA,全称是 Low-Rank Adaptation,是一种高效的模型微调技术。它的主要目标是:在不影响模型性能的前提下,减少训练参数的数量、降低计算和存储成本

传统的微调方法是:直接修改模型的全部参数或大部分参数,这样做虽然能适应新任务,但带来高昂的计算成本和显存占用。

而 LoRA 的做法是:不去直接修改原始模型的大型权重矩阵,LoRA 会为每一个被微调的矩阵引入一对低秩矩阵的补丁(A 和 B),并训练它们,而不修改原始权重。

用更简单的话来说:

把原始大模型比作发动机,LoRA 就是在选定的关键零部件(那些会影响模型行为的矩阵)分别加装一对“小补丁”,这些补丁分别“修正”这些部件的行为,使整体适配任务需求,但不重造整台发动机。

什么是低秩矩阵?

实际秩(r)表示矩阵中线性无关的行或列的最大数量,即矩阵中有多少独立信息。

原始模型矩阵Ma×b)矩阵,其最大可能的秩 L=min⁡(a,b)。

低秩矩阵:当实际秩 r < L>

示例说明

考虑一个 10×10 的矩阵:

  • 最大秩L=10;
  • 若其秩为r=3,则仅有3条独立信息,其余行/列可由这3条线性组合得出;
  • 故该矩阵为典型的低秩矩阵。

疑问:

你现在是否会好奇 r 怎么设置?继续往下看为你解答👇

LoRA 微调怎么实现的?

整体流程简介

1、选定模型中需要插入 LoRA 的对应的层的矩阵;

2、把这些矩阵分别“补充”一对新的小矩阵(补丁),叫做A和B(维度是[r, d]和[d, r],r 是秩,d 是原始矩阵的层数);

3、保持原始模型不变(即冻结参数);

4、只微调这两个小矩阵 A 和 B;

5、微调后模型 与 原模型合并。

关键流程拆解

一、怎么选:哪些层、哪些矩阵该插 LoRA?

LoRA 并不是在所有模型层里都加,它是有策略地选择目标层和矩阵来插入的。实际使用中有以下规律:

1、优先选择 Q 和 V

  • Q(Query)和V(Value)是Transformer中Attention的核心;
  • 控制了模型对哪些信息更关注;
  • 插在这里,能有效调整模型的注意力行为,对生成文本影响最大;
  • 也是HuggingFace等平台的主流做法。

2、有时插在前馈网络(FeedForward,MLP)部分的线性层

  • 某些任务下,MLP对语义转换有影响;
  • 插入LoRA可以微调语义加工的过程;
  • 但用得比较少,不是标准做法。

3、不要插在 LayerNorm 或 Embedding 上

  • 这些层参数很少,对模型最终输出的影响也不大;
  • 插入LoRA不仅无效,还可能引起梯度不稳定、性能下降。

一句话总结:该插的插,不该动的别动。二、选择好之后干嘛:补丁长啥样?秩怎么选?

假设你在 Transformer 中选择了 Q 和 V 层进行 LoRA 微调,下面以 Q 矩阵为例说明:1、在 Q 矩阵旁添加可训练补丁假设原始 Q 矩阵有维度 512 x 512 ,LoRA 会插入一对补丁矩阵:

这对补丁相乘后生成的 Q补= QAQB具有与原始 Q 矩阵相同的维度 [512, 512]。

QA:维度为 [r, 512]

QB:维度为 [512, r]

2、冻结原始权重,仅训练补丁在训练过程中,原始 Q 矩阵完全被冻结,只有 QA和 QB(也就是补丁矩阵)参与更新。这样做的目的是将微调集中于“调整特定方向”的任务,避免修改整个大矩阵。

3、秩 r 的选择推荐秩 r 是你指定的小维度,对补丁的表达能力与参数数量起决定作用。经验推荐:

  • r越大:补丁的调节能力更强,但计算与参数量也增多;
  • r越小:参数少、效率高,但可能无法充分调动模型行为。

4、训练与测试流程

注:r 往往是事先设定的超参数,而非训练时优化的变量。

三、最后怎么合并:补丁叠加到模型的哪里?

LoRA 微调结束后,一般会把补丁和原始模型合并为一个新模型,方便部署。这里的规则是:

只合并你插入过 LoRA 的位置

  • 没插过的地方(比如你没选的矩阵或层)保持不变;
  • 所以,合并后的模型体积稍微变大,但参数结构基本不变;
  • 效果上,相当于你用LoRA完整调好了那几个关键的“螺丝”。

举例:

  • 原模型是512层;
  • 你只对第400层的Q/V做了LoRA;
  • 合并时,也只合并第400层中的Q/V,其它不变;
  • 其余层结构原封不动。

LoRA 适合用在哪些场景?

从前面的整个流程来看,我自己的理解是:

LoRA 微调的核心,是对模型中某些层的某些矩阵做了补丁式的更新,这样可以让模型在保持原有“核心知识”不变的前提下,更好地适配具体任务。

换句话说,LoRA 不是重造模型,而是对部分结构做了轻量调整,让它更“听话”。

所以到这里,我对 LoRA 的理解是:不改知识,只改表达方式。

基于这个特点,我觉得 LoRA 比较适合以下几类场景:

  • 控制模型说话的语气、语法、输出格式;
  • 让模型把原来就知道的内容,用你希望的方式说出来;
  • 固化一些提示词的效果,避免反复试prompt;
  • 快速把通用模型适配到某个特定领域,比如医疗、法律这类风格明确的任务。

但它也有明显的边界,不太适合做这些事:

  • 教模型全新的知识点(模型原本从未接触过的内容);
  • 建立新的因果推理路径或复杂的逻辑链条;
  • 把模型从一个“知道很多”的通用模型,变成一个“真正理解”的专家模型。

总的来说,LoRA 更像是在已有知识之上做“表达方式的微调”,它不会让模型更聪明,但可以让模型说话更稳、更像你想要的样子。

本文由 @AI思·享@蓉77 原创发布于人人都是产品经理。未经作者许可,禁止转载。

题图来自 Unsplash,基于CC0协议。

该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务。

人人都是产品经理

人人都是产品经理

923 Articles 129672 Views 58654 Fans

Comment (0)

睡觉动画