gpt4 book ai didi

python - 密集合成器的实现

转载 作者:行者123 更新时间:2023-12-04 11:19:12 25 4
gpt4 key购买 nike

我正在尝试理解 Synthesizer 论文 (https://arxiv.org/pdf/2005.00743.pdf 1) 并且有对密集合成器机制的描述,该机制应该取代 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>)

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

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

最佳答案

密集合成器的实现和理解是否正确?
不完全是,linear1 = nn.Linear(d,d)根据论文而不是(d,l) .
当然,如果 X.shape = (l,d) 这不起作用根据矩阵乘法规则。
这是因为 :
enter image description here
enter image description here
所以F应用于每个 Xi在 X 中为 i 在 [1,l]结果矩阵 B然后传递给 softmax 函数并乘以 G(x) .
因此,您必须修改代码以依次处理输入,然后使用返回的矩阵来计算 Y .
这与接收两个不同输入并在前向传播的不同点使用它的多层感知器有何不同?
为了理解,我们需要把事情放在上下文中,引入注意力机制的想法首先在Encoder-Decoder的上下文中描述:https://arxiv.org/pdf/1409.0473.pdf
核心思想是让模型能够控制如何使用神经网络检索来自编码器的上下文向量,而不是仅依赖于最后的编码状态:
enter image description here
看到这个 post了解更多详情。
Transformers 引入了使用“多头注意力”(见下图)来减少计算负担并只关注注意力机制本身的想法。 post
https://arxiv.org/pdf/1706.03762.pdf
enter image description here
enter image description here
那么 Dense 合成器在哪里适合所有这些呢?
它只是用 F(.) 替换了 Dot 产品(如您帖子中的第一张图片所示)。 .如果你更换了 softmax 里面的东西来自 F你得到了 Y 的方程
enter image description here
结论
这是一个 MLP,但在序列处理的上下文中逐步应用于输入。
谢谢

关于python - 密集合成器的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61630765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com