gpt4 book ai didi

deep-learning - 为什么我们要批量处理矩阵产品?

转载 作者:行者123 更新时间:2023-12-02 06:27:58 26 4
gpt4 key购买 nike

我正在关注Pytorch seq2seq tutorial,它的torch.bmm方法的用法如下:

attn_applied = torch.bmm(attn_weights.unsqueeze(0),
encoder_outputs.unsqueeze(0))

我了解为什么我们需要将注意力权重和编码器输出相乘。

我不太了解的是我们在这里需要 bmm方法的原因。 torch.bmm文件说

Performs a batch matrix-matrix product of matrices stored in batch1 and batch2.

batch1 and batch2 must be 3-D tensors each containing the same number of matrices.

If batch1 is a (b×n×m) tensor, batch2 is a (b×m×p) tensor, out will be a (b×n×p) tensor.



enter image description here

最佳答案

在 seq2seq 模型中,编码器将输入序列编码为小批量。例如,输入是 B x S x d,其中 B 是批量大小,S 是最大序列长度,d 是词嵌入维度。然后编码器的输出是 B x S x h 其中 h 是编码器的隐藏状态大小(这是一个 RNN)。

现在在解码时(在训练期间)
输入序列一次给出一个,因此输入是 B x 1 x d 并且解码器生成形状为 B x 1 x h 的张量。现在要计算上下文向量,我们需要将此解码器隐藏状态与编码器的编码状态进行比较。

因此,假设您有两个形状为 T1 = B x S x hT2 = B x 1 x h 的张量。因此,如果您可以按如下方式进行批量矩阵乘法。

out = torch.bmm(T1, T2.transpose(1, 2))

本质上,您将形状为 B x S x h 的张量与形状为 B x h x 1 的张量相乘,这将产生 B x S x 1,即每个批次的注意力权重。

在这里,注意力权重 B x S x 1 表示解码器当前隐藏状态与编码器所有隐藏状态之间的相似度得分。现在,您可以通过先转置将注意力权重与编码器的隐藏状态 B x S x h 相乘,这将产生形状为 B x h x 1 的张量。如果你在 dim=2 处执行挤压,你会得到一个形状为 B x h 的张量,它是你的上下文向量。

这个上下文向量( B x h )通常连接到解码器的隐藏状态( B x 1 x h ,squeeze dim=1)来预测下一个标记。

关于deep-learning - 为什么我们要批量处理矩阵产品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50826644/

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