Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于Lora秩的变化 #8

Open
Youngluc opened this issue Nov 15, 2023 · 7 comments
Open

关于Lora秩的变化 #8

Youngluc opened this issue Nov 15, 2023 · 7 comments

Comments

@Youngluc
Copy link

感谢您的工作,非常的nice!但还是有几个问题想请教一下:

  1. 在save_and_load.py的Line 36处增加了当前Lora和previous Lora的合并,用的是concat的方式,如果说按照默认的rank=8来看,是不是concat方式会随着任务数量的增加,导致next task的rank增长?比如第二次loranew的rank就变为16了?
  2. 理论上看,用add的方式是不是也是等价的?

我还没成功run起代码来,hf被墙很烦,所以这些问题还暂时没有亲手验证,烦请作者帮忙解惑一下啦~

@cmnfriend
Copy link
Owner

cmnfriend commented Nov 15, 2023

应该的确是一种简化的方案,感谢你的提议!

@Youngluc
Copy link
Author

推理的时候可以add,但是训练的时候当前的loranew参数要与过去每一个任务对应的lora参数求正交损失,所以应该不能把这些lora参数给混合起来。 不过我们也没有做实验验证loranew对add之后的lora参数求正交,对减少过去所有任务遗忘的效果。

感觉理论上,concat和add是等价的,因为add后的那些矩阵本质上也是∑AB,做正交loss的话计算方式上是一样的,就是forward感觉可能不太一样了。concat的话rank会增长,add的话rank不会增长?

@shawnfd
Copy link

shawnfd commented Aug 13, 2024

感谢您的工作,非常的nice!但还是有几个问题想请教一下:

  1. 在save_and_load.py的Line 36处增加了当前Lora和previous Lora的合并,用的是concat的方式,如果说按照默认的rank=8来看,是不是concat方式会随着任务数量的增加,导致next task的rank增长?比如第二次loranew的rank就变为16了?
  2. 理论上看,用add的方式是不是也是等价的?

我还没成功run起代码来,hf被墙很烦,所以这些问题还暂时没有亲手验证,烦请作者帮忙解惑一下啦~

个人理解哈,欢迎拍砖。
①,推理阶段,concat和add是完全等价的,concat确实rank增加了,add不会增加;
②,训练阶段,concat可以保证新loranew_a和所有以往的lora_a正交,但是如果按照①中add合并再保存,
下一次loranew_a训练的时候跟add合并后的lora_a正交,但此时,并不能保证它跟以往每个任务都正交,是必要非充分。

@Shubao-Zhao
Copy link

大佬有试过在训练阶段使用concat和add两种方式最终效果的对比吗

@shawnfd
Copy link

shawnfd commented Aug 29, 2024

大佬有试过在训练阶段使用concat和add两种方式最终效果的对比吗

我在文字领域没有尝试,但是在CV领域尝试了,把作者代码迁移到自己的感知工程里。
我是在推理之前,训练之后,采用加法合并了concat的部分;不建议训练第N-1个任务九合并以往再去训第N个任务。
只有在最后一个任务结束后才可合并,不然是不等效的。

@Shubao-Zhao
Copy link

感谢大佬的回复,我再理解一下:

  1. 在多个任务训练的时候,依次训练 LoRA_A, LoRA_B, LoRA_C 每个任务训练完不能使用add合并,否则会降低效果
  2. 在LoRA_A, LoRA_B, LoRA_C 三个任务训练完后,可以使用add替代concat,效果不受影响

我的理解对吗?

@shawnfd
Copy link

shawnfd commented Aug 29, 2024

感谢大佬的回复,我再理解一下:

  1. 在多个任务训练的时候,依次训练 LoRA_A, LoRA_B, LoRA_C 每个任务训练完不能使用add合并,否则会降低效果
  2. 在LoRA_A, LoRA_B, LoRA_C 三个任务训练完后,可以使用add替代concat,效果不受影响

我的理解对吗?

这里的add,像你之前提到的∑AB,就是这样子。
我跟你的理解是一致的。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants