LoRA 微调的 A、B 矩阵怎么初始化?为什么?
先这样答
LoRA 微调把 B 初始化为零,把 A 初始化为高斯随机矩阵。这样,BA 的初始乘积就是零。LoRA 在训练起点不会给原模型增加额外扰动,模型的初始输出也不会改变。面试时先说初始化方式,再说乘积为零,最后落到训练起点等价于原模型。核心是让新增的调整从零开始,而不是一开始就改动原模型的输出。
不要把两个矩阵都初始化成随机矩阵。两者都随机,BA 初始就会给模型带来随机扰动。模型还没开始学习任务,就先改变了输出。训练初期的输出会因此被打乱。回答时要明确区分两件事:A 是随机的,不代表 BA 也是随机扰动;B 为零,才保证初始乘积为零。
这是蚂蚁一面的原题。答完初始化,面试官还可能追问秩的选择,以及缩放系数 alphasqrt(r) 的补偿关系。先把初始化的目的讲清楚,再讨论秩与缩放。不要用秩的选择代替初始化理由,也不要把缩放系数说成初始乘积为零的原因。
面试官会怎么追问
-
「A 都随机了,为什么你还说不扰动原模型?」 判断初始扰动要看 BA 的乘积,不能只看 A。B 初始化为零,所以 A 即使采用高斯随机初始化,BA 也仍然为零。初始调整为零,训练起点就等价于原模型。
-
「如果 A、B 都随机初始化,会有什么问题?」 两者都随机会让初始乘积引入随机扰动。模型尚未开始学习,就先带着这份扰动输出,训练初期的输出会被打乱。这里要解释的是初始化为何改变输出,不能只说“随机初始化不好”。
-
「秩怎么选?跟 alphasqrt(r) 有什么关系?」 秩的选择要结合缩放系数 alphasqrt(r) 的补偿关系来解释,不能只报一个秩值。回答要同时交代秩与缩放,不能把两者当成互不相关的设置。这与初始化是两个问题,保证初始 BA 为零仍然靠 B 置零。
回答的坑
- 只背“A 高斯随机、B 置零”,却不解释 BA 初始为零以及训练起点等价于原模型,就没答到“为什么”。
- 把 A 的随机性直接等同于输出扰动,忽略 B 为零时 BA 仍为零,就会把正确初始化误判成随机扰动。
同系列的题
这家公司的面经实录