微调的上限是由底模决定的
2024 9 30 05:19 PM 0 条评论 73 次查看
当时的数据量只有 400 多条,为了避免过拟合,我一共只训练了 2 轮。为了避免相同的训练顺序对学习造成影响,还将两次训练集的顺序打乱了。
由于数据量很少,初始 loss 更低的 PiSSA 是非常推荐使用的,不然本就稀少的数据被用于降低初期较高的 loss,显得有点浪费。
之前那篇文章我没有说明 PiSSA 的原理,这里简单提一下:
LoRA 的原理是构造 2 个低秩矩阵,其中 A 矩阵是随机值,B 矩阵全是 0,它们相乘后再和原矩阵相加作为参数。
而 PiSSA 则是将原矩阵进行奇异值分解,也就是让分解得到的两个矩阵相乘等于原矩阵。当然,完全相等也没必要,一般会使用快速奇异值分解,让 A * B 近似于原矩阵即可。这样,我们在微调 A、B 矩阵时,初始状态更接近原矩阵(初始 loss 低),微调效果也更接近全参微调(最终 loss 低)。
我选用的验证集约 40 条,Qwen2-7B-Instruct 的 eval loss 大概能降到 0.3。
之后针对验证集中表现不好的例子,我又陆续构造了约 200 条数据。至此,eval loss 大概能降到 0.2。但继续增加数据量,却发现模型会出现教不会的现象。
顺便对比一些在线的模型:gpt-4o 和 gpt-4o-mini 大概到 0.14,glm-4-flash 大概到 0.25。