结论
在进行大模型训练的时候,epoch的大小是对灾难性遗忘问题有影响的。epoch 太少会导致欠拟合问题,太多会导致过拟合问题。
实验
采用lora微调方法对chatglm3-6b模型进行微调,加入700条领域数据,结束后对微调后的模型进行评测。
通用数据集的评测分数
ceval | mmlu | arc | gsm8k | |
chatglm3-6b原版 | 0.5119 | 0.4817 | 0.6186 | 0.5618 |
epoch-5 | 0.3425 | 0.3216 | 0.436 | 0.1516 |
epoch-4 | 0.367 | 0.3512 | 0.4027 | 0.1638 |
epoch-3 | 0.4027 | 0.3923 | 0.4667 | 0.2987 |
epoch-2 | 0.4287 | 0.3783↓ | 0.4608↓ | 0.2631↓ |
epoch-1 | 0.4346 | 0.4044 | 0.5009 | 0.4708 |
可以看到,除了epoch-2,某些数据集的分数有所下降以外,可以说,随着epoch的减少,数据集评分会出现上升趋势。
领域数据集的评测分数
epoch-5
epoch-1
可以观察到随着epoch的减少,领域射弩聚集的评测分数呈现下降趋势
理解epoch
epoch是机器学习中遍历数据集的次数。在做大模型训练时,你使用一个1000个样本的数据集来进行训练。设置epoch=1的意思可以理解为,让模型学习1次数据集。用中学生学习数学的场景来解释,就是学生刷真题的遍数,epoch=1就是刷一遍真题。数学试题也分不同的领域,当某个领域的试题做的多了,而其他领域的试题做的少就会导致当前领域的分数提高,而其他领域的分数会因为长时间不做题而降低(遗忘)
训练时调整epoch的宗旨
关键在于找到一个折衷点,既要采用尽可能少的epoch(这会导致欠拟合),又要采用尽可能多的epoch(这会导致过拟合)。找到最佳epoch数需要进行一些实验,并且可能需要使用诸如提前停止之类的技术来避免过拟合
参考链接
Mastering the Fundamentals: Differences Between Sample, Batch, Iteration, And Epoch