指令微调的训练策略
文章目录
-
- 优化设置
- 数据组织策略
在训练方式上,指令微调与预训练较为相似,很多设置包括数据组织形式都可以预训练阶段所采用的技术。
优化设置
指令微调中的优化器设置(AdamW 或 Adafactor)、稳定训练技巧(权重衰减和梯度裁剪)和训练技术(3D 并行、ZeRO 和混合精度训练)都与预训练保持阶段一致,可以完全沿用。下面主要介绍一些指令微调与预训练的不同之处。
- 目标函数. 预训练阶段通常采用语言建模损失,优化模型在每一个词元上的损失。而指令微调可以被视为一个有监督的训练过程,通常采用的目标函数为序列到序列损失,仅在输出部分计算损失,而不计算输入部分的损失。
- 批次大小和学习率. 考虑到预训练阶段已经学习到了能够展现较好性能的模型参数,指令微调阶段通常只需要使用较小的批次大小和学习率对模型进行小幅度的调整。例如 InstructGPT (175B) 微调的批次大小为 8,学习率恒定为 5.03×10−6;Alpaca (7B) 微调的批次大小为 128,学习率预热到 2 × 10−5,然后采用余弦衰减策略。
- 多轮对话数据的高效训练. 对于一个多轮对话数据,通常的训练算法是将其拆分成多个不同的对话数据进行单独训练。为了提升训练效率,可以采用特殊的掩码机制来实现多轮对话数据的高效训练。在因果解码器架构中,由于输入输出没有明显的分界