14. 多任务微调和单任务微调该怎么选?有哪些常见问题?

整理多任务微调与单任务微调的选择方法和常见问题。

简单回答

如果模型只需要服务一个特定任务,单任务微调效果通常更好。如果模型需要同时处理多种任务(比如一个模型同时做客服、摘要、翻译),多任务微调更实用。多任务微调的核心挑战是任务间的冲突——不同任务的最优参数更新方向可能矛盾,导致某些任务的效果被拖累。

详细解释

单任务微调

专注于一个任务或一个很窄的场景,所有数据都是围绕这个任务的。好处是目标明确、效果容易最大化、调参简单。缺点是每个任务需要一个独立的模型(或一个独立的 LoRA adapter),任务很多的时候部署成本高。

多任务微调

把多种任务的数据混合在一起训练。好处是一个模型服务多种需求,部署成本低,而且不同任务之间可能有正迁移——比如学了摘要能力可能对问答也有帮助。FLAN 系列(Google)是多任务微调的经典工作,证明了大规模多任务训练可以显著提升模型的 zero-shot 泛化能力。

多任务微调的常见问题

第一是任务冲突(Task Conflict)。不同任务对模型参数的最优更新方向可能不一致。比如客服任务希望模型回答简洁有重点,写作任务希望模型回答详细有文采。如果直接混合训练,可能两边都做不好,最终效果是各任务的折中而不是各任务的最优。

第二是数据配比问题。如果某个任务的数据量远大于其他任务,模型会被这个任务"带偏",其他任务效果下降。需要做数据均衡,常用的方法有:按任务上采样(少数据任务重复采样)、按 task proportional mixing、或者设置每个 batch 中各任务的固定比例。

第三是评估复杂。多任务模型需要在所有任务上分别评估,而且要关注"此消彼长"现象——改进某个任务可能导致另一个任务退化。需要一个综合的评估指标体系。

什么时候该选多任务?

如果任务之间有较强的关联性(比如都是理解类任务或都是生成类任务),多任务微调通常收益大于冲突。如果任务性质差异很大(比如代码生成和情感分析),冲突风险高,不如分开训或者用多个 LoRA adapter。

一个实用的折中方案是:用一个 base model 做多任务 SFT 打底,然后针对核心任务再训单独的 LoRA adapter。这样既有多任务的泛化能力,又有单任务的精细效果。

面试时可以这样答

选择上其实看场景。如果只服务单一任务,单任务微调效果上限更高,调参也更简单。如果一个模型要同时处理多种任务,多任务微调更实际,但要处理好任务冲突和数据配比。

多任务微调最常见的问题是任务间冲突——不同任务对参数的更新方向不一致,导致互相拖累。另一个是数据不均衡,某个任务数据量太大会把模型"带偏"。解决方式主要是做数据均衡采样,以及评估时分任务看指标,关注此消彼长现象。

实际工程中一个比较好的方案是多任务 SFT 打底加单任务 LoRA 精调。base model 做多任务训练获得泛化能力,核心任务再训单独的 LoRA adapter 追求极致效果。这样既灵活又高效。

常见追问

  1. 多任务微调时数据配比怎么定?有没有自动化的方法?
  2. FLAN 的多任务训练为什么能提升 zero-shot 泛化?背后的机制是什么?
  3. 多个 LoRA adapter 能不能合并?合并后会不会有任务冲突?