-
Notifications
You must be signed in to change notification settings - Fork 4.6k
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
[Feature] 支持DPO-Positive (DPOP),DPO改进版 #2587
Comments
你试过这个方法么? 公式(3)好像和后面描述的有些出入。 我实现之后,lambda 按文中设置的50,warmup之后loss直接起飞了 |
是不是和附录C的公式对不上?我按照公式3训了一下,感觉完全没效果。 |
定义 elif self.loss_type == "positive":
# ref: https://github.com/abacusai/smaug/issues/2#issuecomment-2019468927
losses = -F.logsigmoid(self.beta * logits) - self.dpo_positive_lambda * torch.clamp(
reference_chosen_logps - policy_chosen_logps, min=0
)
elif self.loss_type == "peremptory":
losses = (
-F.logsigmoid(self.beta * logits)
- self.dpo_positive_lambda * torch.clamp(reference_chosen_logps - policy_chosen_logps, min=0)
+ self.dpo_positive_lambda * torch.clamp(policy_rejected_logps - reference_rejected_logps, min=0)
) 还未经测试 |
我觉得减号是错的,后面那个惩罚项是个非负数,用减号的话会让loss越来越小,和论文的idea相冲突而且也不符合直觉,应该是加号 |
不应该设置那么大,设置为50的话,loss会很大。我估计最多也就0.5 |
我觉得按照公式就是加号,可以放在括号里面保持负号,根据论文的公式3。但整体来说,我觉得smug有效果是因为它针对open llm排行榜搞了一些额外数据,而不是因为这个loss。 |
来这边用中文聊聊哈哈。抛开文章公式,
|
它后面新加的那一项是在中括号里面的,我感觉就等于是+:page5,公式3,https://arxiv.org/pdf/2402.13228.pdf |
同意。我发现其实原先的 DPO 通过调整 beta,也能够极大程度的缓解 positive prob 降低的问题,default 的 0.1 可能不太够,可以适当 increase,因此这个方案的效果不一定好。 |
是的是的,我之前的实现有问题。 |
beta很玄学,hf这个超参扫描结果来看,不同的模型dpo beta最佳值不一样,可能是0.01,也有可能是0.6 |
至少从我的实验来看,同样的模型、数据和超参,dpop不如dpo。感觉这个它设计的第二项,可能还不如直接加个sft loss项。 |
实践出真知,agree! |
另外,咨询下,dpotrainer里loss-type: hinge, ipo这些和原始的sigmoid有提升没呀? |
我的结论是ipo用了square loss,可以有效防止过拟合,类似作者说的cDPO,求稳的话可以用。因为DPO训多了会显著变长,ipo就没有这个退化现象,输出结果和底座sft保持比较相近的风格。其它都是和dpo差不多的单调loss,我测下来不如dpo。 |
最后我把加号、减号都试过后,就像你说的,都不如加个sft的loss; 其实如果从文中为了缓解positive样本负向学习的问题化,确实直接加上这个sft loss是最直接有效的了 |
update一下,dpop的作者在issue里面提供了他们的实现:abacusai/smaug#2 (comment) 。他提到之前论文的公式是有问题的。我实测了一下,新的loss比之前论文里对应的版本效果要好一点,但还是略弱于dpo。 |
你好,我想请教一下,这个直接加sft loss是如何实现的 |
@carachu1 添加这个参数即可 LLaMA-Factory/src/llamafactory/hparams/finetuning_args.py Lines 139 to 142 in dc78355
|
一般这个值给多少合适呢? |
Reminder
Reproduction
Expected behavior
No response
System Info
No response
Others
No response
The text was updated successfully, but these errors were encountered: