nn.TransformerEncoderLayer中的src_mask,src_key_padding_mask解析

这篇具有很好参考价值的文章主要介绍了nn.TransformerEncoderLayer中的src_mask,src_key_padding_mask解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

注意,不同版本的pytorch,对nn.TransformerEncdoerLayer部分代码差别很大,比如1.8.0版本中没有batch_first参数,而1.10.1版本中就增加了这个参数,笔者这里使用pytorch1.10.1版本实验。

attention mask

要搞清楚src_mask和src_key_padding_mask的区别,关键在于搞清楚在self-attention中attention mask的作用是啥。
a t t e t n i o n   s c o r e = s o f t m a x ( Q K T d k ) V attetnion \ score = softmax({QK^{T} \over \sqrt d_{k} })V attetnion score=softmax(d kQKT)V
上式中,并没有体现出pad的token,认为所有token都是有用的,但是实际写代码时使用batch进行训练,所以要将所有token序列pad到相同的长度。
attention mask的作用就是,在计算注意力分数的时候,告诉模型,哪些token是pad的,不应该分配注意力分数。

针对一条长度为 L L L的token序列,其attention mask的矩阵应该是 L ∗ L L*L LL,下图是一个attention mask,蓝色的表示不是pad的token,灰色的表示pad的token。

nn.TransformerEncoderLayer中的src_mask,src_key_padding_mask解析
但是针对attention mask中蓝色位置和灰色位置中的值,目前有两种做法:

  • 在huggingface的transformers中实现是,将蓝色位置填1 ,灰色位置填0,也就是1表示真实序列,不需要被mask,而0表示pad序列,需要被mask。但是为了用户操作,huggingface并没有要求用户输入一个 B ∗ L ∗ L B*L*L BLL的mask矩阵,而是输入 B ∗ L B*L BL的矩阵即可,然后在forward函数中使用get_extended_attention_mask方法将其扩展为 B ∗ L ∗ L B*L*L BLL的mask矩阵。
  • 在pytorch的transformers中的实现是,蓝色的位置填0,灰色的位置填float(“-inf”),但是在实现时,又分为了src_mask和src_key_padding_mask,而最终的attention mask矩阵,是通过这个两个矩阵得到的。
    其中:

src_mask: 必须是2D或者3D的矩阵,形状为 [ L , S ] [L,S] [L,S]或者 [ B ∗ n u m _ h e a d s , L , S ] [B*num\_heads, L, S] [Bnum_heads,L,S] L L L是目标序列长度, S S S是源序列长度(只有涉及到机器翻译这种encoder-decoder框架目标序列和源序列才有意义,如果只是用transformer encoder做编码,则 L = S L=S L=S), B B B是batch size, n u m   h e a d num\ head num head表示头数。另外src_mask的取值有三种,

  1. 可以是binary mask,True的位置表示需要被mask,
  2. 可以是byte mask,非零的位置表示需要被mask,
  3. 可以float mask,这时float(“-inf”)的位置需要被mask。

src_key_padding_mask:是一个2D的矩阵,形状为 [ B , S ] [B, S] [B,S],取值有两种,

  1. 可以是binary mask,True的位置表示key矩阵需要被mask,
  2. 可以是byte mask,非零的位置表示key矩阵需要被mask,

这里的key矩阵应该也是为了涵盖encoder-decoder这样的情况,对于只用transformer encoder的情况,src_key_padding_mask则更像是huggingface 中的attention mask。

其实在pytorch官方代码中,是通过src_mask和src_key_padding_mask二者综合得到最终的attention_mask。对于绝大多数情况,我们只需要使用src_key_padding_mask即可。文章来源地址https://www.toymoban.com/news/detail-444488.html

到了这里,关于nn.TransformerEncoderLayer中的src_mask,src_key_padding_mask解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 4.正则提取html中的img标签的src内容

    我们以百度贴吧的1吧举例 目录 1  把网页搞下来 2  收集url 3  处理url 4  空的src 5  容错 6  不使用数字作为文件名 7  并不是所有的图片都用img标签表示 8  img标签中src请求下来不一定正确 9  分页   搞下来之后,双击打开是这样的 我们实际拿的就是 img标签中src的内

    2024年02月09日
    浏览(46)
  • 注意力屏蔽(Attention Masking)在Transformer中的作用 【gpt学习记录】

    填充遮挡(Padding Masking): 未来遮挡(Future Masking):

    2024年02月07日
    浏览(36)
  • torch.nn中的L1Loss和MSELoss

    我们打开Pytorch官网,找到torch.nn中的loss function,进去如下图所示。   我们先来看看 L1LOSS 损失函数的使用。下图是官网给出的描述。         L1loss有两种方式,一种是将所有误差累加作为总损失,另一种是将所有误差累加之后求平均作为总损失。         例如,给定输入

    2024年02月09日
    浏览(39)
  • 详解Pytorch中的torch.nn.MSELoss函,包括对每个参数的分析!

    一、函数介绍 Pytorch中MSELoss函数的接口声明如下,具体网址可以点这里。 torch.nn.MSELoss(size_average=None, reduce=None, reduction=‘mean’) 该函数 默认用于计算两个输入对应元素差值平方和的均值 。具体地,在深度学习中,可以使用该函数用来计算两个特征图的相似性。 二、使用方式

    2023年04月19日
    浏览(47)
  • python中的torch.nn.Softmax() 用法和例子 dim=1 dim=2

    torch.nn.Softmax() 是 PyTorch 中的一个类,用于实现 softmax 函数。softmax 函数是一种常用的激活函数,它可以将一个向量转换成一个概率分布,使得每个元素都是非负数且和为 1。softmax 函数通常在分类问题中使用,可以将一个多分类问题转换成多个二分类问题,从而得到每个类别的

    2024年02月16日
    浏览(105)
  • Pytorch计算余弦相似度距离——torch.nn.CosineSimilarity函数中的dim参数使用方法

    前言 一、官方函数用法 二、实验验证 1.计算高维数组中各个像素位置的余弦距离 2.验证高维数组中任意一个像素位置的余弦距离 总结 现在要使用Pytorch中自带的 torch.nn. CosineSimilarity函数计算两个高维特征图(B,C,H,W)中各个像素位置的特征相似度,即特征图中的每个像素位置上

    2024年02月13日
    浏览(42)
  • Element-ui中的el-image的图片预览功能(:preview-src-list)

    今天用了element-ui中的图片预览功能,但是它的图片预览功能只能预览事先定义的图片,与我的业务功能完全不符,我的业务功能是在表格上显示多张图片,当点击图片时,就预览当前点击的图片。 所以我将其修改了一下,将后端返回的图片依次渲染在页面上;功能就是当点

    2024年02月11日
    浏览(42)
  • torch.nn.functional.grid_sample(F.grid_sample)函数的说明 & 3D空间中的点向图像投影的易错点

    由于二者有一定共通之处,因此放在一篇文章内介绍。   该函数的作用是在图像/体素空间中采样特征。 变量名 数据类型 默认值 含义 备注 input Tensor - 原始图像/体素空间的特征 形状需为 ( B , C , H , W ) (B,C,H,W) ( B , C , H , W ) 或 ( B , C , D , H , W ) (B,C,D,H,W) ( B , C , D , H , W ) ,分

    2023年04月24日
    浏览(49)
  • Mask2Former来了!用于通用图像分割的 Masked-attention Mask Transformer

    原理https://blog.csdn.net/bikahuli/article/details/121991697 源码解析 论文地址:http://arxiv.org/abs/2112.01527 项目地址:https://bowenc0221.github.io/mask2former Mask2Former的整体架构由三个组件组成: 主干特征提取器:主干特征提取器从输入图像中提取低分辨率特征。在Mask2Former中,主干特征提取器通

    2024年02月02日
    浏览(47)
  • 生成随机mask以及根据mask对两幅图片进行合并

    对图像处理的一些操作还是需要掌握的嘿嘿 这里代码参考MAT的一份代码: https://github.com/fenglinglwb/MAT/blob/main/datasets/mask_generator_256.py 封装一下生成mask函数 调用一下 这里以celeba-256为例子 调用一下 000255.jpg 001133.jpg 000255_001133.jpg

    2024年02月14日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包