gpt4 book ai didi

pytorch - 我可以将 BERT 用作特征提取器而不对我的特定数据集进行任何微调吗?

转载 作者:行者123 更新时间:2023-12-04 02:30:27 27 4
gpt4 key购买 nike

我正在尝试解决 10 个类别的多标签分类任务,其中一个相对平衡的训练集由 ~25K 样本组成,评估集由 ~5K 样本组成。
我正在使用拥抱脸:

model = transformers.BertForSequenceClassification.from_pretrained(...
并获得相当不错的结果(ROC AUC = 0.98)。
但是,我目睹了一些我似乎无法理解的奇怪行为-
我添加以下代码行:
for param in model.bert.parameters():
param.requires_grad = False
同时确保学习模型的其他层,即:
[param[0] for param in model.named_parameters() if param[1].requires_grad == True]
gives
['classifier.weight', 'classifier.bias']
像这样配置时训练模型会产生一些令人尴尬的糟糕结果(ROC AUC = 0.59)。
我的工作假设是开箱即用的预训练 BERT 模型(没有任何微调)应该作为分类层的相对较好的特征提取器。那么,我哪里弄错了?

最佳答案

根据我的经验,你的假设是错误的

an out-of-the-box pre-trained BERT model (without any fine-tuning) should serve as a relatively good feature extractor for the classification layers.


在尝试使用 BERT 的输出层作为词嵌入值时,我注意到类似的经历,几乎没有微调,这也得到了非常糟糕的结果;这也是有道理的,因为您实际上拥有 768*num_classes最简单形式的输出层中的连接。与 BERT 的数百万个参数相比,这使您对高度模型复杂性的控制量几乎可以忽略不计。但是,我也想在训练完整模型时谨慎指出过度拟合的结果,尽管我相信您知道这一点。
BERT 的整个想法是微调模型的成本非常低,因此为了获得理想的结果,我建议不要卡住任何层。禁用至少部分层会有所帮助的一个实例是嵌入组件,这取决于模型的词汇量大小(BERT-base 约为 30k)。

关于pytorch - 我可以将 BERT 用作特征提取器而不对我的特定数据集进行任何微调吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64526841/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com