LoRA: Low-Rank Adaptation of Large Language Models低秩自适应

  • 低秩自适应(LoRA),它将预训练模型权重冻结,并将可训练的秩分解矩阵注入Transformer架构的每一层,大大减少了下游任务的可训练参数数量。具体来说,它将原始矩阵分解为两个矩阵的乘积,其中一个矩阵的秩比另一个矩阵的秩低。这时只需要运用低秩矩阵来进行运算,这样,可以减少模型参数数量,提高训练吞吐量,并且在模型质量上表现出色,且不会增加推理延迟

LoRA: Low-Rank Adaptation of Large Language Models低秩自适应_第1张图片

  • LoRA的思想也很简单,在原始PLM旁边增加一个旁路,做一个降维再升维的操作,来模拟所谓的intrinsic rank。训练的时候固定PLM的参数,只训练降维矩阵A与升维矩阵B。而模型的输入输出维度不变,输出时将BA与PLM的参数叠加。用随机高斯分布初始化A,用0矩阵初始化B,保证训练的开始此旁路矩阵依然是0矩阵。

LoRA: Low-Rank Adaptation of Large Language Models低秩自适应_第2张图片
  • 这种思想有点类似于残差连接,同时使用这个旁路的更新来模拟full finetuning的过程。并且,full finetuning可以被看做是LoRA的特例(当r等于k时):

This means that when applying LoRA to all weight matrices and training all biases, we roughly recover the expressiveness of full fine-tuning by setting the LoRA rank r to the rank of the pre-trained weight matrices.
In other words, as we increase the number of trainable parameters, training LoRA roughly converges to training the original model, while adapter-based methods converges to an MLP and prefix-based methods to a model that cannot take long input sequences.
  • LoRA也几乎未引入额外的inference latency,只需要计算 即可。

  • LoRA与Transformer的结合也很简单,仅在QKV attention的计算中增加一个旁路,而不动MLP模块:

We limit our study to only adapting the attention weights for downstream tasks and freeze the MLP modules (so they are not trained in downstream tasks) both for simplicity and parameter-efficiency.
  • Hugging Face的PEFT库可以对LoRA进行调用,代码如下:

from peft import get_peft_model, LoraConfig, TaskType

peft_config = LoraConfig(
    task_type=TaskType.CAUSAL_LM, # 设置任务类型
    inference_mode=False,  # 设置推理模式为 False
    r=8,  # 设置 PEFT 模型的秩为 8
    lora_alpha=32, # 设置 LORA 的 alpha 参数为 32
    lora_dropout=0.1, # 设置 LORA 的 dropout 参数为 0.1
    target_modules=['query_key_value']  # 设置 PEFT 模型的目标模块为 ['query_key_value']
)

# 加载模型
model = AutoModelForSeq2SeqLM.from_pretrained(model_name_or_path)
model = get_peft_model(model, peft_config)

# 打印模型参数
model.print_trainable_parameters()
# output: trainable params: 2359296 || all params: 1231940608 || trainable%: 0.19151053100118282

# 然后就可以愉快地使用模型来训练了
  • 与完全微调相比,LoRA可以将GPT-3的可训练参数数量减少1万倍,计算硬件要求减少3倍。

  • LoRA在GPT-3和GPT-2上的模型质量表现与微调相当或更好,尽管可训练参数较少,训练吞吐量更高,推理延迟没有增加。

  • 总结,基于大模型的内在低秩特性,增加旁路矩阵来模拟全模型参数微调,LoRA通过简单有效的方案来达成轻量微调的目的。它的应用自不必提,可以将现在的各种大模型通过轻量微调变成各个不同领域的专业模型。

  • 此外,考虑OpenAI对GPT模型的认知,GPT的本质是对训练数据的有效压缩,从而发现数据内部的逻辑与联系,LoRA的思想与之有相通之处,原模型虽大,但起核心作用的参数是低秩的,通过增加旁路,达到四两拨千斤的效果。

你可能感兴趣的:(NLP,nlp)