制作了500多个LoRA之后,这是秘密
(我的文章在reddit上转发)
好吧,你想要,它就在这里
数据集的质量占95%。剩下的5%是不被糟糕的参数破坏。
是啊,我知道,天哪!不开玩笑,人们都在寻找秘密参数或秘诀——但这才是全部。
我指的是晶莹剔透的数据集。是的,我知道,数千甚至数万个条目,生成或从互联网上抓取,谁有时间去查看。我在“专业”数据集中看到过。随便看几个随机条目,你很快就会发现垃圾——因为它们显然是生成或抓取的,从未真正检查过。几个烂鸡蛋算什么,对吧?好吧,正如奶奶帕姆所说,它会把整批都搞坏。
一旦我开始手动检查数据集并删除或更改垃圾数据,质量就提高了10倍。是的,这需要大量时间——但无论参数或技巧都无法解决这个问题,抱歉。
训练参数的存在是为了不破坏它——而不是让它变得更好,所以你不必追求完美的LR 2.5647e-4,它不存在。你只是朝着正确的方向努力,如果数据集很棒,大多数时候你都会成功。
更多说明
13b只能达到那个程度。你不可能在13b上创建100%可靠的微调。你会接近——但就像孩子一样,有时它会把一杯牛奶洒在你腿上。33b才是王道。遗憾的是,在配备24GB显卡的家用硬件上训练33b基本上没用,因为你必须大幅降低参数——就像我之前说的——基本上毁了它。33b至少需要48GB,这样你才能把参数调高。
恕我直言,如果你能进行多于几个批次的训练,梯度累积会降低质量。某个地方可能存在最佳点,但我不知道。当然,批次1和GA 32会比批次1和GA 1好,但那不是重点,那只是权宜之计。编辑:它可能会防止过拟合,从而有助于泛化。这取决于目标以及数据集的多样性。
当你在基础模型上进行微调时,数据集的大小很重要,但当你在已经良好微调的模型上进行微调时,数据集的大小就不那么重要了——事实上,在这种情况下,有时数据集小反而更好,否则你可能会破坏之前良好的微调。
Alpha = 2x rank 似乎是来自旧时代的东西,那时人们的显存最多是土豆级别,并且想快速达到目标。我真的不觉得它有什么意义——它只是将权重放大,仅此而已。把东西调响亮,也会把噪音调响亮。
我最喜欢的调度器是预热,保持1个epoch,然后余弦衰减接下来的1-x个epoch。
Rank 字面上就是你得到的那些可训练参数的数量——你不必试图寻找其他含义(风格 vs 知识)。它就像一张用100万像素和1600万像素拍摄的图片。你总是得到完整的图像,但在100万像素上,细节会非常模糊——虽然你仍然可以看到大主题,但你最好不要指望细节会很精细。当然问题是——你是否有足够多样化的训练数据来填充这些参数?如果没有,你将创建一个非常具体的模型,它将很难泛化。降低rank将有助于泛化,但也会丢失一些平常的细节。
还有别的吗?
哦,好吧,我刚才说的是LLM的LORA,但它当然也适用于SD。事实上,它们都是一回事(因此PEFT可以同时用于两者,并且规则相同)