Open huangdacheng opened 3 years ago
是的,因为学习率足够小,有效果。当然,你也可以开启gradient_accumulation_steps,这样batch_size和学习率都可以增加。
是的,因为学习率足够小,有效果。当然,你也可以开启gradient_accumulation_steps,这样batch_size和学习率都可以增加。
使用的是多大的学习率啊 ?
学习率是:5e-8,具体参数见:#6 (comment)
感谢题主的分享, 我跑了两天5e-5,┭┮﹏┭┮,请问 5e-5的话能收敛吗?但其实对于gpt2 不收敛的情况下,生成质量也可以能达到要求吗?
如果batch_size是1的话,5e-5不太可能收敛。除非loss能达到3以下,生成质量才比较正常。 不过这和你的数据集的大小、质量和复杂度也会有关系。你可以加上tensorboard看一下loss的动态曲线,如果没有出现巨大波动,能保持下降趋势,那即使是5e-5,也没问题,可以继续训练,等loss下降到3下面。
我看原始项目的训练方式,其实就是预测 句子X 的最后一个字。你这里也是一样的吗 ?
是的,我只是用特定类型的小说数据做了微调。
是的,我只是用特定类型的小说数据做了微调。
那其实把stride调成很小很小,例如1 或2, 那效果不就更好吗?
这个我倒没试验过,你可以试试,不过stride太小的话,训练数据增加,也会增加训练时间。 从另一方面说,stride有点接近数据增强功能,用同一份数据制造很多类似的上下文,延长上下文同时可以提高模型的泛化能力,但如果有很多太过类似的上下文,那就相当于冗余数据了,对收敛和泛化作用不大。
这个我倒没试验过,你可以试试,不过stride太小的话,训练数据增加,也会增加训练时间。 从另一方面说,stride有点接近数据增强功能,用同一份数据制造很多类似的上下文,延长上下文同时可以提高模型的泛化能力,但如果有很多太过类似的上下文,那就相当于冗余数据了,对收敛和泛化作用不大。
那我感觉 是我自己理解错了,我看代码认为 是训练时或finetuning时,每个step的loss 其实只是 预测输入句子X[1,...,s-1]之后 X[s]最后一个汉字的loss 现在再看回去,感觉自己理解错了。我这个理解是不是错误的啊?
对,你的理解是错的,训练或finetuning的loss都计算了整个输入句子汉字的loss。
对,你的理解是错的,训练或finetuning的loss都计算了整个输入句子汉字的loss。
感谢指点!
不客气。
请问finetuning batch size =1 就能取得效果了?