lora矩阵的初始化为啥B矩阵为0呢,为啥不是A呢

ModelEngine·创作计划征文活动 10w+人浏览 1.4k人参与

在 LoRA 论文及其标准实现中,LoRA 矩阵 $B$ 确实被初始化为零矩阵,而矩阵 $A$ 则使用标准的初始化方法(例如 Kaiming 或 Xavier 均匀分布)进行初始化。

LoRA 引入的权重更新 $\Delta W$ 定义为两个低秩矩阵 $A$ 和 $B$ 的乘积:

$$\Delta W = B A$$

1. 为什么 $B$ 矩阵初始化为零?

将 $B$ 矩阵初始化为零是为了确保在训练开始时,新的 LoRA 模块不会对基座模型(Pre-trained Model)的输出产生任何干扰或改变。

  • 如果 $B = 0$ 且 $\Delta W = B A$,那么在训练开始的第一个前向传播中:

    $$\Delta W = 0 \cdot A = 0$$

  • 这意味着原始的权重矩阵 $W$ 上的更新项 $\Delta W$ 也是零。模型的输出完全由原始的预训练权重 $W$ 决定,即 $W' = W + \Delta W = W + 0 = W$。

  • 好处: 这样可以确保训练从一个稳定且收敛良好的预训练状态开始,避免由于随机初始化带来的剧烈、不稳定的梯度波动,从而保护了预训练模型已经学到的知识。

2. 为什么不是 $A$ 初始化为零?

如果 $A$ 矩阵初始化为零,也会得到 $\Delta W = B \cdot 0 = 0$,效果看起来一样。

然而,将 $A$ 初始化为零会带来一个训练过程中的优化问题

  • 梯度消失或不均匀: LoRA 结构是串联的:输入 $\rightarrow A \rightarrow B \rightarrow$ 输出。

    • 如果 $A$ 初始为零,则 $A$ 矩阵的输出会是零向量。

    • 当进行反向传播计算 $B$ 的梯度时,由于 $A$ 的输出是零,导致 $B$ 的输入梯度也会是零(或非常小),这使得 $B$ 矩阵的参数在训练初期难以被有效更新。

    • 虽然 $A$ 矩阵会得到非零的梯度,但整体来看,如果 $A$ 是零,会造成数据流和梯度流在 LoRA 路径上产生瓶颈,使得训练效率低下。

总结:

矩阵初始化方法目的
$A$ 矩阵随机初始化 (例如 Kaiming/Xavier)确保 LoRA 路径开始时有有效的、非零的数据流,以便 $B$ 和 $A$ 都能接收到正常的梯度信号,加速训练。
$B$ 矩阵零矩阵确保 $\Delta W = B A = 0$,保证训练从预训练模型的原始状态平稳开始,维护模型的稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值