前言
我正在尝试微调基于变压器的模型(LM 和 LLM)。我使用的LM是DEBERTA,LLM是LLaMA 3。任务是对文本是否包含居高临下的语言进行分类(二元分类)。
我使用
AutoModelForSequenceClassification
,它为 LM 和 LLM 的模型顶层添加了一个分类层。
实施
数据集:
0
(不居高临下)和 1
(居高临下)。比例是1:10
(居高临下:不居高临下)。参数
参数 | LM | 法学硕士 |
---|---|---|
批量大小 | 32 | 16(per_device_train_batch_size = 4,gradient_accumulation_steps = 4) |
纪元/步骤 | 2 纪元 | 1000 个步骤(20% 用作验证集) |
学习率 | 线性 (2e-5) | 常数 (2e-5) |
优化器 | AdamW(lr = 2e-5,eps = 1e-8) | paged_adamw_32bit |
微调 | 全面微调 | LoRA(rank=32,dropout=0.5,alpha=8),具有 8 位量化 |
学习率 | 线性 (2e-5) | 常数 (2e-5) |
精准 | 0,659 | 0,836 |
回忆 | 0,47 | 0,091 |
F1-分数 | 0,549 | 0,164 |
问题与问题
这是训练样本的日志。验证 f1 分数始终为
>0.6
。但验证损失却停留在 0.24
。是微调LLM的样本之一。
验证 F1 分数 (>0.6) 和测试集 F1 分数(范围从 0 到 0.2)之间的差异表明您的模型与验证集过度拟合,或者模型如何推广到看不见的问题数据。以下是一些潜在的原因以及您可以采取的解决此问题的步骤:
数据泄漏:仔细检查验证集是否有数据泄漏到训练过程中。如果训练和验证数据之间无意中重叠,或者预处理步骤(如标记化)没有正确地分别应用于训练和验证集,则可能会发生泄漏。
超参数调优:如果您根据验证集性能执行了广泛的超参数调优,则模型可能过于贴近验证集特征,导致测试集泛化不佳。
正则化:确保训练过程中有效应用dropout等正则化技术,防止模型记忆训练数据。
交叉验证:实施交叉验证,以更可靠地估计模型在不同数据分割上的性能。
误差分析:对测试集预测进行详细的误差分析。识别模型失败的模式(例如,难以检测的特定类型的居高临下的语言)。这可以指导进一步的模型改进或数据集调整。
模型微调:考虑调整与学习率计划、优化器甚至模型架构本身相关的超参数(例如层配置或使用集成方法)。