我有一些定制的数据,我想使用进一步培训的伯特模型。到目前为止,我已经尝试了以下两种方法:
BertForPreTraining model)
MLM) +下一句预测(NSP)头进行预培训(例如使用带有MLM目标的预先训练的BERT模型(例如,假设我们不需要NSP作为培训前部分的BertForMaskedLM模型)。但我仍然感到困惑的是,如果使用BertForPreTraining或BertForMaskedLM真的对伯特进行持续的预培训,或者这只是两个微调模型,分别使用MLM+NSP和MLM对伯特进行微调。在使用MLM+NSP进行微调或使用这两个头不断地对其进行预训练或这是我们需要测试的东西时,有什么区别吗?
我已经回顾过类似的问题,如this one,但我仍然想确保,从技术上讲,从最初的检查点开始,继续对模型进行预培训与使用相同的目标/头对模型进行微调之间是否有区别。
发布于 2021-07-22 10:13:01
答案只不过是所用术语的不同而已。当模型被训练在一个大的通用语料库上时,它被称为“预训练”。当它适应于特定的任务或数据集时,它被称为“微调”。
从技术上讲,无论是“训练前”还是“微调”,都会对模型权重进行更新。
例如,通常情况下,您只需接受预先训练的模型,然后对其进行微调,以完成特定的任务(如分类、问答等)。然而,如果您发现目标数据集来自某个特定领域,并且您有一些未标注的数据,可能有助于模型适应特定领域,那么您可以做一个MLM或MLM+NSP‘微调’(无监督学习)(一些研究人员称之为“预训练”,特别是当使用一个庞大的语料库来训练模型时),然后使用目标语料库进行目标任务的微调。
发布于 2022-05-01 12:15:47
是的,训练前和“进一步的训练前”是有区别的.
预训练通常意味着取原模型,随机初始化权值,并在一些大型语料库上从零开始训练模型。
进一步的预训练意味着采用一些已经训练过的模型,并基本应用转移学习--使用训练模型中已经节省的权重,并在新的领域上对其进行训练。这通常是有益的,如果你没有一个非常大的语料库。
对于BertForPreTraining和BertForMaskedLM,您可以将它们中的任何一种用于上述目的。研究表明,对MLM进行进一步的预训练是非常有益的,而且通常根本不需要NSP。所以你最好和BertForMaskedLM一起去。
NB!您可以通过:BertForMaskedLM.from_pretrained({model_name})初始化模型检查点,然后应用培训过程,否则只需传递一个配置(来自huggingface )
https://stackoverflow.com/questions/68461204
复制相似问题