简介:个人学习分享,如有错误,欢迎批评指正。
在近年来,随着大型语言模型(如GPT-3、GPT-4等)的迅速发展,如何高效、经济地微调这些模型以适应特定任务成为了一个重要的研究方向。Low-Rank Adaptation(低秩适配,简称LoRA)是一种创新的方法,旨在通过低秩矩阵分解技术高效地微调大型语言模型。
一、背景与动机
1. 大型语言模型的发展
大型语言模型凭借其在自然语言处理任务中的卓越表现,广泛应用于文本生成、翻译、问答系统等领域。然而,这些模型通常拥有数十亿甚至上千亿的参数,导致以下问题:
- 高昂的计算成本:训练和微调这些模型需要大量的计算资源,导致计算成本高。
- 存储需求巨大:每个微调任务需要存储一份完整的模型参数,导致存储成本高昂。
- 微调效率低:针对不同任务分别微调模型,缺乏共享机制,降低了效率。
2. 微调方法的发展
为了解决上述问题,研究者提出了多种微调方法,包括:
- 全参数微调(Full Fine-Tuning):调整模型的所有参数,适应性强但成本高。
- 冻结部分参数:只微调部分参数,降低计算和存储成本,但可能限制模型的适应能力。
- 参数高效微调(Parameter-Efficient Fine-Tuning, PEFT):通过引入少量可训练参数,实现高效微调。LoRA 即为其中一种典型方法。
二、LoRA的具体实现步骤
1. 确定适配层
在大型语言模型(如 Transformer 架构)中,LoRA 通常应用于
关键的权重矩阵,如自注意力机制中的查询(Query)、键(Key)、值(Value)矩阵
以及前馈网络
中的权重矩阵。这些权重矩阵通常是大型的线性变换矩阵,适合进行低秩分解
。
2. 插入低秩适配模块
对于每个需要适配的权重矩阵 W W W,LoRA 通过插入两个新的可训练矩阵 A A A 和 B B B 来表示权重的更新:
W ′ = W + Δ W = W + A ⋅ B W' = W + \Delta W = W + A \cdot B W′=W+ΔW=W+A⋅B
其中,原始权重 W W W 保持冻结,不参与训练。只有 A A A 和 B B B 参与训练,从而实现参数高效的微调。
3. 参数初始化
- 矩阵 A A A 的初始化:通常采用随机初始化,使用
小的随机值
(如从标准正态分布中采样并乘以一个缩放因子),以确保初始的 Δ W \Delta W ΔW 对模型输出的影响较小。 - 矩阵 B B B 的初始化:通常初始化为
零矩阵
,这样初始的 Δ W = A ⋅ B = 0 \Delta W = A \cdot B = 0 ΔW=A⋅B=0,确保初始模型行为与原始模型一致
。
4. 训练过程
在微调过程中,只有矩阵 A A A 和 B B B 是可训练的参数。训练目标仍然是最小化任务特定的损失函数,但优化器只更新 A A A 和 B B B,保持 W W W 不变。
训练步骤如下:
- 前向传播:计算 W ′ = W + A ⋅ B W' = W + A \cdot B W′=W+A⋅B,并使用 W ′ W' W′ 进行前向传播。
- 损失计算:根据任务目标计算损失。
- 反向传播:仅计算 A A A 和 B B B 的梯度。
- 参数更新:使用优化器更新 A A A 和 B B B。
5. 推理阶段
在推理阶段,使用微调后的权重 W ′ = W + A ⋅ B W' = W + A \cdot B W′=W+A⋅B 进行计算。由于 W W W 是冻结的,只需要存储 A A A 和 B B B 即可,不需要额外的计算开销。
三、LoRA在Transformer中的集成
Transformer 架构是目前大型语言模型的主流架构,LoRA 主要针对 Transformer 中的线性层进行适配。以下以 Transformer 的自注意力机制为例,说明 LoRA 的集成方式。
1. 自注意力机制中的权重矩阵
在自注意力机制中,有三个主要的权重矩阵:查询矩阵 W Q W_Q WQ、键矩阵 W K W_K WK 和值矩阵 W V W_V WV。这些矩阵用于计算注意力得分和加权输出。
2. 应用 LoRA
对于每个权重矩阵 W W W(即 W Q , W K , W V W_Q, W_K, W_V WQ,WK,WV),LoRA 引入两个低秩矩阵 A A A 和 B B B,并将其更新添加到原始权重上:
W q ′ = W q + A q ⋅ B q W'_q = W_q + A_q \cdot B_q Wq′=Wq+Aq⋅Bq
W k ′ = W k + A k ⋅ B k W'_k = W_k + A_k \cdot B_k Wk′=Wk+Ak⋅Bk
W v ′ = W v + A v ⋅ B v W'_v = W_v + A_v \cdot B_v Wv′=Wv+Av⋅Bv
其中, A q , B q , A k , B k , A v , B v A_q, B_q, A_k, B_k, A_v, B_v Aq,Bq,Ak,Bk,Av,Bv 分别对应于查询、键和值的适配矩阵。
3. 前馈网络中的适配
同样地,Transformer 的前馈网络中的权重矩阵(如 W 1 W_1 W1 和 W 2 W_2 W2)也可以应用 LoRA 进行适配:
W 1 ′ = W 1 + A W 1 ⋅ B W 1 W'_1 = W_1 + A_{W1} \cdot B_{W1} W1′=W1+AW1⋅BW1
W 2 ′ = W 2 + A W 2 ⋅ B W 2 W'_2 = W_2 + A_{W2} \cdot B_{W2} W2′=W2+AW2⋅BW2
通过这种方式,整个 Transformer 层的关键权重矩阵都得到了高效的适配。
四、LoRA的数学基础详解
1. 矩阵的秩与低秩分解
1.1 矩阵的秩(Rank of a Matrix)
<