为啥 timm 视觉变压器位置嵌入初始化为零?

Posted

技术标签:

【中文标题】为啥 timm 视觉变压器位置嵌入初始化为零?【英文标题】:Why is the timm visual transformer position embedding initializing to zeros?为什么 timm 视觉变压器位置嵌入初始化为零? 【发布时间】:2021-05-09 06:00:22 【问题描述】:

我正在查看视觉转换器的timm 实现,对于位置嵌入,他正在用零初始化他的位置嵌入,如下所示:

self.pos_embed = nn.Parameter(torch.zeros(1, num_patches + 1, embed_dim))

请看这里: https://github.com/rwightman/pytorch-image-models/blob/master/timm/models/vision_transformer.py#L309

我不确定当稍后将其添加到补丁中时,这实际上是如何嵌入有关该位置的任何内容的?

x = x + self.pos_embed

感谢任何反馈。

【问题讨论】:

【参考方案1】:

位置嵌入是包含在计算图中并在训练期间更新的参数。所以,如果你用零初始化也没关系;它们是在训练中学习的。

【讨论】:

以上是关于为啥 timm 视觉变压器位置嵌入初始化为零?的主要内容,如果未能解决你的问题,请参考以下文章

MAFormer: 基于多尺度注意融合的变压器网络视觉识别

为啥变压器不接受任何论点? [复制]

使变压器BertForSequenceClassification初始层无法进行火炬训练

为啥 std::string 零初始化为不确定值

为啥 int 数组在 C++ 中未初始化为零?

为啥我的内核的共享内存似乎初始化为零?