BERT 超参数在非常小的数据集上进行微调时有哪些好的参数范围?

数据挖掘 深度学习 伯特 微调
2021-10-11 09:51:56

我需要在句子分类任务上微调 BERT 模型(来自 huggingface 存储库)。但是,我的数据集非常小。我有 12K 的句子,其中只有 10% 来自正类。这里有没有人有在小数据集中微调 bert 的经验?你对学习率、批量大小、纪元数预热步骤等有什么建议吗?

2个回答

你有几节课?Bert 可以处理高质量的 12k 数据集进行二进制分类。我建议将您的正面测试用例复制 4 倍,并从您的负面类中抽样 5k 测试用例。这将为您提供平衡的数据集。然后使用 google Bert 团队的原始 GitHub 存储库在 google colab 中实现 BERT。您可以在此处找到功能协作:https ://colab.research.google.com/github/tensorflow/tpu/blob/master/tools/colab/bert_finetuning_with_cloud_tpus.ipynb 在协作中,TPU 大约需要 10 到 15 分钟才能运行。您所要做的就是使用编写您的数据处理器。以下参数是一个很好的起点。

TRAIN_BATCH_SIZE = 32
EVAL_BATCH_SIZE = 8
PREDICT_BATCH_SIZE = 8
LEARNING_RATE = 2e-5
NUM_TRAIN_EPOCHS = 3.0
MAX_SEQ_LENGTH = 128
# Warmup is a period of time where hte learning rate 
# is small and gradually increases--usually helps training.
WARMUP_PROPORTION = 0.1
# Model configs
SAVE_CHECKPOINTS_STEPS = 1000
SAVE_SUMMARY_STEPS = 500

数据增强

如果文本数据的数量很少,则可能适用文本数据论证,例如nlpaug应用文本摘要、删除停用词或标点符号将是创建数据变体的简单方法。

学习率

如何微调 BERT 以进行文本分类? 指出学习率是避免灾难性遗忘的关键,在学习新知识的过程中,预先训练的知识被擦除。

我们发现较低的学习率(例如 2e-5)对于使 BERT 克服灾难性遗忘问题是必要的。在 4e-4 的激进学习率下,训练集无法收敛。
在此处输入图像描述

大概这就是BERT 论文使用 5e-5、4e-5、3e-5 和 2e-5 进行微调的原因。

我们使用 32 的批量大小,并对所有 GLUE 任务的数据进行 3 个 epoch 的微调。对于每个任务,我们在开发集上选择了最佳微调学习率(在 5e-5、4e-5、3e-5 和 2e-5 中)

请注意,基础模型预训练本身使用了更高的学习率。

该模型在 Pod 配置中的 4 个云 TPU(总共 16 个 TPU 芯片)上进行了 100 万步的训练,批量大小为 256。序列长度限制为 90% 的步长为 128 个令牌,其余 10% 的步长为 512 个。使用的优化器是 Adam,学习率为1e-4, β1=0.9和 β2= 0.999,权重衰减为0.01,学习率预热 10,000 步,之后学习率线性衰减。

时代

时期的数量会相当少。最初的论文微调实验表明,所需的时间/epoch 数量很少,例如 GLUE 任务需要 3 个 epoch。以我个人的经验,5 或多或少足以完成文本分类任务,尽管这取决于您的数据。时期的数量也取决于要监控的指标。

批量大小

原始论文使用 32 进行微调,但这也取决于最大序列长度。

我们使用 32 的批量大小,并对所有 GLUE 任务的数据进行 3 个 epoch 的微调。

每个单词都被编码成一个大小为 768 的浮点向量,BERT/base 有 12 层。如果使用最大 512 长度,数据可能不适合批量大小为 32 的 GPU 内存。然后减少到 16。如果最大长度是 128 或 256,那么 32 将是一个不错的数字。请检查可用的 GPU 内存。

微调模型

您可以在 BERT 基础模型之上添加多个分类层,但原始论文指出只有一个输出层可以将 768 个输出转换为您拥有的标签数量,显然这是在 BERT 上进行微调时广泛使用的方式.

因此,预训练的 BERT 模型可以通过一个额外的输出层进行微调,从而为各种任务(例如问答和语言推理)创建最先进的模型,而无需大量特定于任务的架构修改。

BERT 模型中的所有参数都会进行微调,但您可以尝试冻结基础模型并在 BERT 基础模型之上添加更多分类层。

对于每个任务,我们只需将任务特定的输入和输出插入 BERT 并端到端微调所有参数。

优化器

原始论文还使用了权重衰减的 Adam。Huggingface 提供AdamWeightDecay (TensorFlow)AdamW (PyTorch)尽管可以尝试不同的优化器,但继续使用相同的优化器是明智的。默认学习率设置为预训练时使用的值。因此需要设置为微调的值。

有关的