TencentARC / LLaMA-Pro

[ACL 2024] Progressive LLaMA with Block Expansion.
https://tencentarc.github.io/LLaMA-Pro/
Apache License 2.0
449 stars 34 forks source link

您好,请教一下post pretrain的问题 #10

Closed ray075hl closed 5 months ago

ray075hl commented 5 months ago

我看到论文中关于post pretrain阶段会冻住原来的层的参数,只使用领域数据对新增的块进行微调,那么新增的块在微调之后,就不是identity block了,就会对原有的llama2产生影响,那么怎么能保证对原有llama2能力的保留呢?

hills-code commented 5 months ago

这方面我们从empirical的角度分析的,观察到llama pro在通用文本任务上的能力并不会下降,并且参照https://github.com/re-align/URIAL所提出的token distribution shift进行了分析,发现训练后的模型生成的token分布并不会有很大的偏移。我们的idea是freeze住原先的weight可以很大程度上保证之前的knowledge不会丢失

ray075hl commented 5 months ago

@hills-code 谢谢您的回答

AllenDun commented 4 months ago

@hills-code 继续请教一下,如果只是在初始化的时候保证了是identity block,实际随着微调及最后到inference阶段,已经不再是identity block了,也就是仍然对整体的llama2的参数有改变;那么还有必要在初始化的时候去保证新添加的block是identity的吗;如此一来,这个方法跟冻结原始参数,然后只训练部分新加的参数(只是当前新加的参数是以block形式增加,变成别的方法,简单增加层数)区别有多大呢

hills-code commented 4 months ago

我认为初始化保证是identity block还是很重要的,我们尝试过直接复制上一个block作为初始化参数,性能会有所降低,identity block提供了一个比较好的初始点进行优化,随机对新增加的block进行初始化有可能无法正常训练

AllenDun commented 4 months ago

@hills-code 谢谢您的回答。那确实是可能对训练的优化和收敛有重要作用;对于避免灾难遗忘来说,这个identity block就不是那么关键吧,核心是完全冻结和不改变原始的那些参数,只是改变新增的参数;同时又不像lora那样需要去进行合并参数(改变了原始的参数),对么

hills-code commented 4 months ago

@AllenDun 是的,我认为冻结原来的参数是保持原有能力的一个很重要的因素

icoderzqliu commented 4 months ago

我认为初始化保证是identity block还是很重要的,我们尝试过直接复制上一个block作为初始化参数,性能会有所降低,identity block提供了一个比较好的初始点进行优化,随机对新增加的block进行初始化有可能无法正常训练

请教一下,在进行块扩展的时候,为什么只把down_proj和o_proj置0呢?按照您所说的“identity block提供了一个比较好的初始点进行优化”,那么把扩展的块都置0(包括attn等)是不是更好的初始点呢?

hills-code commented 4 months ago

那么把扩展的块都置0(包括attn等)是不是更好的初始点呢?

我们在论文里有分析过,如果将某些参数置为0,梯度也将会是0,无法训练