中欧体育从零开始编写LoRA代码这里有一份教程

  新闻资讯     |      2024-03-26 04:41

  中欧体育从零开始编写LoRA代码这里有一份教程LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大语言模型)的流行技术,最初由来自微软的研究人员在论文《 LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS 》中提出。不同于其他技术中欧体育,LoRA 不是调整神经网络的所有参数中欧体育,而是专注于更新一小部分低秩矩阵,从而大大减少了训练模型所需的计算量。

  由于 LoRA 的微调质量与全模型微调相当zoty中欧体育,很多人将这种方法称之为微调神器。自发布以来中欧体育kok,相信很多人都对这项技术感到好奇,想要从头开始编写代码从而更好的理解该研究。以前苦于没有合适的文档说明,现在,教程来了。

  这篇教程的作者是知名机器学习与 AI 研究者 Sebastian Raschka,他表示在各种有效的 LLM 微调方法中,LoRA 仍然是自己的首选。为此,Sebastian 专门写了一篇博客《Code LoRA From Scratch》,从头开始构建 LoRA,在他看来中欧体育官网,这是一种很好的学习方法。

  简单来说,本文通过从头编写代码的方式来介绍低秩自适应(LoRA),实验中 Sebastian 对 DistilBERT 模型进行了微调,并用于分类任务。

  LoRA 与传统微调方法的对比结果显示,使用 LoRA 方法在测试准确率上达到了 92.39%,这与仅微调模型最后几层相比(86.22% 的测试准确率)显示了更好的性能中欧体育kok

  其中,in_dim 是想要使用 LoRA 修改的层的输入维度,与此对应的 out_dim 是层的输出维度。代码中还添加了一个超参数即缩放因子 alpha,alpha 值越高意味着对模型行为的调整越大,值越低则相反中欧体育官网中欧体育官网。此外,本文使用随机分布中的较小值来初始化矩阵 A,并用零初始化矩阵 B。

  值得一提的是,LoRA 发挥作用的地方通常是神经网络的线性(前馈)层。举例来说zoty中欧体育中欧体育,对于一个简单的 PyTorch 模型或具有两个线性层的模块(例如中欧体育官网,这可能是 Transformer 块的前馈模块),其前馈(forward)方法可以表述为:

  如果你想通过修改现有 PyTorch 模型来实现 LoRA ,一种简单方法是将每个线性层替换为 LinearWithLoRA 层:

  为了应用 LoRA,本文将神经网络中现有的线性层替换为结合了原始线性层和 LoRALayer 的 LinearWithLoRA 层。

  LoRA 可用于 GPT 或图像生成等模型中欧体育kok。为了简单说明中欧体育官网,本文采用一个用于文本分类的小型 BERT(DistilBERT) 模型来说明。

  由于本文只训练新的 LoRA 权重,因而需要将所有可训练参数的 requires_grad 设置为 False 来冻结所有模型参数:

  如果使用上面显示的默认超参数来训练模型,则会在 IMDb 电影评论分类数据集上产生以下性能:

  在上一节中,LoRA 在默认设置下获得了 89.44% 的测试准确率中欧体育官网,这与传统的微调方法相比如何?

  为了进行比较zoty中欧体育,本文又进行了一项实验,以训练 DistilBERT 模型为例,但在训练期间仅更新最后 2 层。研究者通过冻结所有模型权重,然后解冻两个线性输出层来实现这一点:

  结果显示,LoRA 的表现优于传统微调最后两层的方法,但它使用的参数却少了 4 倍。微调所有层需要更新的参数比 LoRA 设置多 450 倍,但测试准确率只提高了 2%。

  值得注意的是,即使 LoRA 设置中只有一小部分可训练参数(500k VS 66M),但准确率还是略高于通过完全微调获得的准确率。