低秩自适应微调
低秩适配( LoRA )微调通过在调整过程中改变模型参数的代表性子集(称为低秩适配器 )的权重,而不是基础模型的权重,使基础模型适应某项任务。 在推理时,经过调整的适配器的权重会被添加到基础模型的权重中,从而生成针对任务进行调整的输出。
LoRA 调校原理
LoRA 是一种参数高效微调(PEFT)技术,该技术在冻结的基础模型上添加一组子参数,并在微调实验过程中更新该子参数集,同时不修改基础模型的参数。 当推断经过调整的基础模型时,子集中的新参数权重会被添加到基础模型的参数权重中,从而生成为任务定制的输出结果。
如何创建参数子集涉及到一些数学问题。 请记住,基础模型的神经网络由多个层组成,每个层都有一个复杂的参数矩阵。 这些参数的权重值是在初始训练基础模型时设定的。 用于 LoRA 调整的参数子集是通过对基础模型的权重进行秩分解得出的。 矩阵的秩表示矩阵中相互线性独立的向量数量。 秩分解又称矩阵分解 ,是一种利用秩信息将原始矩阵表示为两个较小矩阵的数学方法。 通过这种方法,两个较小的矩阵可以共同捕捉到较大矩阵中的关键模式和关系,但参数较少。 生成的较小矩阵称为低阶矩阵或低阶适配器。
在 LoRA 调整实验期间,子集( 低秩适配器) 中的参数的权重值会被调整。 由于适配器的参数较少,因此调整实验的速度更快,存储和计算更改所需的资源也更少。 虽然适配器矩阵缺少基础模型矩阵中的某些信息,但 LoRA 调整方法是有效的,因为 LoRA 利用了一个事实,即大型基础模型使用的参数通常多于任务所需的参数。
LoRA 微调实验的输出是一组包含新权重的适配器。 当这些经过调整的适配器相乘时,就会形成一个与基本模型矩阵大小相同的矩阵。 在推理时,来自适配器乘积的新权重会直接添加到基础模型权重中,以生成微调输出。
您可以配置 LoRA 调整实验的参数,如目标基础模型层和分解基础模型矩阵时使用的秩。 更多详情,请参阅调整基础模型的参数。
部署适配器资产时,必须在部署基础模型的部署空间中部署该资产。 您可以使用 watsonx.ai 中的 LoRA 微调方法,只对非量化基础模型进行微调。
使用 LoRA 微调技术的好处包括
- LoRA 技术使用的适配器更小、可训练,在调整过程中需要的存储和计算资源更少。
- 适配器的调整在推理时进行,不会影响上下文窗口长度或模型响应速度。
- 您可以部署一个基础模型,并将该模型与不同的适配器配合使用,为不同的任务定制输出。
LoRA 工作流微调
在 LoRA 微调实验中,通过反复调整模型参数中代表性子集(称为低秩适配器 )的权重,使经过调优的基础模型预测能力随时间推移不断提升。
下图说明了 LoRA 微调实验运行过程中的步骤。
您可以配置的实验流程部分会以用户图标的形式突出显示 。 这些决策点与您控制的实验调整参数相对应。 请参阅 " 调整基础模型的参数 "。
图中显示了以下实验步骤:
该实验读取训练数据,对其进行标记化处理,并将其转换成批次。
批次大小由批次大小参数决定。
低等级适配器是基础模型参数的一个代表性子集。 低秩适配器的初始权重会应用到您在 target_modules 参数中指定的模型层,并根据您为秩参数指定的值进行计算。
将批次中实例的输入发送到 LoRA 适配器,然后再发送到基础模型进行处理并生成输出。
将模型的输出与训练数据的输出进行比较,训练数据与提交的训练数据输入相对应。 然后,计算损失梯度,即预测输出与训练数据实际输出之间的差值。
实验根据计算出的模型损失调整 LoRA 适配器参数权重。 何时进行调整取决于累积步骤参数的配置方式。
对 LoRA 适配器的参数权重进行调整。 权重的变化程度由学习率、 α 和辍学参数值的组合控制。
训练数据中下一个示例的输入将作为输入提交给 LoRA 适配器。 适配器会应用最新的权重变化,并将其添加到基础模型权重中,以便针对任务进行调整。
该过程重复进行,直到处理完所有批次中的所有示例。
整个批次的处理次数与 epochs 次数参数中指定的次数相同。