一、LLM微调的主要方法
LLM模型的出现早已引爆了大模型微调的热度。目前微调的方法主要包括全参数微调、某层微调等。
Fine-Tuning:指的是全参数的微调方法,它在预训练模型的基础上进行进一步的训练,以适应特定的任务。Fine-Tuning 方法的优点在于它简单且直观,但可能需要较大的计算资源,特别是对于大型语言模型。
Layer-wise Fine-Tuning:这种方法只对模型的某些层进行微调,通常是最后几层。这种方法的优点是计算成本较低,因为只有部分参数需要更新。
Low-Rank Adaptation (LORA):这种方法首先找到模型中的一个低秩子空间,然后在这个子空间中进行优化。这种方法的优点是计算成本低,且可以避免过拟合问题。
Adapter Tuning:这种方法在模型的每一层中添加了一个小的、可训练的适配器。优点是原始模型的所有参数都可以被冻结,只需要训练适配器的参数,大大减少了训练成本。
二、LoRA微调方法的独特性
与其他传统的微调(Fine-Tuning)方法相比,最近源自于LoRA微调方法比较火爆,这是因为其有以下独特之处:
高效性:LoRA 的独特之处在于它只调整模型中的一小部分参数,而不是所有参数。这意味着需要进行训练的参数数量大大减少,从而显著降低了计算需求和训练时间。这使得 LoRA 方法非常适合用于大型语言模型的微调,如 GPT-3 或 BERT,这些模型可能有上亿甚至数百亿的参数。
抗过拟合:由于 LoRA 只调整模型中的一小部分参数,因此它可以降低过拟合的风险。当我们在小型数据集上训练大型模型时,过拟合尤其是一个问题,因为模型可能会记住训练数据的特定细节,而不能很好地泛化到新的数据。通过减少需要优化的参数数量,LoRA 可以降低这种风险。
灵活性:LoRA 通过在模型的权重矩阵中找出一个低秩子空间进行优化,这个子空间可以根据具体的任务需求进行选择。这提供了一种灵活的方式,可以根据具体任务的需求对模型进行微调。
适应性:LoRA 能够适应模型的特定层或部分,这使得它能够在保持模型大部分结构的同时,对模型进行有效的优化。
LoRA论文:LoRA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELShttps://arxiv.org/pdf/2106.09685.pdf
三、LoRA方法的底层原理
为了应用好LoRA微调方法,非常有必要深究其基本原理,并通俗易懂的表达出来,这样对于将来的可能该方向上的其他变体微调方法,会具有较高的接受程度和创新能力。为此,我翻出了LoRA论文背后的基础论文,”INTRINSIC DIMENSIONALITY EXPLAINS THE EFFECTIVENESS OF LANGUAGE MODE“,https://arxiv.org/pdf/2012.13255.pdf,并尝试对其基本原理进行分析总结。
在改论文的摘要中,作者谈到:
尽管预训练语言模型可以通过微调在广泛的语言理解任务上达到最先进的结果,但我们对此过程的动态理解仍不充分,特别是在数据量少的情况下。为什么我们可以使用相对原始的梯度下降算法(例如,没有强正则化)来调整具有数亿参数的模型,而数据集只有几百或几千个标注的例子呢?在这篇论文中,我们主张通过内在维度的视角分析微调,为我们提供了解释这一显著现象的经验和理论直觉。我们实证显示,常见的预训练模型具有非常低的内在维度;换句话说,存在一个低维度的重新参数化,对于微调来说与完整参数空间一样有效。例如,通过仅优化200个可训练参数随机投影回完整空间,我们可以调整RoBERTa模型以在MRPC上实现全参数性能水平的90%。此外,我们实证显示,预训练隐含地最小化了内在维度,而且可能出人意料的是,更大的模型在固定次数的预训练更新后,趋向于具有更低的内在维度,至少部分地解释了它们极高的有效性。最后,我们将内在维度与低维任务表示和压缩基础泛化界限联系起来,以提供与完整参数计数无关的基于内在维度的泛化界限。
这段文字用"内在维度"的观念,来解释预训练语言模型的微调过程。内在维度可以帮助我们理解为何可以使用基本的梯度下降算法,在只有几百到几千个标注样本的数据集上,微调具有数亿参数的模型。论文提出,预训练模型具有低的内在维度,这意味着存在一种低维重新参数化的方式,这种方式对微调来说和使用全参数空间一样有效。
例如,作者们通过优化仅200个可训练参数,就可以调整RoBERTa模型,使其在MRPC任务上达到全参数性能的90%。这表明预训练模型的有效性并非完全依赖于其所有的参数,而是可以通过较少的、有效的参数实现。
此外,论文发现预训练过程实质上在降低模型的内在维度,并且较大的模型在经过固定次数的预训练后,其内在维度往往更低。这或许可以解释为何较大的模型的效果更好。最后,通过将内在维度与低维任务表示和压缩基础泛化界限联系起来,论文提供了基于内在维度的泛化界限,这个界限与模型的全参数数目无关,这进一步强化了内在维度在理解预训练语言模型中的重要性。
四、内在维度解析
从以上内容可以看出,理解LoRA底层逻辑有个核心的关键概念,就是内在维度。理解了”内在维度“这个概念,才能准确的把握LoRA的背后原理。
内在维度是一个数学概念,主要用于描述数据集或者空间的复杂性。以下是从数学的角度对内在维度的解释:
在数学和数据科学中,维度通常被理解为描述对象的最小特征数量。例如,一个点的维度是0,一条直线的维度是1,一个平面的维度是2,立体空间的维度是3,以此类推。
然而,当我们处理的对象更为复杂,比如分布在空间中的数据集时,这些数据集可能不再局限于整数维度。这个时候,我们就需要引入"内在维度"的概念。
内在维度(或称内部维度、固有维度)是一种尝试测量数据集复杂性的方式,它描述了数据在其内部结构中自由变动的空间大小。对于任何给定的数据集,其内在维度是指在不损失太多信息的情况下,可以用来恰当描述数据的最小维数。换句话说,内在维度是数据集能够被压缩到的最小维数,同时仍然保持其关键特性。
比如,如果你有一个在三维空间中分布的数据集,但所有的数据点都严格地位于同一平面上,那么这个数据集的内在维度就是2,因为你只需要两个坐标(在平面上)就能准确地描述每个数据点。
在预训练语言模型的上下文中,内在维度的概念用于解释为什么模型可以通过调整相对较少的参数(相对于模型的整体参数)就完成有效的微调。这是因为尽管模型可能有数亿个参数,但这些参数中的大部分可能并不需要改变,或者它们的改变对模型的性能没有太大影响。因此,调整的参数所在的空间(即内在维度)可能远小于模型的全参数空间。
在上述论文中,作者对大型预训练模型(如RoBERTa)进行了实证研究,通过优化模型的一个小子集参数并将其随机投影到完整的参数空间来进行微调。他们可能发现,仅通过优化200个参数,就可以使模型在某项任务(如MRPC)上达到全参数模型性能的90%。这提示了模型参数的内在维度可能远低于全参数空间。