嵌入在纸上的视觉转换器中是如何工作的?

人工智能 神经网络 计算机视觉 变压器 嵌入 视觉转换器
2021-11-07 10:00:01

我从论文中得到图像被分割成P16x16(较小的图像)补丁的部分,然后你必须Flatten使用 3-D (16,16,3) 补丁将其传递到一个Linear图层中以获得他们所谓的“线性投影” ”。从线性层传递后,补丁将是向量,但对它们具有一定的“意义”。

有人可以解释一下这两种嵌入是如何工作的吗?

在 github 上访问了这个实现,也查看了代码,对我来说就像一个迷宫。

如果有人可以用外行的方式解释这些嵌入是如何工作的,我会再次查看代码并理解。

1个回答

在机器学习中,“嵌入”意味着获取一组原始输入(例如 NLP 中的自然语言标记或示例中的图像补丁)并以某种方式将它们转换为向量。嵌入通常在向量之间具有一些有趣的点积结构(例如在word2vec中)。然后,Transformer 机器在点积注意力管道中使用这种嵌入。嵌入的维度D由于 ResNet 跳过连接,应该在整个转换器块中保持不变。

在图像块的情况下,最简单的想法是只获取所有像素的所有通道并将它们视为单个向量。例如,如果您有 (16, 16, 3) 个补丁,那么您将拥有 768 维的“嵌入”。这种幼稚的“嵌入”的问题在于它们之间的点积没有多大意义。所以我们也将这些向量乘以一个可训练的矩阵W并添加一个偏置向量。

例如,如果您有 (16, 16, 3) 个补丁并且转换器下游使用D=128维嵌入,然后您首先将补丁展平为 16 * 16 * 3 = 768 维向量,然后乘以 768×128 矩阵并添加一个 128 维的偏置向量。

查看代码,作者似乎通过添加一个或几个具有非线性的早期卷积(conv_stem代码中的分支)来不断改进这个想法。这些点缀之前最简单的执行分支似乎在这里我一直在谈论的矩阵乘法在这里