阅读不能停,保持日常输入大于输出
【通过学习随机掩码来解释生物序列的神经网络】
切入正题之前,去了解了一下“掩码”的概念。
mask(掩码、掩膜)是深度学习中的常见操作。简单而言,其相当于在原始张量上盖上一层掩膜,从而屏蔽或选择一些特定元素,因此常用于构建张量的过滤器。
按照上述定义,非线性激活函数Relu(根据输出的正负区间进行简单粗暴的二分)、dropout机制(根据概率进行二分)都可以理解为泛化的mask操作。
从任务适应性上,mask在图像和自然语言处理中都广为应用,其应用包括但不局限于:图像兴趣区提取、图像屏蔽、图像结构特征提取、语句padding对齐的mask、语言模型中sequence mask等。
从使用Mask的具体流程上,其可以作用于数据的预处理(如原始数据的过滤)、模型中间层(如ReLU、Dropout等)和模型损失计算上(如padding序列的损失忽略)。
尽管上述操作均可统称为mask,但其具体的算法实现细节需要根据实际需求进行设计
图像处理中的掩码是指通过对图片中的patch进行随机掩码,然后通过未被掩码的区域预测被掩码掉的区域,进而使得模型学习图像的语义特征,这也是Masked AutoEncoder(MAE)的核心思想。
PyTorch提供了很好用的掩码(masked)操作API,如使用tensor.masked_fill(mask, value)
将张量中的一些值掩盖掉。在Transformer中与BERT中都有用到。torch.masked_select(input, mask, out=None)根据掩码张量mask中的二元值,取输入张量中的指定项( mask为一个 ByteTensor),将取值返回到一个新的1D张量,张量 mask须跟input张量有相同数量的元素数目,但形状或维度不需要相同。