我从论文中得到图像被分割成P
说16x16
(较小的图像)补丁的部分,然后你必须Flatten
使用 3-D (16,16,3) 补丁将其传递到一个Linear
图层中以获得他们所谓的“线性投影” ”。从线性层传递后,补丁将是向量,但对它们具有一定的“意义”。
有人可以解释一下这两种嵌入是如何工作的吗?
我在 github 上访问了这个实现,也查看了代码,对我来说就像一个迷宫。
如果有人可以用外行的方式解释这些嵌入是如何工作的,我会再次查看代码并理解。
我从论文中得到图像被分割成P
说16x16
(较小的图像)补丁的部分,然后你必须Flatten
使用 3-D (16,16,3) 补丁将其传递到一个Linear
图层中以获得他们所谓的“线性投影” ”。从线性层传递后,补丁将是向量,但对它们具有一定的“意义”。
有人可以解释一下这两种嵌入是如何工作的吗?
我在 github 上访问了这个实现,也查看了代码,对我来说就像一个迷宫。
如果有人可以用外行的方式解释这些嵌入是如何工作的,我会再次查看代码并理解。
在机器学习中,“嵌入”意味着获取一组原始输入(例如 NLP 中的自然语言标记或示例中的图像补丁)并以某种方式将它们转换为向量。嵌入通常在向量之间具有一些有趣的点积结构(例如在word2vec中)。然后,Transformer 机器在点积注意力管道中使用这种嵌入。嵌入的维度由于 ResNet 跳过连接,应该在整个转换器块中保持不变。
在图像块的情况下,最简单的想法是只获取所有像素的所有通道并将它们视为单个向量。例如,如果您有 (16, 16, 3) 个补丁,那么您将拥有 768 维的“嵌入”。这种幼稚的“嵌入”的问题在于它们之间的点积没有多大意义。所以我们也将这些向量乘以一个可训练的矩阵并添加一个偏置向量。
例如,如果您有 (16, 16, 3) 个补丁并且转换器下游使用维嵌入,然后您首先将补丁展平为 16 * 16 * 3 = 768 维向量,然后乘以 768128 矩阵并添加一个 128 维的偏置向量。
查看代码,作者似乎通过添加一个或几个具有非线性的早期卷积(conv_stem
代码中的分支)来不断改进这个想法。这些点缀之前最简单的执行分支似乎在这里。我一直在谈论的矩阵乘法在这里