【发布时间】:2021-10-02 02:31:07
【问题描述】:
我有一个关于训练 BERT 分类(或预训练模型)的问题。
BERT 分类器模型通常构建 2 个模型。 BERT 模型和分类器。
许多 BERT 微调示例代码同时训练 BERT 模型和分类器层。 但我认为,分类器首先是训练,BERT 权重不应该更新。分类器训练后,训练所有模型层。
例子
import torch
from transformers import BertForSequenceClassification
model = BertForSequenceClassification()
...
# training1
for name, param in model.named_parameters():
if 'classifier' in name:
param.requires_grad = True # only classifier update
else:
param.requires_grad = False # tied other layer
...
# And after training1, we can using BERT model that is trained only classfier.
model = BertForSequenceClassification()
model.load_state_dict(torch.load({model only trained classifier})
for name, param in model.named_parameters():
param.requires_grad = True # training all
# training BERT Classification model
为什么要一次性训练 BERT 分类模型? 谢谢。
【问题讨论】:
-
为什么你认为 BERT 模型不应该与分类(特定任务)层一起进行联合训练?
-
许多例子表明,使用特定任务层的预训练模型训练效果很好。但我认为,BERT 模型已经训练过了,但特定于任务的层只是初始化了。所以想知道为什么他们给我看好的结果。实验结果存在,但我找不到理论结果。
-
BERT 模型在通用和大型语言语料库上进行训练。因此,继续微调任务特定层和任务特定数据的 BERT 模型总是有利的。
标签: machine-learning nlp huggingface-transformers bert-language-model