如何用Hugging Face从零训练BERT?Trainer训练是从零还是微调?
关于Hugging Face Trainer训练模式的解答
你使用
Trainer和TrainingArguments训练时属于从零训练BERT还是微调,和这套工具本身无关,完全由你传入Trainer的model参数的初始化方式决定。
两种场景的区分标准
从零训练BERT的场景
你初始化模型时没有加载任何已训练好的权重,仅通过BERT配置类生成随机初始化的模型,示例如下:from transformers import BertConfig, BertForMaskedLM # 自定义BERT配置,不加载任何预训练权重 config = BertConfig( vocab_size=30522, hidden_size=768, num_hidden_layers=12, num_attention_heads=12 ) # 得到的模型为随机初始化,没有经过任何预训练 model = BertForMaskedLM(config)这种情况下使用你贴出的
Trainer代码训练,就是从零开始训练BERT。微调BERT的场景
你初始化模型时调用了from_pretrained方法加载了已训练完成的权重,不管这个权重是公开的通用预训练BERT权重,还是你自己之前训练保存的领域专属BERT权重,示例如下:from transformers import BertForMaskedLM # 加载已经预训练好的bert-base-uncased权重 model = BertForMaskedLM.from_pretrained("bert-base-uncased")这种情况下使用
Trainer代码训练,属于在已有权重基础上做微调。
为什么两类场景的Trainer代码完全一致
Trainer是Transformers库封装的通用训练工具,它的核心作用是抽象了不同训练任务的共性流程:数据喂入、损失计算、反向传播更新权重、断点保存、日志输出等,这些流程不管是从零训练还是微调都是通用的,因此你会看到两类场景的Trainer调用代码没有差异。
内容的提问来源于stack exchange,提问作者Jack.Sparrow
相关产品推荐
相关产品推荐

