- Hengkai Guo的回答 - 知乎 https://www.zhihu.com/question/306213462/answer/562776112
下面的解释出自上面的链接
对于两路输入来说,如果是通道数相同且后面带卷积的话,add等价于concat之后对应通道共享同一个卷积核。下面具体用式子解释一下。由于每个输出通道的卷积核是独立的,我们可以只看单个通道的输出。假设两路输入的通道分别为X1, X2, …, Xc和Y1, Y2, …, Yc。那么concat的单个输出通道为(*表示卷积):
Z concat = ∑ i = 1 c X i ∗ K i + ∑ i = 1 c Y i ∗ K i + c Z _ { \text {concat} } = \sum _ { i = 1 } ^ { c } X _ { i } * K _ { i } + \sum _ { i = 1 } ^ { c } Y _ { i } * K _ { i + c } Zconcat=i=1∑cXi∗Ki+i=1∑cYi∗Ki+c
而add的单个输出通道为:
Z a d d = ∑ i = 1 c ( X i + Y i ) ∗ K i = ∑ i = 1 c X i ∗ K i + ∑ i = 1 c Y i ∗ K i Z _ { a d d } = \sum _ { i = 1 } ^ { c } \left( X _ { i } + Y _ { i } \right) * K _ { i } = \sum _ { i = 1 } ^ { c } X _ { i } * K _ { i } + \sum _ { i = 1 } ^ { c } Y _ { i } * K _ { i } Zadd=i=1∑c(Xi+Yi)∗Ki=i=1∑cXi∗Ki+i=1∑cYi∗Ki
因此add相当于加了一种prior,当两路输入可以具有“对应通道的特征图语义类似”(可能不太严谨)的性质的时候,可以用add来替代concat,这样更节省参数和计算量(concat是add的2倍)。FPN[1]里的金字塔,是希望把分辨率最小但语义最强的特征图增加分辨率,从性质上是可以用add的。如果用concat,因为分辨率小的特征通道数更多,计算量是一笔不少的开销
Resnet是做值的叠加,通道数是不变的,DenseNet是做通道的合并。你可以这么理解,add是描述图像的特征下的信息量增多了,但是描述图像的维度本身并没有增加,只是每一维下的信息量在增加,这显然是对最终的图像的分类是有益的。而concatenate是通道数的合并,也就是说描述图像本身的特征增加了,而每一特征下的信息是没有增加。