深度学习中为什么不同的特征信息可以直接相加

深度学习中为什么不同的特征信息可以直接相加,第1张

这是最近在做王者荣耀AI所做的笔记。


# 首发同名公号
class ImageFeatureDecoder(nn.Module):
    
    def __init__(self, vocab_size, d_model, N, heads, dropout, max_length=1024):
        super().__init__()
        self.N = N
        self.embedX = Embedder(vocab_size, d_model)
        self.embedP = Embedder(max_length, d_model)
        self.layers = get_clones(DecoderLayer(d_model, heads, dropout), N)
        self.norm = Norm(d_model)
        
    def forward(self,image_tensor,operation,trg_mask):
        position = torch.arange(0, image_tensor.size(1), dtype=torch.long,
                                    device=image_tensor.device)
        x = image_tensor+self.embedP(position)+self.embedX(operation)
        for i in range(self.N):
            x = self.layers[i](x, trg_mask)
        return self.norm(x)

这串代码讲的是,把有限的历史画面特征、对应画面序号信息和 *** 作信息进行融合后再编码,得到混合后的融合特征。


但是这串代码中直接将三种信息相加的语句让我很不理解。


这样直接相加不同类型的特征,特征岂不会混乱了,为什么不用concat。


我印象中这种添加位置信息的 *** 作来源于自然语言处理那边,所以我就翻看了相关网页,得到了很Nice的答案。


其实当concat的信息共用一个权重矩阵的时候,与直接相加的效果一样。


(img+pos)W=img*W+pos*W。


多一个权重矩阵也就多一笔计算量,所以,在有的场合(concat作用不大的情况)直接用add。


此外,参数少还能有效减少过拟合的风险。


人眼有一项能力,在一张图片中,除了可以看见物体、人物,还可以通过低频信息读出白天还是夜晚的信息。


拍同一场景,黑夜与晚上各一张。


虽然时间与场景叠加,但是你依然能找到图片中的高频信息(人与物),这就是人天生傅里叶变换逆向转换的能力。


但是当时间信息非常夸张的话,过分的黑与白,会让你看不清高频信息。


但是高频信息依然存在,不过它会因为各种因素(拍照设备,观测设备)趋向于没有。


事实上,一种信息淹没另外一种信息,需要非常强的信息能量。


不过,既然这个信息非常强,那说明这个信息很重要,如果不重要,那必然会被反向传播给优化处理。



我将768长度的位置信息与图像特征信息已点的形式画在图上,其中红色点是位置信息,蓝色点是图像信息,绿色点是相加信息。


从图中可以看出,也许二维空间中无法区分出来这些信息,但是,这要是放到768维空间中的话,这区分也就没有那么困难。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/579549.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-11
下一篇 2022-04-11

发表评论

登录后才能评论

评论列表(0条)

保存