一些LLM大模型知识笔记
一些LLM大模型知识笔记📒
1. 微调方法
常见的微调方法包括:
- 全参数微调:对模型的所有参数进行更新,适用于数据量大、任务复杂的情况,但计算资源消耗较高。
- LoRA(Low-Rank Adaptation):通过在关键层(如Q、K、V矩阵)添加低秩矩阵来微调模型,计算资源消耗较低,适合轻量级微调。
- P-Tuning:通过引入虚拟标记(pseudo tokens)来调整模型的输入表示,适用于一些需要调整模型语义理解的任务。
2. 全参微调、LoRA 和 P-Tuning 的区别
1. 全参微调(Full Fine-Tuning)
- 定义:
全参微调是指对整个预训练模型的所有参数进行更新,以适应下游任务。 - 特点:
参数更新:更新模型的所有参数。
资源需求:需要大量的计算资源和存储空间,尤其是对于大模型(如 GPT、BERT)。
适用场景:适合数据量较大、计算资源充足的情况。
性能:通常性能最好,因为所有参数都针对任务进行了优化。
存储成本:每个任务都需要保存一份完整的模型,存储成本高。 - 优点:
模型性能最优。
适合复杂任务。 - 缺点:
计算和存储成本高。
容易过拟合(如果数据量不足)。
2. LoRA(Low-Rank Adaptation)
- 定义:
LoRA 是一种高效的微调方法,通过在预训练模型的权重中引入低秩矩阵来更新参数,而不是直接更新所有参数。 - 特点:
参数更新:只更新低秩矩阵,原始模型参数冻结。
资源需求:计算和存储成本低,适合资源有限的情况。
适用场景:适合数据量较小、计算资源有限的任务。
性能:性能接近全参微调,但略低。
存储成本:只需保存低秩矩阵,存储成本低。 - 优点:
计算和存储效率高。
适合多任务学习(每个任务只需保存低秩矩阵)。
避免过拟合(因为大部分参数被冻结)。 - 缺点:
性能略低于全参微调。
需要设计合适的低秩矩阵结构。
3. P-Tuning
- 定义:
P-Tuning 是一种针对提示(Prompt)的微调方法,通过优化提示词的表示来适应下游任务,而不直接修改模型参数。 - 特点:
参数更新:只优化提示词的表示,模型参数冻结。
资源需求:计算和存储成本最低。
适用场景:适合数据量非常小、计算资源极其有限的任务。
性能:性能依赖于提示词的设计,通常低于全参微调和 LoRA。
存储成本:只需保存提示词的表示,存储成本极低。 - 优点:
计算和存储成本极低。
适合少样本或零样本学习。
无需修改模型结构。 - 缺点:
性能通常较低。
提示词设计对性能影响较大。
3. LoRA 原理与初始化
LoRA 的核心思想是在模型的关键层(如Q、K、V矩阵)中添加低秩矩阵,通过调整这些低秩矩阵的参数来实现模型的微调。具体来说:
原理:假设原始矩阵为 W,LoRA 将其分解为 W=W+(A×B),其中 A 和 B 是低秩矩阵,r 是低秩矩阵的秩。
初始化:通常使用小的随机值初始化低秩矩阵 A 和 B,以避免对原始模型的性能产生过大影响。
LoRA(Low-Rank Adaptation,低秩适应)是一种高效的模型微调方法,旨在通过引入低秩矩阵来更新预训练模型的权重,从而避免直接更新所有参数。以下是 LoRA 的原理和初始化方法的详细说明:
LoRA 的原理
1. 核心思想
LoRA 的核心思想是:在预训练模型的权重矩阵中引入低秩分解,通过优化低秩矩阵来适应下游任务,而不是直接更新整个权重矩阵。
-
预训练模型的权重矩阵通常是高维的(例如, W ∈ R m × n W \in \mathbb{R}^{m \times n} W∈Rm×n)。
-
LoRA 假设权重矩阵的更新 Δ W \Delta W ΔW可以用低秩矩阵近似表示,即:
Δ W = A ⋅ B \Delta W = A \cdot B ΔW=A⋅B
其中:- A ∈ R m × r A \in \mathbb{R}^{m \times r} A∈Rm×r和 B ∈ R r × n B \in \mathbb{R}^{r \times n} B∈Rr×n是两个低秩矩阵。
- r r r 是秩(rank),通常 r ≪ min ( m , n ) r \ll \min(m, n) r≪min(m,n)。
-
在微调过程中,原始权重矩阵 W W W 被冻结,只更新低秩矩阵 A A A 和 B B B。
2. 数学表示
假设预训练模型的某一层权重为
W
W
W,LoRA 的更新方式为:
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. 参数效率
- LoRA 通过低秩分解显著减少了需要训练的参数数量。
- 假设原始权重矩阵 W W W的参数数量为 m × n m \times n m×n,而 LoRA 的参数数量为 r × ( m + n ) r \times (m + n) r×(m+n),其中 r ≪ min ( m , n ) r \ll \min(m, n) r≪min(m,n)。
4. 适用场景
- LoRA 特别适合大模型(如 GPT、BERT)的微调,因为它避免了直接更新大量参数。
- 适合多任务学习,因为每个任务只需保存低秩矩阵 A A A 和 B B B,而不是整个模型。
LoRA 的初始化
1. 低秩矩阵的初始化
LoRA 的低秩矩阵 A A A和 B B B需要合理初始化,以确保训练的稳定性和效率。常见的初始化方法包括:
(1)随机初始化
- A A A和 B B B 通常使用随机初始化(如正态分布或均匀分布)。
- 例如:
- A A A初始化为 N ( 0 , σ 2 ) \mathcal{N}(0, \sigma^2) N(0,σ2)。
- B B B初始化为零矩阵。
(2)基于预训练权重的初始化
- 如果预训练模型的权重矩阵 W W W 已知,可以通过对 W W W进行低秩分解(如 SVD)来初始化 A A A和 B B B。
- 例如:
- 对 W W W 进行奇异值分解(SVD): W = U Σ V T W = U \Sigma V^T W=UΣVT。
- 取前 r r r个奇异值和对应的奇异向量,初始化 A = U r Σ r A = U_r \sqrt{\Sigma_r} A=UrΣr和 B = Σ r V r T B = \sqrt{\Sigma_r} V_r^T B=ΣrVrT。
(3)零初始化
- 在某些情况下,可以将 A A A初始化为随机矩阵,而将 B B B初始化为零矩阵。
- 这样初始时 Δ W = A ⋅ B = 0 \Delta W = A \cdot B = 0 ΔW=A⋅B=0,模型行为与原始预训练模型一致。
2. 秩的选择
- 秩 r r r是 LoRA 的关键超参数,控制低秩矩阵的表达能力。
- 较小的 r r r会限制模型的表达能力,但计算效率更高。
- 较大的 r r r 会提高表达能力,但计算成本增加。
- 通常通过实验选择 r r r,常见的取值范围为 r ∈ [ 2 , 64 ] r \in [2, 64] r∈[2,64]。
LoRA 的训练过程
-
冻结原始模型权重:
- 预训练模型的权重 W W W 被冻结,不参与梯度更新。
-
更新低秩矩阵:
- 只更新低秩矩阵 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。
LoRA 的优点
- 参数高效:
- 只需训练低秩矩阵,显著减少参数量。
- 计算高效:
- 避免了全参数微调的高计算成本。
- 存储高效:
- 每个任务只需保存低秩矩阵,而不是整个模型。
- 避免过拟合:
- 冻结大部分参数,降低了过拟合风险。
LoRA 的缺点
- 表达能力受限:
- 低秩分解可能限制了模型的表达能力,尤其是对于复杂任务。
- 秩的选择敏感:
- 秩 r r r的选择对性能影响较大,需要通过实验调优。
4. 旋转位置编码(RoPE, Rotational Positional Encoding)
旋转位置编码(RoPE, Rotational Positional Encoding)是一种新兴的位置编码技术,广泛应用于最新的大型语言模型(如 LLaMA、PaLM 等)中。它通过复数运算和旋转矩阵的方式,将相对位置信息集成到自注意力机制中,从而提升 Transformer 模型的性能。以下是对 RoPE 原理的详细解析。
1. 背景与动机
传统的 Transformer 模型通常使用固定的位置编码(如正弦-余弦编码)或可学习的位置编码来引入序列中的位置信息。然而,这些方法存在以下问题:
- 绝对位置编码:只能表示绝对位置信息,难以捕捉 token 之间的相对距离关系。
- 相对位置编码:虽然可以捕捉相对位置信息,但实现复杂且计算开销较大。
RoPE 的提出旨在结合两者的优点,既能够有效表示相对位置信息,又保持较低的计算复杂度。
2. RoPE 的核心思想
RoPE 的核心思想是利用旋转矩阵对 token 表示进行变换,从而在自注意力机制中隐式地引入相对位置信息。具体来说:
- 每个 token 的位置信息被编码为一个旋转矩阵。
- 当两个 token 的位置发生变化时,它们的表示会通过旋转操作动态调整,从而反映相对位置的变化。
这种方法不仅保留了相对位置信息,还具有良好的外推性,即模型能够处理超过预训练长度的输入序列。
3. RoPE 的数学推导
(1) 复数表示
RoPE 利用复数的性质来实现旋转操作。假设每个 token 的嵌入向量
x
x
x 被分解为多个二维子空间,每个子空间对应一个复数表示:
x
=
[
x
1
,
x
2
,
x
3
,
x
4
,
…
]
x = [x_1, x_2, x_3, x_4, \dots]
x=[x1,x2,x3,x4,…]
其中,每对连续维度
(
x
2
i
−
1
,
x
2
i
)
(x_{2i-1}, x_{2i})
(x2i−1,x2i)被视为一个复数
z
i
=
x
2
i
−
1
+
j
x
2
i
z_i = x_{2i-1} + jx_{2i}
zi=x2i−1+jx2i,
j
j
j是虚数单位。
(2) 旋转矩阵
对于位置
m
m
m 和
n
n
n 的两个 token,它们的相对位置可以通过旋转矩阵表示:
R
(
θ
)
=
[
cos
(
θ
)
−
sin
(
θ
)
sin
(
θ
)
cos
(
θ
)
]
R(\theta) = \begin{bmatrix} \cos(\theta) & -\sin(\theta) \\ \sin(\theta) & \cos(\theta) \end{bmatrix}
R(θ)=[cos(θ)sin(θ)−sin(θ)cos(θ)]
其中,
θ
\theta
θ 是与相对位置相关的参数,通常定义为
θ
=
m
−
n
d
\theta = \frac{m-n}{d}
θ=dm−n,
d
d
d 是嵌入维度的缩放因子。
(3) 相对位置嵌入
当计算 Query 和 Key 的内积时,RoPE 将位置信息通过旋转矩阵嵌入到向量中:
q
m
′
=
q
m
⋅
R
(
θ
)
,
k
n
′
=
k
n
⋅
R
(
−
θ
)
q_m' = q_m \cdot R(\theta), \quad k_n' = k_n \cdot R(-\theta)
qm′=qm⋅R(θ),kn′=kn⋅R(−θ)
其中:
- q m q_m qm 和 k n k_n kn 分别是位置 m m m和 n n n的 Query 和 Key 向量。
- R ( θ ) R(\theta) R(θ) 和 R ( − θ ) R(-\theta) R(−θ) 是旋转矩阵,用于调整向量的方向。
最终的注意力分数为:
Attention
(
q
m
,
k
n
)
=
q
m
′
T
k
n
′
\text{Attention}(q_m, k_n) = q_m'^T k_n'
Attention(qm,kn)=qm′Tkn′
通过这种方式,RoPE 隐式地将相对位置信息引入到注意力计算中。
4. RoPE 的优势
(1) 相对位置信息的建模
- RoPE 通过旋转矩阵直接建模 token 之间的相对位置关系,而无需显式计算相对位置偏移。
- 这种方式比传统相对位置编码更高效,且易于实现。
(2) 外推性
- RoPE 具有良好的外推性,即模型能够处理超过预训练长度的输入序列。
- 这是因为旋转矩阵的性质允许模型动态生成任意位置的编码,而不会受到预训练长度的限制。
(3) 计算效率
- RoPE 的计算复杂度较低,因为它只需要对嵌入向量进行简单的旋转操作,而不需要额外的参数或复杂的计算 [[9]]。
5. RoPE 的实现细节
(1) 分组嵌入
为了提高计算效率,RoPE 通常将嵌入向量划分为多个二维子空间,并在每个子空间中独立应用旋转操作。这样可以减少旋转矩阵的维度,降低计算开销。
(2) 参数化设计
- 旋转角度 θ \theta θ通常与位置编号相关,例如 θ = m d \theta = \frac{m}{d} θ=dm或 θ = m − n d \theta = \frac{m-n}{d} θ=dm−n。
- 缩放因子 d d d 可以根据嵌入维度进行调整,以确保旋转角度的变化范围适中。
5. GQA(Group Query Attention)
GQA(Group Query Attention)的背景与原理
1. 背景
在深度学习领域,特别是 Transformer 模型中,注意力机制(Attention Mechanism)是核心组件。然而,随着模型规模的增大和应用场景的复杂化,传统的多头注意力机制(MHA, Multi-Head Attention)面临以下挑战:
- 计算成本高:MHA 中每个注意力头都有独立的 Key 和 Value 矩阵,导致内存占用和计算开销较大 [[4]]。
- 推理速度慢:大规模模型在推理阶段需要加载大量的 Key 和 Value 缓存,限制了其实际应用效率 [[5]]。
为了解决这些问题,研究者提出了两种改进方法:
- MQA(Multi-Query Attention):通过共享 Key 和 Value 矩阵,显著降低了计算成本和缓存需求,但可能导致预测质量下降 [[6]]。
- GQA(Grouped-Query Attention):作为 MHA 和 MQA 的折中方案,GQA 在保持较高预测质量的同时,提升了推理效率 [[7]]。
2. GQA 的定义
GQA 是一种分组查询注意力机制,介于 MHA 和 MQA 之间。它通过对查询(Query)进行分组,每组共享一组 Key 和 Value 矩阵,从而在计算效率和模型表达能力之间取得平衡。
3. 原理详解
(1) 多头注意力机制(MHA)回顾
在 MHA 中,每个注意力头都有独立的 Query、Key 和 Value 矩阵。假设输入序列为 X X X,MHA 的计算过程如下:
- 对输入序列 $ X$进行线性变换,生成多个 Query、Key 和 Value 矩阵:
Q = X W Q , K = X W K , V = X W V Q = XW_Q, \quad K = XW_K, \quad V = XW_V Q=XWQ,K=XWK,V=XWV
其中 W Q , W K , W V W_Q, W_K, W_V WQ,WK,WV是可学习的权重矩阵。 - 计算注意力分数并加权求和:
Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dkQKT)V
其中 d k d_k dk是 Key 的维度。
MHA 的优点是表达能力强,但缺点是计算开销大,尤其是在大规模模型中。
(2) 多查询注意力机制(MQA)回顾
MQA 是 MHA 的简化版本,所有注意力头共享同一组 Key 和 Value 矩阵:
K
=
X
W
K
,
V
=
X
W
V
K = XW_K, \quad V = XW_V
K=XWK,V=XWV
这种设计显著减少了 Key 和 Value 缓存的大小,但可能导致预测质量下降,因为共享的 Key 和 Value 矩阵可能无法充分捕捉复杂的特征关系。
(3) 分组查询注意力机制(GQA)
GQA 是对 MHA 和 MQA 的扩展,旨在平衡计算效率和预测质量。其核心思想是将 Query 分组,每组共享一组 Key 和 Value 矩阵。具体步骤如下:
-
分组:
- 将所有的 Query 划分为 G G G组,每组包含 H / G H/G H/G个 Query ( H H H 是总头数, G G G是组数)。
- 每组共享一组 Key 和 Value 矩阵。
-
计算注意力:
- 对每组 Query,分别计算注意力分数并加权求和:
Attention g ( Q g , K g , V g ) = softmax ( Q g K g T d k ) V g \text{Attention}_g(Q_g, K_g, V_g) = \text{softmax}\left(\frac{Q_gK_g^T}{\sqrt{d_k}}\right)V_g Attentiong(Qg,Kg,Vg)=softmax(dkQgKgT)Vg
其中 Q g , K g , V g Q_g, K_g, V_g Qg,Kg,Vg是第 g g g组的 Query、Key 和 Value。
- 对每组 Query,分别计算注意力分数并加权求和:
-
合并结果:
- 将所有组的注意力结果拼接起来,得到最终输出。
(4) 参数对比
| 方法 | Query 数量 | Key/Value 数量 | 缓存大小 | 表达能力 |
|---|---|---|---|---|
| MHA | H H H | H H H | H × L H \times L H×L | 高 |
| MQA | H H H | 1 | ( L ) | 较低 |
| GQA | H H H | G G G | G × L G \times L G×L | 中等(可调) |
其中 L L L 是序列长度, G G G 是组数, H H H 是总头数。
4. GQA 的优势
-
计算效率高:
- 相比 MHA,GQA 减少了 Key 和 Value 缓存的大小,从而降低了内存占用和计算开销。
- 推理速度更快,适合大规模模型的实际部署。
-
预测质量高:
- 相比 MQA,GQA 通过分组的方式保留了部分独立性,避免了预测质量的显著下降。
-
灵活性强:
- 通过调整组数 G G G,可以在计算效率和表达能力之间找到最佳平衡点。
6. SwiGLU 激活函数
定义与背景
- SwiGLU 是一种改进的激活函数,结合了 Swish 和 GLU(Gated Linear Unit)的优点,广泛应用于现代大语言模型中。
- SwiGLU 的数学形式为:
SwiGLU ( x , W , V , b , c ) = Swish ( x W + b ) ⊙ ( x V + c ) \text{SwiGLU}(x, W, V, b, c) = \text{Swish}(xW + b) \odot (xV + c) SwiGLU(x,W,V,b,c)=Swish(xW+b)⊙(xV+c)
其中, ⊙ \odot ⊙表示逐元素乘法 W W W和 V V V是权重矩阵, b b b和 c c c是偏置项。
特点
- 非线性更强:SwiGLU 引入了门控机制,能够更灵活地控制信息流。
- 性能提升:相比于传统的 ReLU 或 GELU,SwiGLU 在语言建模任务中表现出更高的性能。
7. RMSNorm(均方根层归一化)
定义与背景
- RMSNorm 是一种改进的层归一化方法,由 Root Mean Square Layer Normalization 提出,用于替代传统的 LayerNorm。
- 传统 LayerNorm 的公式为:
y = x − μ σ ⋅ γ + β y = \frac{x - \mu}{\sigma} \cdot \gamma + \beta y=σx−μ⋅γ+β
其中, μ \mu μ和 σ \sigma σ分别是均值和标准差, γ \gamma γ和 β \beta β是可学习参数。 - RMSNorm 则省略了均值归一化部分,仅对标准差进行归一化:
y = x mean ( x 2 ) + ϵ ⋅ γ y = \frac{x}{\sqrt{\text{mean}(x^2) + \epsilon}} \cdot \gamma y=mean(x2)+ϵx⋅γ
其中, ϵ \epsilon ϵ是一个小常数,用于防止除零错误。
优点
- 计算效率高:由于省略了均值计算,RMSNorm 的计算复杂度更低。
- 稳定性强:在训练过程中表现更加稳定,尤其适合大规模模型。
更多推荐

所有评论(0)