ghosthamlet / gpt2-ml-torch

Pytorch model for https://github.com/imcaspar/gpt2-ml
Apache License 2.0
79 stars 16 forks source link

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

Open huangdacheng opened 3 years ago

huangdacheng commented 3 years ago

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

ghosthamlet commented 3 years ago

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

huangdacheng commented 3 years ago

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

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

ghosthamlet commented 3 years ago

学习率是:5e-8,具体参数见:https://github.com/ghosthamlet/gpt2-ml-torch/issues/6#issuecomment-723391060

huangdacheng commented 3 years ago

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

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

ghosthamlet commented 3 years ago

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

huangdacheng commented 3 years ago

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

ghosthamlet commented 3 years ago

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

huangdacheng commented 3 years ago

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

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

ghosthamlet commented 3 years ago

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

huangdacheng commented 3 years ago

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

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

ghosthamlet commented 3 years ago

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

huangdacheng commented 3 years ago

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

感谢指点!

ghosthamlet commented 3 years ago

不客气。