Susan STEM

Susan STEM

0 关注者

1周前

LoRA的核心——没学过线性代数的人也能看懂 LoRA 的核心原理其实并不难理解,就算没学过线性代数也能看懂。我之所以写下这些,是因为在自己写作和工程准备阶段,积累了大量资料和思考笔记,觉得现在是时候分享一部分了。当然,研究某项技术并不代表我已经精通,也不代表我一定会立刻应用它,但这个阶段,我认为深度思考、系统学习、机制推演,远比盲目上项目要靠谱得多。 比如 LoRA 这项技术。你如果读过我之前的文章,应该知道我一直强调:“万物皆可 NLP”这阶段的最大特征是——通用语言模型可以微调,可以适配一切任务。这就像从“各造各的轮子”进入了“通用乐高模块”的时代,而 LoRA 正是这样一种模块化微调方式。这种能力的迁移性、下沉性,正是我敢 All-in 和押注大模型时代的根本理由。 我打个比方。我有位师姐,本科是英语系的,英语能力非常强,后来来美国读了法学院。英语就是她的大模型预训练,法学院则是专业微调,毕业后她进入律所当律师,这就完成了“通用能力 + 任务适配”的路径。LoRA,在大模型中就是“法学院”阶段——对通用模型进行低成本、高效率的微调。 那 LoRA 的原理是什么呢?我就不废话,直接说重点,用你能懂的语言讲数学的事儿。你翻我引用的帖子,会看到矩阵 W1、W2,这是模型中某一层的参数权重矩阵。这个矩阵非常大,我们不想也没必要对整个矩阵做训练,所以 LoRA 的做法是:只调整它的一个小的“变化量”,叫 ΔW(读作 delta W,Δ 是“变化”的意思)。 但就算是这个 ΔW,也是个大矩阵啊,那怎么办?我们用一个线性代数里的技巧——叫“低秩矩阵分解”。什么意思呢?我给你看个例子你就懂了。 看下面这个矩阵: 表面上看,它是 3×3 的,有 9 个数字,但其实呢?你仔细看就会发现: 第二行是第一行 ×2, 第三行是第一行 ×3。 也就是说,这 3 行其实都是线性相关的,本质上只有一行的信息。所以我们就说,这个矩阵是“秩为 1”(rank-1),可压缩。原本以为需要 9 个数字,现在只要记住第一行,再加上乘以几倍,就能恢复整个矩阵了——这就叫信息压缩。 LoRA 就是用这个原理来压缩模型的更新参数。它假设模型在适配新任务时,权重的变化矩阵 ΔW 是低秩的,也就是说: 模型其实只需要调整几个“方向”, 不需要动整个参数空间, 于是我们只训练两个小矩阵 A 和 B,让 ΔW≈B⋅A。 这就是 LoRA 最核心的原理... 说到底,这也是为什么线性代数这门课这么重要。现在除了纯文科,基本所有专业都会接触它。虽然我当年学的时候也没多聪明,记不得有没有挂, 但后面还是能用上不至于太懵。