删除并重新初始化相关的 BERT 权重/参数

Posted

技术标签:

【中文标题】删除并重新初始化相关的 BERT 权重/参数【英文标题】:Delete and Reinitialize pertained BERT weights / parameters 【发布时间】:2021-08-07 22:20:56 【问题描述】:

我尝试为分类下游任务微调 BERT。

现在我再次加载模型并遇到以下警告:

初始化 BertModel 时未使用 bert-base-uncased 的模型检查点的某些权重:['cls.predictions.transform.dense.weight', 'cls.predictions.transform.LayerNorm.weight', 'cls. seq_relationship.weight','cls.predictions.bias','cls.seq_relationship.bias','cls.predictions.transform.LayerNorm.bias','cls.predictions.transform.dense.bias','cls.predictions。解码器.weight']

如果您是从针对其他任务或使用其他架构训练的模型的检查点初始化 BertModel(例如,从 BertForPreTraining 模型初始化 BertForSequenceClassification 模型),则这是预期的。 如果您从希望完全相同的模型的检查点初始化 BertModel(从 BertForSequenceClassification 模型初始化 BertForSequenceClassification 模型),则不会出现这种情况。

[屏幕截图][1] [1]:https://i.stack.imgur.com/YJZVc.png

我已经删除并重新安装了 transformers==4.6.0,但没有任何帮助。 我想也许通过参数“force_download=True”它可能会恢复原来的权重,但没有任何帮助。

我应该继续忽略警告吗?有没有办法删除模型检查点,例如在下载模型时再次固定权重?

提前致谢!

最好, 亚历克斯

【问题讨论】:

【参考方案1】:

只要您正在为下游任务微调模型,就可以忽略此警告。这个想法是来自预训练模型的[CLS] 令牌权重不会对下游任务有用,需要进行微调。

Huggingface 随机初始化它们,因为您使用的是 bert-base-cased,这是一个 BertForPretraing 模型,并且您从它创建了一个 BertModel。警告是为了确保您了解直接使用预训练模型的区别,或者您是否计划针对不同的任务对其进行微调。

如果您计划从事分类任务,我建议您改用他们的 BertForSequenceClassification 类。

TL;DR 只要你在微调就可以忽略它。

【讨论】:

【参考方案2】:

您好,感谢您的回答!我描述的不是很具体!我首先为下游任务微调了 Bert,然后在另一个笔记本中我只想要通常的相关 BERT 并使用它的嵌入。

我已经关联了根本不相关的事物。我想通过微调下游任务的 BERT 参数,我已经更改了所有“bert_base_uncased”模型的参数,这就是我收到此警告的原因。即使我只是想要标准中的常用嵌入也适用于 BERT。

我已经“解决”了这个问题,或者至少我找到了解决方案:

一个用于下游任务分类的 Conda 环境:conda install -c conda-forge transformers 一个用于获取嵌入的 Conda 环境:conda install -c conda-forge/label/cf202003 transformers

也许这是 Apple/Mac 特有的东西,我不知道为什么会遇到这个问题,但没有其他人 ^^

还是谢谢你的回答!

最好, 亚历克斯

【讨论】:

以上是关于删除并重新初始化相关的 BERT 权重/参数的主要内容,如果未能解决你的问题,请参考以下文章

在 pytorch 中修改预训练模型时,旧的权重会重新初始化吗?

如何在 Keras 中重新初始化现有模型的层权重?

您能否从头开始训练具有特定任务架构的BERT模型?

Bert加bilstm和crf做ner的意义

是否再次调用 model.fit 方法重新初始化已经训练的权重?

深度学习笔记1-权重参数全相同值初始化,导致无法训练-python