1. 为什么LoRA微调需要调参?一个生动的比喻
如果你玩过摄影,肯定知道“光圈、快门、ISO”这三个参数。光圈控制景深,快门控制动态模糊,ISO控制噪点。拍一张好照片,不是把这三个参数调到最大或最小,而是根据光线、主体、你想要的效果,去找到一个完美的平衡点。
用LlamaFactory做LoRA微调,道理一模一样。lora_rank、lora_alpha、lora_dropout这些参数,就是你的“光圈、快门、ISO”。很多人拿到命令,直接照抄网上的“最佳配置”,比如--lora_rank 8 --lora_alpha 16,跑完发现效果不理想,要么模型“学傻了”(过拟合),要么“啥也没学会”(欠拟合),然后就开始怀疑人生。
我刚开始玩LoRA的时候也踩过这个坑。当时我用一个8B的模型微调客服对话,数据集不大,就几千条。我心想,既然LoRA号称高效,那我把lora_rank调大点,比如64,让模型学得更“充分”一点,效果肯定更好吧?结果训练出来,模型在训练集上对答如流,一到测试集就胡言乱语,生成的内容又长又啰嗦,还经常重复。这就是典型的过拟合——模型把训练数据背下来了,但没学会泛化。
后来我才明白,LoRA的核心思想是“用小改动撬动大模型”。lora_rank这个参数,决定了你这个小改动的“自由度”有多大。秩(rank)越高,你引入的可训练低秩矩阵就越大,模型能调整的“细节”就越多,但同时也更容易记住训练数据的噪声。这就像给你的相机镜头加了一个特别复杂的滤镜组,功能是强了,但操作不当,照片反而容易失真。
所以,LoRA调参的本质,是在模型表达能力和泛化能力之间走钢丝,同时还要时刻盯着你的显存消耗。一个秩为8的LoRA适配器,可能只给7B模型增加了四百多万参数,而全量微调则是动辄70亿参数。这就是为什么LoRA能在消费级显卡上跑起来。但如果你盲目把秩调到128,参数量可能飙升到几千万,显存占用和训练时间也会大幅增加,得不偿失。
2. 核心参数深度拆解:不只是数字游戏
网上很多教程把参数解释得像说明书,我们换个方式,把它们当成你训练模型的“旋钮”来理解。
2.1 lora_rank:模型的“学习广度”与“记忆深度”
lora_rank,也就是秩,是LoRA最核心的参数,没有之一。你可以把它想象成给预训练模型这个“老教授”配的“助教”团队规模。
- 秩太小(比如2或4):相当于只给老教授配了1-2个助教。助教能做的辅助工作很有限,只能处理一些最通用、最模式化的问题。模型学得慢,对新任务适应能力弱,容易欠拟合。但好处是极其省资源,几乎不会过拟合。
- 秩适中(比如8、16、32):这是最常见的甜点区间。相当于配了一个5-10人的专业助教团队。他们能分工合作,有的擅长处理专业术语,有的擅长调整对话语气,共同帮助老教授快速适应新领域(你的数据集)。模型能学到足够多的新知识,同时又不至于完全被数据带偏。
- 秩太大(比如64、128以上):相当于给老教授配了一个几十人的庞大团队。团队内部可能开始扯皮、重复劳动,甚至把老教授原来的教学思路都带歪了。模型能力过强,会把训练数据里的一些偶然特征、无关噪声都当成规律学下来,导致过拟合。显存占用和训练时间也会成倍增加。
实战经验:对于大多数指令微调或对话微调任务,如果你的数据集在1万到10万条之间,从lora_rank=8

1399

被折叠的 条评论
为什么被折叠?



