文章出发点 :常见的peft训练方法-lora,其所用到的低秩更新机制可能会限制LLM有效学习和记忆新知识的能力。这个工作中,提出了一种名为 MoRA 的新方法,它采用方阵来实现高秩更新,同时保持相同数量的可训练参数。
LLM常见的有3种训练模式:
- 指令微调,目标是更好地使 LLMs 与最终任务和用户偏好保持一致
- 涉及复杂的推理任务,例如解决数学问题,一般的指令微调在处理复杂的、符号的、多步骤的推理任务时效果都很难让人满意。为了提高 LLMs 的推理能力,大多数研究都集中在创建相应的训练数据集,或者通过利用更大的教师模型,或者使用思维链的方式来解决问题
- 继续预训练,目标是增强LLMs的特定领域能力。
众所周知的结论,lora在1,3上表现可能都一般般。应对3,有relora的方法,可以推广到remora方法。
https://arxiv.org/html/2405.12130v1?
- lora vs mora 图示:
- 一个观察,构造了一个10k的唯一的数据,需要根据uuid生成uuid,完成该任务所需知识均来自于训练集,也就是说考验模型对新知识的记忆能力。如下图:lora方式对比fft(全参数微调),低秩更新很难记住新知识。虽然不断提高LoRA的rank可以缓解这个问题,但差距仍然存在。
- 方法,思想是,如何在尽可能相同的可训练参数Δ𝑊下,实现最高的rank。具体的表示如下,先对输入进行压缩,最后可训练矩阵替换为方阵,最后还原成原始的维度。压缩和还原使用非参数化的操作,所以训练完成之后,也可以合并回原始权重。
非参数化操作有几种方式
- 截断,直接取前多少个,但是截断会丢失大量的信息
- 通过共享矩阵M的行或列来减少输入维度并增加输出维度。例如,可以将M中的每𝑟行或列组合在一起,形成一个更大的行或列,以实现压缩和解压缩。共享对大rank的时候有效,对于较小的rank会丢失大量的信息
- 为了提高小rank时候的有效性,对输入向量重新排列(reshape),以适应方阵M的输入需求。
- 利用rope旋转操作的思想,来增强方阵M的表达能力,使其能够区分不同的输入片段。例如,通过将输入向量的不同部分旋转一定角度,然后输入到方阵中,可以增加模型对输入变化的敏感性。
- 实验结论
- 新知识记忆,在大rank的时候,几乎可以达到fft的效果
- 预训练损失对比
-
指令微调、推理、继续预训练的性能;MoRA 在指令调整和数学推理方面的性能与 LoRA 相当。在继续LoRA。
