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

请问finetuning batch size =1 就能取得效果了? #19

Open
huangdacheng opened this issue May 13, 2021 · 13 comments
Open

请问finetuning batch size =1 就能取得效果了? #19

huangdacheng opened this issue May 13, 2021 · 13 comments

Comments

@huangdacheng
Copy link

请问finetuning batch size =1 就能取得效果了?

@ghosthamlet
Copy link
Owner

是的,因为学习率足够小,有效果。当然,你也可以开启gradient_accumulation_steps,这样batch_size和学习率都可以增加。

@huangdacheng
Copy link
Author

是的,因为学习率足够小,有效果。当然,你也可以开启gradient_accumulation_steps,这样batch_size和学习率都可以增加。

使用的是多大的学习率啊 ?

@ghosthamlet
Copy link
Owner

学习率是:5e-8,具体参数见:#6 (comment)

@huangdacheng
Copy link
Author

学习率是:5e-8,具体参数见:#6 (comment)

感谢题主的分享, 我跑了两天5e-5,┭┮﹏┭┮,请问 5e-5的话能收敛吗?但其实对于gpt2 不收敛的情况下,生成质量也可以能达到要求吗?

@ghosthamlet
Copy link
Owner

如果batch_size是1的话,5e-5不太可能收敛。除非loss能达到3以下,生成质量才比较正常。
不过这和你的数据集的大小、质量和复杂度也会有关系。你可以加上tensorboard看一下loss的动态曲线,如果没有出现巨大波动,能保持下降趋势,那即使是5e-5,也没问题,可以继续训练,等loss下降到3下面。

@huangdacheng
Copy link
Author

我看原始项目的训练方式,其实就是预测 句子X 的最后一个字。你这里也是一样的吗 ?

@ghosthamlet
Copy link
Owner

是的,我只是用特定类型的小说数据做了微调。

@huangdacheng
Copy link
Author

是的,我只是用特定类型的小说数据做了微调。

那其实把stride调成很小很小,例如1 或2, 那效果不就更好吗?

@ghosthamlet
Copy link
Owner

这个我倒没试验过,你可以试试,不过stride太小的话,训练数据增加,也会增加训练时间。
从另一方面说,stride有点接近数据增强功能,用同一份数据制造很多类似的上下文,延长上下文同时可以提高模型的泛化能力,但如果有很多太过类似的上下文,那就相当于冗余数据了,对收敛和泛化作用不大。

@huangdacheng
Copy link
Author

这个我倒没试验过,你可以试试,不过stride太小的话,训练数据增加,也会增加训练时间。
从另一方面说,stride有点接近数据增强功能,用同一份数据制造很多类似的上下文,延长上下文同时可以提高模型的泛化能力,但如果有很多太过类似的上下文,那就相当于冗余数据了,对收敛和泛化作用不大。

那我感觉 是我自己理解错了,我看代码认为 是训练时或finetuning时,每个step的loss 其实只是 预测输入句子X[1,...,s-1]之后 X[s]最后一个汉字的loss
现在再看回去,感觉自己理解错了。我这个理解是不是错误的啊?

@ghosthamlet
Copy link
Owner

对,你的理解是错的,训练或finetuning的loss都计算了整个输入句子汉字的loss。

@huangdacheng
Copy link
Author

对,你的理解是错的,训练或finetuning的loss都计算了整个输入句子汉字的loss。

感谢指点!

@ghosthamlet
Copy link
Owner

不客气。

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

2 participants