预训练BERT

http://zh-v2.d2l.ai/chapter_natural-language-processing-pretraining/bert-pretraining.html

为什么都要放在0上的gpu?放在1上可以吗,有什么区别?

image
已经是一维,没必要再转一维。


mlm其实用loss(mlm_Y_hat.reshape(-1, vocab_size), mlm_Y.reshape(-1))就可以了,用后面几步,有点多余,而且结果一样。这里我觉得写代码的人想把weight为0的过滤掉,但不是这么写的。这么写还是没有过滤掉。因为loss用的均值,是不行的,要么法1:应该用nn.CrossEntropyLoss(reduction=none),而不是nn.CrossEntropyLoss()。法2:去掉bert数据集中_pad_bert_inputs函数中的max_num_mlm_preds,即不预测max_len的15%, 而是实际有几个,就预测几个,省掉后面weight的麻烦。