密集合成器的实现

2024-09-27 17:44:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图理解合成器论文(https://arxiv.org/pdf/2005.00743.pdf1),其中描述了密集合成器机制,它应该取代Transformer架构中描述的传统注意力模型

enter image description here

密集合成器描述如下:

enter image description here

因此,我尝试实现该层,它看起来是这样的,但我不确定是否正确:

class DenseSynthesizer(nn.Module):
    def __init__(self, l, d):
        super(DenseSynthesizer, self).__init__()
        self.linear1 = nn.Linear(d, l)
        self.linear2 = nn.Linear(l, l)

    def forward(self, x, v):
        # Equation (1) and (2)
        # Shape: l x l
        b = self.linear2(F.relu(self.linear1(x)))   
        # Equation (3)
        # [l x l] x [l x d] -> [l x d]
        return torch.matmul(F.softmax(b), v) 

用法:

l, d = 4, 5

x, v =  torch.rand(l, d), torch.rand(l, d)

synthesis = DenseSynthesizer(l, d)
synthesis(x, v) 

例如:

x和v是张量:

x = tensor([[0.0844, 0.2683, 0.4299, 0.1827, 0.1188],
         [0.2793, 0.0389, 0.3834, 0.9897, 0.4197],
         [0.1420, 0.8051, 0.1601, 0.3299, 0.3340],
         [0.8908, 0.1066, 0.1140, 0.7145, 0.3619]])

v = tensor([[0.3806, 0.1775, 0.5457, 0.6746, 0.4505],
         [0.6309, 0.2790, 0.7215, 0.4283, 0.5853],
         [0.7548, 0.6887, 0.0426, 0.1057, 0.7895],
         [0.1881, 0.5334, 0.6834, 0.4845, 0.1960]])

通过密集合成的正向传递,它返回:

>>> synthesis = DenseSynthesizer(l, d)
>>> synthesis(x, v) 

tensor([[0.5371, 0.4528, 0.4560, 0.3735, 0.5492],
        [0.5426, 0.4434, 0.4625, 0.3770, 0.5536],
        [0.5362, 0.4477, 0.4658, 0.3769, 0.5468],
        [0.5430, 0.4461, 0.4559, 0.3755, 0.5551]], grad_fn=<MmBackward>)

密集合成器的实现和理解正确吗?

理论上,这与接收两个不同输入并在正向传播的不同点使用它的多层感知器有何不同?


Tags: httpsselfinitdefnntorchlineartensor
1条回答
网友
1楼 · 发布于 2024-09-27 17:44:46

密集合成器的实现和理解正确吗?

不完全是linear1 = nn.Linear(d,d)根据论文,而不是(d,l)。 当然,如果X.shape = (l,d)符合矩阵乘法规则,则这不起作用

这是因为:

enter image description hereenter image description here

因此F被应用于X中的每个Xi,用于[1,l]中的i

然后将得到的矩阵B传递给softmax函数并与G(x)相乘。 因此,您必须修改代码以顺序处理输入,然后使用返回的矩阵来计算Y

这与接收两个不同输入并在前向传播的不同点使用它的多层感知器有何不同?

为了理解,我们需要把事情放到上下文中,这里首先在编码器-解码器的上下文中描述了引入注意机制的想法:https://arxiv.org/pdf/1409.0473.pdf

核心思想是允许模型控制如何使用神经网络从编码器检索上下文向量,而不是仅依赖于最后一个编码状态:

enter image description here

有关更多详细信息,请参见此post

《变形金刚》引入了使用“多头注意”(见下图)的想法,以减少计算负担,并仅关注注意机制本身post

https://arxiv.org/pdf/1706.03762.pdf

enter image description here

enter image description here

那么高密度合成器在哪里适合所有这些呢?

它只是用F(.)替换点积(如您文章中的第一张图片所示)。如果用F替换softmax中的内容,则得到Y的方程

enter image description here

结论

这是一个MLP,但在序列处理上下文中逐步应用于输入

多谢各位

相关问题 更多 >

    热门问题