算法工程师面试之dropout

2022年01月16日 阅读数:4
这篇文章主要向大家介绍算法工程师面试之dropout,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

开篇讲个笑话面试

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

前言


定义

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

知识点

主要强调以下几个知识点:性能


  • 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)
  • ​train​​​ 与 ​​test​​​ 时的不一样
    dropout 只应用在train阶段,在test/eval阶段时是不用的。可是这是怎么控制的呢?能够参考​​​pytorch​​的源码来看:

算法工程师面试之dropout_泛化

即经过是否在​​train​​模式来选择是否使用 ​​dropout​​。在模型验证的时候,能够使用​​model.eval()​​来让这个​​traning​​参数变成false。spa