当前位置:   article > 正文

算法工程师面试之dropout_bert dropoug

bert dropoug

开篇讲个笑话
前些日子,MSRA提出了使用Rdrop来提高模型的泛化性,我本着尝鲜的想法把其应用在我的任务上,但是发现效果并不好,甚至不如没有添加的效果。我就想啊想,不理解啊,为啥效果会不好呢?后来惊奇的发现代码里面除了bert层用的是0.1 的drop之外,没有其它层再用 dropout了,顿时泪奔!

前言

  • 文章来源:CSDN@LawsonAbs

定义

dropout,暂退法,又叫丢弃法,是一种性能极其强大的正则化方法。

知识点

主要强调如下几个知识点:

  • dropout的概率是丢弃的概率。例如 Bert 模型中,默认的丢弃概率是0.1。
  • dropout 的源码可以参考如下代码
import torch
from torch import nn

def dropout_layer(X, dropout):
    assert 0 <= dropout <= 1
    # 在本情况中,所有元素都被丢弃
    if dropout == 1:
        return torch.zeros_like(X)
    # 在本情况中,所有元素都被保留
    if dropout == 0:
        return X
    mask = (torch.rand(X.shape) > dropout).float()
    return mask * X / (1.0 - dropout)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • traintest 时的不同
    dropout 只应用在train阶段,在test/eval阶段时是不用的。但是这是怎么控制的呢?可以参考pytorch的源码来看:

在这里插入图片描述
即通过是否在train模式来选择是否使用 dropout。在模型验证的时候,可以使用model.eval()来让这个traning参数变成false。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/951672
推荐阅读
相关标签
  

闽ICP备14008679号