Skip to content

添加DPO协同训练,提升输出内容的稳定性,增加部分生成参数的webui控制 #457

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

Merged
merged 1 commit into from
Feb 11, 2024

Conversation

WatchTower-Liu
Copy link
Contributor

  1. 为训练部分添加的DPO协同训练,相关修改见:
    GPT_SoVITS\AR\models\t2s_model.py
    GPT_SoVITS\AR\models\utils.py
    这两个文件,修改后的模型已经在最新的代码上测试完毕。
    DPO注意事项:
    DPO会将训练显存翻倍,建议batch_size减半,可在文档中添加相关说明。

  2. 生成部分添加:top_k, top_p, temperature的控制,可以方便控制稳定的输出(降低这些参数),如图:
    image

以上功能均已测试通过

**DPO特性说明:**DPO为一种偏好对齐算法,可以有效缓解生成时模型所具有的幻觉,输出不友好等问题,为该项目添加该功能的目的在于缓解生成的文本内容丢失,优化克隆人物的语气。

**生成参数说明:**将部分采样参数暴露到webui界面,方便生成时调整,可以通过降低温度,降低top_p,top_k 提升模型输出内容的一致性。

@RVC-Boss
Copy link
Owner

RVC-Boss commented Feb 11, 2024

@WatchTower-Liu 我准备合并你的提交,
top_k=20, top_p=0.6, temperature=0.6这些参数是你试过对zero shot效果较好的通用参数吗,还是这部分我回滚一下之前的默认参数?

@RVC-Boss RVC-Boss merged commit 598ac16 into RVC-Boss:main Feb 11, 2024
@WatchTower-Liu
Copy link
Contributor Author

@RVC-Boss top_k=20, top_p=0.6, temperature=0.6这些参数是测试过的,可以直接用

@jupinter
Copy link

@WatchTower-Liu 请问中文训练数据比较多的时候,比如3小时, top_3_acc_step什么范围是比较正常的,有没有些经验数据。
之前对比过不同epoch的模型,感觉即便是top_3_acc_step差距比较大,最终的效果也都差不多。

@WatchTower-Liu
Copy link
Contributor Author

WatchTower-Liu commented Feb 18, 2024

@jupinter 你好,这里的GPT预测的是一个量化音素向量token,而准确率是完全匹配的一个指标,事实上微小的语气差异主观上可能察觉不到太大变化,但是客观指标会差的比较大,所以这个指标本身参考意义不大。

@jupinter
Copy link

@WatchTower-Liu 好的,非常感谢!!!

@WuNein
Copy link

WuNein commented Feb 19, 2024

@WatchTower-Liu LLM训练DPO的时候,需要一个好回答,和一个坏回答。 这里需要设置嘛?还是类似online的DPO的设计?

@WatchTower-Liu
Copy link
Contributor Author

@WuNein reject是自动生成的,为了保证训练效率这一过程暂时使用规则化生成处理,后期会添加其他模式。

@WelkinYang
Copy link

WelkinYang commented Feb 29, 2024

@WuNein reject是自动生成的,为了保证训练效率这一过程暂时使用规则化生成处理,后期会添加其他模式。

@WatchTower-Liu 你好 现在reference_polic为空的情况下 dpo loss等于最大化正确答案的似然 最小化错误答案的似然 但目前错误答案中仍然有一部分其实是正确的(没有被删除和重复的部分) 想问下是否需要完全的保证错误答案全部错误 以免最小化了正确的似然?

@WatchTower-Liu
Copy link
Contributor Author

@WelkinYang 理想情况下应该使用十分精致的数据,但是协同训练时,这一问题被sft的loss弱化了,理论上影响不大。之后会加入一个后期标准的DPO。

XXXXRT666 pushed a commit to XXXXRT666/GPT-SoVITS that referenced this pull request Oct 17, 2024
添加DPO协同训练,提升输出内容的稳定性,增加部分生成参数的webui控制
@Mnji4
Copy link

Mnji4 commented Jan 20, 2025

@WelkinYang 理想情况下应该使用十分精致的数据,但是协同训练时,这一问题被sft的loss弱化了,理论上影响不大。之后会加入一个后期标准的DPO。

请问这个场景中,标准dpo如何构造偏好数据对的坏数据?可以对于同一句文字,用当前模型生成内容作为坏,用真实wav作为好吗

ganpare pushed a commit to ganpare/GPT-SoVITS-v3-docker that referenced this pull request Mar 25, 2025
添加DPO协同训练,提升输出内容的稳定性,增加部分生成参数的webui控制
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

Successfully merging this pull request may close these issues.

6 participants