通过将模型权重矩阵表示为低秩矩阵,可以减少需要调整的参数数量,原因在于低秩矩阵的结构本身就比高秩矩阵更“紧凑”,即它们需要的独立参数更少。具体来说,低秩矩阵的结构可以通过减少模型的自由度(独立参数的数量)来达到这一效果。我们可以通过一个简单的例子来解释这个过程。
低秩矩阵与高秩矩阵的比较
假设我们有一个大小为 ( 3 x 3 ) 的矩阵,表示模型中的权重。对于这个矩阵,如果它是高秩的(比如秩为 3),那么每一行和每一列都包含独立的信息,矩阵的每个元素都可能是独立的,因此我们需要调整 ( 3 x 3 = 9 ) 个参数。
然而,如果这个矩阵是低秩的,比如秩为 1,那么它的所有行和列之间是有关系的,信息冗余。这个矩阵可以表示为两组较小的矩阵的乘积。例如,一个秩为 1 的矩阵可以写成如下形式:
A = B x C
其中,矩阵 ( B ) 是一个 ( 3 x 1) 的矩阵,矩阵 ( C ) 是一个 ( 1 x 3 ) 的矩阵。这意味着原本的 ( 3 x 3 ) 的矩阵,通过两个小矩阵的乘积来表示。这里只需要调整 ( 3 + 3 = 6 ) 个参数,而不是 9 个。所以,低秩矩阵减少了需要调整的参数数量,从而降低了计算和存储开销。
为什么低秩矩阵能减少需要调整的参数
低秩矩阵有一个关键特点:它们的结构可以通过少量的参数来描述。比如:
- 在一个高秩矩阵中,矩阵的每一行和每一列都可能是独立的,因此每个元素都需要单独学习一个参数。
- 而在低秩矩阵中,我们通过将矩阵分解成两个小矩阵(比如 ( B ) 和 ( C ))来表示它,( B ) 和 ( C ) 之间的矩阵乘积可以表示原矩阵的结构。因为 ( B ) 和 ( C ) 的维度相对较小,所以我们只需要调整少量的参数。
这就像用两个小图案拼出一个大图案。如果大图案中的每个小部分都不相同,你就需要很多图案来拼接;但是如果大图案中的小部分有规律可以重复出现,那么你只需要几个图案,就能构成整个大图案。低秩矩阵的“规律性”就相当于这种“图案的重复”,它使得原本复杂的结构变得简单,从而减少了需要调整的参数数量。
LoRA(低秩适应)中的应用
在 LoRA 等技术中,我们并不是直接调整整个模型的所有权重,而是通过增加一小部分额外的低秩矩阵来“适应”模型。具体来说,LoRA 会在原有的权重矩阵上加上一些低秩矩阵,这些低秩矩阵的秩非常小(例如 1、2、3 等)。通过调整这些低秩矩阵的参数,而不是整个权重矩阵的参数,我们就能在 保留原模型大部分知识 的基础上 适应新任务,而且需要调整的参数非常少。
假设你要微调一个大型语言模型,它的权重矩阵是 ( W ),大小为 ( d \times k )(例如 ( 10^6 \times 10^6 ))。这意味着,你需要调整 ( d \times k ) 个参数。通过使用 LoRA 等方法,你可以引入一个秩为 ( r ) 的低秩矩阵 ( B \times C )(假设 ( B ) 和 ( C ) 比较小,维度可能为 ( d \times r ) 和 ( r \times k )),这样就只需要调整 ( r \times (d + k) ) 个参数(相对于原来 ( d \times k ) 的参数量要小得多)。
再用更贴近实际生活的例子来说明“低秩矩阵”是如何减少需要调整的参数数量的。
生活中的例子
假设你正在布置一个房间,需要摆放很多家具。这里,房间的每一件家具的位置就相当于矩阵中的每个元素。
情景一:高秩矩阵
你要把房间里每一件家具都放在一个独立的位置,完全不考虑其他家具的位置。比如:
- 沙发放在左边,
- 书架放在右边,
- 餐桌放在中间,
- 电视放在墙上……
每件家具的位置都非常独立,每一个位置都要根据具体情况来安排。所以你需要为每一件家具的“位置”单独调整参数,来确保它的位置合适。这就像一个高秩矩阵,每一行每一列的信息都是独立的。
举个极端的例子,如果房间有 10 件家具,那你就需要考虑每一件家具的具体位置,可能有上百种不同的组合方式,也就是说,你需要调整上百个“位置”参数。
情景二:低秩矩阵
但是,如果你考虑到家具的布局可以有某种规律性,比如:
- 沙发和餐桌可能靠近一些,
- 书架和电视可能放在同一侧墙边,
- 你希望家具的位置有一种对称性或逻辑关系……
那么,你就不需要为每件家具单独调整位置。你只需要调整几个“规则”:
- 沙发和餐桌之间的距离是多少?
- 书架和电视的位置是怎样的?
这种布局有规律性,你可以用少量的规则来描述大部分家具的位置。这就相当于一个低秩矩阵,你通过几个简单的参数来表示所有家具的位置,而不是每个位置都单独调整。
低秩矩阵是怎么减少参数的?
在低秩矩阵中,原本需要调整的很多参数都被合并成了少量的“组合规则”。就像你用几个简单的布局规则来布置房间,而不是单独安排每件家具的位置。通过这些“组合规则”,你就能在保留大部分家具位置合理性的基础上,大幅减少需要调整的参数数量。
回到机器学习中的应用
在机器学习中,当我们对模型进行微调时,通常会有非常多的参数需要调整。而使用低秩矩阵的方式(比如 LoRA),我们只需要调整一些“组合参数”(比如某些矩阵的低秩分解),而不是每个参数都单独调整。这样,我们就能在减少计算量和内存开销的同时,仍然能保持模型的表现。
总结
将模型的权重矩阵表示为低秩矩阵,可以减少需要调整的参数数量,因为低秩矩阵结构更简单,能够通过少量参数来表示原矩阵的核心信息。在微调大型模型时,通过引入低秩矩阵(如 LoRA 技术),我们可以保持模型的性能,同时大大降低调整的参数量和计算负担。