全模型微调 vs LoRA 微调 vs RAG

下图是一个全模型微调、LoRA 微调和 RAG 的可视化呈现,这三种技术都用于通过额外数据来增强现有模型的知识储备。

全模型微调

微调指的是在预训练模型的基础上,针对新数据集调整权重参数以提升模型性能。

全模型微调(Full Model Fine-tuning)是迁移学习中的一种方法,指在预训练模型的基础上,对整个模型的所有参数进行进一步调整以适应特定下游任务的过程。与仅微调部分层(如分类头)不同,全模型微调允许所有层参与学习新任务的特征表示。

核心特点

  • 参数调整范围:覆盖预训练模型的全部可训练参数,包括嵌入层、注意力机制、全连接层等。
  • 数据需求:通常需要较多任务相关数据,以避免过度拟合预训练知识。
  • 计算成本:由于需更新全部参数,计算资源和时间消耗较高。

适用场景

  • 任务与预训练领域差异较大:如从通用文本理解(BERT)迁移到医疗文本分类。
  • 数据量充足:拥有足够标注数据支持大规模参数更新。
  • 资源允许:具备足够的GPU/TPU算力支持全参数训练。

实现示例(PyTorch)

from transformers import BertForSequenceClassification, AdamW

# 加载预训练模型
model = BertForSequenceClassification.from_pretrained('bert-base-uncased')

# 定义优化器(优化所有参数)
optimizer = AdamW(model.parameters(), lr=5e-5)

# 训练循环
for batch in dataloader:
    outputs = model(**batch)
    loss = outputs.loss
    loss.backward()
    optimizer.step()
    optimizer.zero_grad()

尽管这种微调技术已成功应用多年,但当我们在更庞大的模型(例如大语言模型)上使用时,问题便随之产生,主要原因在于:

  • 它们的规模
  • 微调全部权重涉及的成本
  • 维护所有微调模型涉及的成本

LoRA 微调

LoRA微调解决了传统微调的局限性。其核心思想是将原始模型的部分或全部权重矩阵分解为低秩矩阵并进行训练。例如在下图中,下半部分代表大型预训练模型,上半部分代表带有LoRA层的模型。

LoRA(Low-Rank Adaptation)是一种针对大型预训练模型(如GPT、BERT)的高效微调技术。其核心思想是通过低秩矩阵分解,在原始模型参数旁添加可训练的旁路矩阵,而非直接修改原始参数,从而大幅减少微调时的参数量和计算成本。

核心思路是仅训练LoRA网络并冻结大模型。

观察上述图示,你可能会想:LoRA模型的神经元数量比原始模型还多,这如何能节省资源?要理解这一点,必须明确神经元与内存占用无关,它们仅用于展示层与层之间的维度变换。

真正占用内存的是权重矩阵(或两层之间的连接)。因此,我们需要对比的其实是这些连接关系:

再看看上面的图示,可以明显看出LoRA网络的连接数量相对较少。

核心原理

假设预训练模型的权重矩阵为 $$W \in \mathbb{R}^{d \times k}$$ LoRA引入两个低秩矩阵 \(A \in \mathbb{R}^{d \times r}\) 和 \(B \in {R}^{r \times k}\)(其中 \(r \ll min(d,k)\)),使得前向传播时: \(h = Wx + BAx\) 其中:

  • \(A\) 初始化为随机高斯分布
  • \(B\) 初始化为零矩阵
  • 微调时仅更新 \(A\) 和 \(B\),冻结原始权重 \(W\)
# PyTorch实现示例
class LoRALayer(nn.Module):
    def __init__(self, original_layer, rank=8):
        super().__init__()
        self.original = original_layer
        self.lora_A = nn.Parameter(torch.randn(original_layer.in_features, rank))
        self.lora_B = nn.Parameter(torch.zeros(rank, original_layer.out_features))
        
    def forward(self, x):
        return self.original(x) + x @ self.lora_A @ self.lora_B

核心特点

参数效率:通常只需微调原模型0.1%-1%的参数。例如175B参数的GPT-3,使用LoRA可能仅需训练10-100M参数。

内存节省:无需存储完整参数的梯度,只需维护低秩矩阵的梯度。

灵活部署:训练后的低秩矩阵可单独保存(MB级),与原始模型动态组合。

适用场景

  • 大语言模型的任务适配(如客服、创作)
  • 跨领域迁移(医疗、法律等专业领域)
  • 资源受限环境下的模型定制

RAG

RAG是另一种无需微调模型就能为神经网络补充额外信息的绝佳方式。

共有7个步骤,在上图中都有标注:

● 步骤1-2:获取额外数据,经向量化处理后存入向量数据库(此操作仅需执行一次。若数据持续更新,只需不断将新生成的向量存入数据库,无需对整个数据集重复此过程)

● 步骤3:使用相同的向量化模型对用户查询进行向量化处理

● 步骤4-5:在向量数据库中检索与查询向量最邻近的数据点

● 步骤6-7:将原始查询与检索到的文档(作为上下文补充)输入大语言模型以获取响应

事实上,该技术的名称本身就完整诠释了它的应用原理:

● 检索:从知识源(如数据库或记忆)中访问和获取信息。

● 增强:通过附加信息或上下文来提升或丰富文本生成过程。

● 生成:生成文本或语言。

当然,RAG也存在诸多问题,例如:

● RAG需要对查询向量与文档向量进行相似度匹配,但问题与答案在结构上存在显著差异。

● 典型的RAG系统仅适用于基于查找的问答系统。例如,我们无法构建RAG流程来汇总附加数据。由于相似度匹配仅检索最相关的结果,大语言模型始终无法在提示词中获取全部文档信息。 由此可见,RAG技术兼具优势与局限:

● 无需对模型进行微调,可节省大量算力资源。

● 但这也限制了其在特定类型系统中的适用性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值