【学习】MOELoRA:基于MOE应用LoRA微调


【笔记】MOELoRA: 一种基于MOE多任务医疗应用下的高效参数微调方法

  • 医疗领域的LLM微调困境:①任务多样性太大;②参数量大,微调成本太高
  • 解决思路:MOE与LoRA结合,针对特定领域任务进行微调
  • 突出问题:不同任务下的数据量在质量、规模上都存在差距(A任务有1000个数据,B任务有5000个数据,使得微调参数会倾向于样本量更大的任务,破坏少样本任务的处理性能。如何解决?)

模型架构:

  • 多个专家作为可训练的参数,其中每个专家由一对低秩矩阵组成,以保持少量的可训练的参数。
  • 为所有的MOELoRA层提出了一个任务动机的门函数,该函数可以调节每个专家的贡献,并为各种任务生成不同的参数。

使用MOELoRA对LLM的参数高效微调过程的可视化表示如下:

image-20240519223632525

  1. Attention层

    • 包含多头注意力机制的标准组件,其中Q(Query)、K(Key)、V(Value)各自通过LoRA适配器进行增强。
    • 每个Q、K、V矩阵都通过MOE-LoRA增强,即每个矩阵都分别有专门的LoRA专家进行调整。
    • 这些LoRA专家由底部的门控(Gate)单元动态选择,门控根据输入的任务ID决定激活哪些专家。
  2. Layer Norm和Add层

    • Transformer架构中的每个子层输出后都会经过一个添加(Add)和层归一化(Layer Norm)操作。

    • 在此架构中,W表示权重矩阵,包括由MoE-LoRA微调的参数。

  3. Gate单元

    • 根据输入的任务ID(如文档底部所示),决定哪些LoRA专家参与当前任务的计算。

    • 确保每个特定任务都能调用最适合它的专家组合,从而实现高效的任务特定微调。

  4. 训练与固定权重

    • 图中用火焰符号标注的权重(W)是可训练的,而用雪花符号标注的是固定的,表明在微调过程中这部分权重不会被更新。

MOELoRA层:

image-20240519225817161

  • 每个专家都被替换为了一个低秩矩阵相乘的形式

  • 任务 $T_{j}$ 样本的线性层与MOELoRA层配对的前向过程表示为:

image-20240519230406663


任务驱动的门控单元:

权重计算公式:

image-20240519231110060

  • 任务驱动的门函数为每个任务产生一组独特的贡献权值

image-20240519231241393

如果门函数是由输入向量x驱动的,权向量将在样本之间有所不同。因此只将任务身份输入到门函数中,这意味着每个样本都将拥有其独特的ωj,从而导致一个特定于样本的微调参数矩阵。(这个地方有点不太理解……?)

  1. 任务定制:每个任务都使用一组参数进行微调,这有助于学习更多特定于任务的信息,缓解数据不平衡的问题。
  2. 推理效率:检索到的微调LLM显示出减少的推理延迟。这是由于消除了与LoRA层相关的额外正向计算的需要。

算法实现过程:

image-20240519231739537


文章作者: Cyan.
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Cyan. !
  目录