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

这是最近在做王者荣耀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维空间中的话,这区分也就没有那么困难。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值