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=Σr​ ​VrT​。
(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 的训练过程

  1. 冻结原始模型权重:

    • 预训练模型的权重 W W W 被冻结,不参与梯度更新。
  2. 更新低秩矩阵:

    • 只更新低秩矩阵 A A A和 B B B,通过梯度下降优化下游任务的损失函数。
  3. 推理阶段:

    • 在推理时,将低秩矩阵 A A A和 B B B与原始权重 W W W结合,得到更新后的权重 W ′ = W + A ⋅ B W' = W + A \cdot B W′=W+A⋅B。

LoRA 的优点

  1. 参数高效:
    • 只需训练低秩矩阵,显著减少参数量。
  2. 计算高效:
    • 避免了全参数微调的高计算成本。
  3. 存储高效:
    • 每个任务只需保存低秩矩阵,而不是整个模型。
  4. 避免过拟合:
    • 冻结大部分参数,降低了过拟合风险。

LoRA 的缺点

  1. 表达能力受限:
    • 低秩分解可能限制了模型的表达能力,尤其是对于复杂任务。
  2. 秩的选择敏感:
    • 秩 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′T​kn′​
通过这种方式,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]]。

为了解决这些问题,研究者提出了两种改进方法:

  1. MQA(Multi-Query Attention):通过共享 Key 和 Value 矩阵,显著降低了计算成本和缓存需求,但可能导致预测质量下降 [[6]]。
  2. 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 的计算过程如下:

  1. 对输入序列 $ 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​是可学习的权重矩阵。
  2. 计算注意力分数并加权求和:
    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(dk​ ​QKT​)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 矩阵。具体步骤如下:

  1. 分组:

    • 将所有的 Query 划分为 G G G组,每组包含 H / G H/G H/G个 Query ( H H H 是总头数, G G G是组数)。
    • 每组共享一组 Key 和 Value 矩阵。
  2. 计算注意力:

    • 对每组 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(dk​ ​Qg​KgT​​)Vg​
      其中 Q g , K g , V g Q_g, K_g, V_g Qg​,Kg​,Vg​是第 g g g组的 Query、Key 和 Value。
  3. 合并结果:

    • 将所有组的注意力结果拼接起来,得到最终输出。
(4) 参数对比
方法Query 数量Key/Value 数量缓存大小表达能力
MHA H H H H H H H × L H \times L H×L高
MQA H H H1( 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 的优势
  1. 计算效率高:

    • 相比 MHA,GQA 减少了 Key 和 Value 缓存的大小,从而降低了内存占用和计算开销。
    • 推理速度更快,适合大规模模型的实际部署。
  2. 预测质量高:

    • 相比 MQA,GQA 通过分组的方式保留了部分独立性,避免了预测质量的显著下降。
  3. 灵活性强:

    • 通过调整组数 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 的计算复杂度更低。
  • 稳定性强:在训练过程中表现更加稳定,尤其适合大规模模型。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐