2021.07.09 周五 阴

20 篇文章 0 订阅
12 篇文章 0 订阅

学习R-drop  R-Drop: Regularized Dropout for Neural Networks

文章链接   https://arxiv.org/pdf/2106.14448v1.pdf

意思就是用dropout 去模拟bert中的mask  牛蛙牛蛙

一个输入x将经过模型两次,得到两个分布P1和P2,由于dropout的随机性导致两个输出有差异,

为了减少两个模型的输出的差异性,就使用了下面这个损失函数KL距离(相对熵)(Kullback-Leibler Divergence)衡量的是相同事件空间里的两个概率分布的差异情况

这个Dkl(P1||P2) 如何算的,如下面代码

def compute_kl_loss(self, p, q pad_mask=None):
    
    p_loss = F.kl_div(F.log_softmax(p, dim=-1), F.softmax(q, dim=-1), reduction='none')
    q_loss = F.kl_div(F.log_softmax(q, dim=-1), F.softmax(p, dim=-1), reduction='none')
    
    # pad_mask is for seq-level tasks
    if pad_mask is not None:
        p_loss.masked_fill_(pad_mask, 0.)
        q_loss.masked_fill_(pad_mask, 0.)

    # You can choose whether to use function "sum" and "mean" depending on your task
    p_loss = p_loss.sum()
    q_loss = q_loss.sum()

    loss = (p_loss + q_loss) / 2
    return loss
# keep dropout and forward twice
logits = model(x)

logits2 = model(x)

# cross entropy loss for classifier
ce_loss = 0.5 * (cross_entropy_loss(logits, label) + cross_entropy_loss(logits2, label))

kl_loss = compute_kl_loss(logits, logits2)

# carefully choose hyper-parameters
loss = ce_loss + α * kl_loss

回顾bert 预训练 词向量之BERT 

https://zhuanlan.zhihu.com/p/48612853

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值