跑着训练,看那个loss起起伏伏,实在是爱莫能助,只能多看看几篇博客,看看有没有解决的办法。
优化器相关的确实不少,感觉到时候可以写一个不用colossllai的版本,换AdamW或SGD看看。
优化器里一堆关于梯度范数的内容,现在先不谈。
先记录些有关lora的。
https://kexue.fm/archives/10001
https://kexue.fm/archives/10226
https://kexue.fm/archives/10266
整篇就主要概括下上面三章的内容,毕竟真推导公式,数学底子还是太差了,勉强看懂一点,留个印象,哪天直接拿来用好了。
第一篇,配置不同的学习率,LoRA还能再涨一点?
结论就是B的lr可以比A拉高很多,按照公式来推的话,大概16倍左右。里面主要学习到的点是,两个假设,一是数据稳定,二是贡献相等。数据稳定上推出要每一层输出保持稳定的话,首先肯定要有XAB稳定,这是肯定的,要是这不稳定,那模型基本很难拟合,其次XA也要稳定,不然XAB要稳定,就势必导致A,B一方梯度有大有小;为了稳定,A要根据1/n的方差去初始化,B则要以1/r的方差初始化,因为lora训练中r<<n,所有A,B从这个假设上就是不平衡的。
从贡献相等入手,中间用Adam退化的signSGD推了一溜,导出来A,B关于损失函数的导数的L1范数是一致的,然后再一顿猛推就得到两者学习率的比值了。
第二篇,对齐全量微调!这是我看过最精彩的LoRA改进(一)。
介绍了Lora-GA的方法,GA指的是gradient approximation。整体的改动不难,但确实提纲挈领,很符合lora本身的特性。
重温一下lora原理,就是在attn的linear层加两个AB矩阵相乘加在原来输出上,用来替代全量微调。一般为了模仿原来权重的微调,我们是要将AB其中之一零初始化,这一开始能做到对齐。这篇文章的中心就是不仅仅要初始化的时候对齐,再微调到W1的时候也要争取做到与全量微调一致。这里用的做法就是W=W0-AB不用零初始化,只要原来的减去AB即可。
为了使优化器优化时能尽量靠近全量微调的效果,我们可以一路推导这个最小化的目标,少见的能一路跟下来的推导。当然后面怎么具体最小化的还是有点超纲了,总之得到了个结论就是LoRA-GA 选取一批样本,计算初始梯度G0=∇W0L,对梯度SVD为G0=UΣV,取U的前r列初始化A,取V的第r+1∼2r行初始化B。对梯度做SVD,到时候估计还是得靠gpt大哥。
不过上面只是在SGD优化器基础上推导的,在更普遍的Adam里还是重推,这里论文更是给出了历史性的理论直觉,直接用上面的式子带到adam里去了,具体实验结果喜人,这说明了做科研大多时候还是要看信仰的。
第三篇,对齐全量微调!这是我看过最精彩的LoRA改进(二)。
介绍了Lora-Pro,相较上一篇,它的思想更彻底一些,不仅事要近似第一轮优化后的W1,还有接着看W2,W3,……一天看这么多,是有点遭不住了,里面首先保证AB最好要正交初始化,更核心的是对优化器直接进行魔改,跟上面的lora-GA刚好互补,其他就不先多说了,还是训练要紧。
您必须 登录 才能发表评论