bert预训练有MLM和NSP两个任务,其中MLM是类似于“完形填空”的方式,对一个句子里的15%的词进行mask,通过双向transformer+feedforward+rediual_add+layer_norm完成对每个词的embedding编码,然后对mask的这个词进行预测,预测过程相当于做多分类,类别的个数是词汇的总个数,将mask的词的emb经过MLP变换生成在每个类别词汇上的logits 概率,label是mask位置上真实词在整个词汇上的one-hot编码,将logits和label计算交叉熵,又做了加权平均,即可得出MLM的loss,过程如下:

源码中的get_masked_lm_output()方法过程解析:
1、输入input_tensor:[batch,maskednums, embed_size]
2、经过线性变换+layernorm:[batch,maskednums, 768]
3、logits:将embedding table[3万,768]作为变换矩阵,计算logits:[batch,maskednums, 3万],相当于得出每个被盖住词在3万个词上的概率,其实就是3万个类别多分类
4、labels:one-hot编码[maskednums,3万]
5、计算交叉熵:[bactch, maskednums]
6、loss:加权平均得出一个实数</

BERT的预训练任务包括MLM和NSP,本文主要关注MLM。该任务中,15%的词汇被mask,通过transformer等层编码,然后预测mask位置的词,相当于在词汇表大小的类别上做多分类。logits与one-hot编码的label计算交叉熵,加权平均后得到loss。
最低0.47元/天 解锁文章
2038

被折叠的 条评论
为什么被折叠?



