d2l 注意力评分函数 --附加mask_softmax讲解

深度学习中的注意力机制:softmax与加性、缩放注意力
文章介绍了在深度学习中处理序列数据时常用的注意力机制,包括mask_softmax函数的实现,它允许对序列的某些部分进行屏蔽。接着详细解释了加性注意力和缩放注意力的工作原理,以及它们在不同场景下的应用。加性注意力通过权重相乘和内积处理不同长度的序列,而缩放注意力适用于长度相同的序列,通过点积计算注意力分数。

本章节tensor处理操作也不少,逐个讲解下:

目录

1.mask_softmax

1.1探索源码d2l.sequence_mask

2.加性注意力

3.缩放注意力


1.mask_softmax

  dim=-1表示对最后一个维度进行softmax
  .dim()返回的是维度数
  对于需要mask的数,要用绝对值非常大的负数替换,不能用0,因为0进行softmax时exp=1,返回值不会约等于0.

#@save
def masked_softmax(X, valid_lens):
    """通过在最后⼀个轴上掩蔽元素来执⾏softmax操作"""
    # X:3D张量,valid_lens:1D或2D张量
    if valid_lens is None:
        return nn.functional.softmax(X, dim=-1)
    else:
        shape = X.shape
        if valid_lens.dim() == 1:
            valid_lens = torch.repeat_interleave(valid_lens, shape[1])
        else:
            valid_lens = valid_lens.reshape(-1)
        # 最后⼀轴上被掩蔽的元素使⽤⼀个⾮常⼤的负值替换,从⽽其softmax输出为0
        X = d2l.sequence_mask(X.reshape(-1, shape[-1]), valid_lens,
                                value=-1e6)
        return nn.functional.softmax(X.reshape(shape), dim=-1)

验证:2个2×4矩阵样本,指定两个样本的有效长度分别为2和3

masked_softmax(torch.rand(2, 2, 4), torch.tensor([2, 3]))

'''
tensor([[[0.4265, 0.5735, 0.0000, 0.0000],
         [0.6215, 0.3785, 0.0000, 0.0000]],

        [[0.2043, 0.3346, 0.4611, 0.0000],
         [0.3598, 0.2352, 0.4050, 0.0000]]])
'''

指定二维张量,len中的形状为(2,2),第一个表示每个指哪个样本,第二个维度里面的表示指定每个样本的每一行的有效长度

masked_softmax(torch.rand(2, 2, 4), torch.tensor([[1, 3], [2, 4]]))

'''
tensor([[[1.0000, 0.0000, 0.0000, 0.0000],
         [0.4087, 0.3961, 0.1952, 0.0000]],

        [[0.6028, 0.3972, 0.0000, 0.00
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值