使用 BERT 作为“特征提取器”与固定层的微调 BERT 之间的区别

数据挖掘 深度学习 nlp 伯特 微调
2022-02-19 12:45:51

我知道有两种方法可以将 BERT 用于某些 NLP 分类任务:

  1. BERT 可能执行“特征提取”,其输出进一步输入到另一个(分类)模型
  2. 另一种方法是在某些文本分类任务上微调 BERT,方法是向预训练的 BERT 添加一个或多个输出层并重新训练整体(固定不同数量的 BERT 层)

但是,如果在第二种情况下,我们修复所有层并添加分类模型中的所有层,则第一种和第二种方法实际上是相同的,对吗?

2个回答

不,方法 1 和 2 不一样:

  • 在方法 1(特征提取)中,您不仅获取 BERT 的输出,而且通常获取所有或部分 BERT 层的内部表示。

  • 在方法 2 中,您不仅要训练分类层,还要训练所有 BERT 层。通常,您选择非常低的学习率和三角学习率计划以避免灾难性遗忘。

有许多科学文章研究如何在迁移学习场景中最好地使用 BERT。这可能是一个很好的起点:https ://www.aclweb.org/anthology/W19-4302/

在方法 2 中,在您修复了所有 Bert 层并训练了最后一个分类模型之后,您可以选择取消修复 Bert 层并进一步训练您的模型,并为您当前的任务获得(希望)更优化的参数。

在 Pytorch 中,这可以通过以下方式完成:

首先修复图层

for param in model.parameters():
    param.requires_grad = False

然后解开图层

for param in model.parameters():
    param.requires_grad = True