微调(Fine-tuning)
微调是在特定于某个任务或领域的较小数据集上,继续训练大型预训练模型。
核验日期
定义
微调是在特定于某个任务或领域的较小数据集上,继续训练一个大型预训练模型。例如,在由编程示例组成的数据集上进行微调,可以帮助模型在编程方面表现得更好。微调与预训练完全相同,区别在于微调不是从随机权重开始。Transformers 文档中的教程演示了如何使用 Trainer 对大型语言模型进行微调。
一图看懂
根据 Transformers 文档,使用用户令牌登录 Hugging Face 账户,以便将微调后的模型推送到 Hub。TrainingArguments 提供用于自定义训练运行的选项。
- 加载数据集,并对模型所训练的文本列进行分词。
- 加载一个用于微调的预训练检查点。
- Loading models 指南提供了关于加载模型的更多细节。
- 训练轮数参数和每设备训练批大小参数控制训练时长与批大小。
- 学习率参数设置优化器的初始学习率。
- 创建一个 Trainer 实例,然后调用 train 方法开始训练。
- 推送到 Hub 的方法会上传微调后的权重、生成配置、分词器和模型配置。
原文没有明确这些要点的先后顺序,因此按要点列出,不画先后箭头。
工作原理
分词器创建模型输入,即 input_ids 和 attention_mask。在该教程中,模型的 forward 方法只接受 input_ids 和 attention_mask。分词之后,可以设置 remove_columns 来丢弃像 horoscope 这样的列。
根据 Transformers 文档,设置截断选项和 max_length,可以把较长的序列截断到指定的最大长度。根据 Transformers 文档,使用 train_test_split 方法可以创建用于评估模型的测试划分。根据 Transformers 文档,数据整理器把数据集样本组装成供模型处理的批次。
DataCollatorForLanguageModeling 会把每个批次动态填充到该批次中最长序列的长度,而不是把数据集中每个序列都填充到相同长度。文档指出,这样做通过避免计算不必要的填充标记来节省计算和内存。根据 Transformers 文档,将 mlm 设置为 False 可以避免随机遮盖标记。
将 dtype 设为 auto 会按权重保存时的 dtype 加载权重;不这样设置时,PyTorch 以 float32 加载权重,如果权重原本是 bfloat16,内存用量会翻倍。
例子
在教程示例中,代码把模型名称设为 Qwen/Qwen3-0.6B。在教程示例中,代码加载 karthiksagarn/astro_horoscope 数据集的 train 划分。在教程示例中,代码把 max_length 设为 512。
在教程示例中,代码用 test_size 为 0.1 调用 train_test_split。在教程示例的训练参数中,训练轮数设为 3,每设备训练批大小设为 2。在教程示例的训练参数中,学习率设为 2e-5,梯度累积步数设为 8。
Trainer 功能指南为自定义损失函数、节省内存的评估、检查点等 Trainer 功能提供最小可运行示例。Notebooks 以及 Resources 下的 Task Recipes 部分提供了针对不同文本、音频、视觉和多模态任务的更多训练示例。
来源
本页内容整理自以下官方来源,点击可核对原文。
核验日期 ·
本页由 AI 依据上述官方来源整理,并经自动核对,未经本站实测。 发现错误?告诉我们。
