深度学习(GAN)中concatenate 和 add的区别

在深度学习中,有时候我们会涉及到两个特征结合,在使用卷积情况下就涉及feature map的结合。
一般情况下,feature maps的结合有两种方法,一种是元素对应相加,简称add,另一种就是把特征图堆到一起来,简称concatenate。
以下先详细说一下怎么操作。
假设feature map 1 的维度为 B 1 ∗ C 1 ∗ H 1 ∗ W 1 B_1*C_1*H_1*W_1 B1C1H1W1, 特征图feature map 2 的维度为 B 2 ∗ C 2 ∗ H 2 ∗ W 2 B_2*C_2*H_2*W_2 B2C2H2W2
1)在add情况下,就是两个四维矩阵的按元素相加,那么这时候我们需要两个矩阵维度全部相等。并且相加后矩阵维度不变。
2)在concatenate情况下,我们把两个矩阵在某个维度叠加起来,这要求在这个连接的维度上可以不同,但是在其他维度上必须相等。叠加后,某个维度会增加,是两个矩阵上的某个维度相加。比如,我们在Channel这个维度上连接两个矩阵,那么新的矩阵维度是 B 2 ∗ ( C 2 + C 1 ) ∗ H 2 ∗ W 2 B_2*(C_2+C_1)*H_2*W_2 B2C2+C1H2W2

在程序实现上,我们可以这样:
深度学习(GAN)中concatenate 和 add的区别_第1张图片
深度学习(GAN)中concatenate 和 add的区别_第2张图片
但是,我们注意到,在做add或者concatenate之后,我们通常还会进一步做一些东西。比如ResNet中,我们利用add进行,这样可以维持梯度的大小,可以提高网络的深度。
我们需要考虑add和concatenate有什么不同。

结论:通常来讲,add是concatenate的特殊情况,add需要的内存和参数稍小于concatenate。

假设add或者concatenate之后还需要进行卷积操作,或者其他矩阵操作(如线性连接),我们用W表示这个过程。
W [ X , Y ] = W 1 X + W 1 Y W[X,Y]=W_1X+W_1Y W[X,Y]=W1X+W1Y这里我们使用中括号表示concatenate, W 1 , W 2 W_1,W_2 W1,W2表示把两个参数分开, W ( X + Y ) = W X + W Y W(X+Y)=WX+WY W(X+Y)=WX+WY,假设add和concatenate得到的结果相等,那么 W 1 , W 2 W_1,W_2 W1,W2就要相等了。说明add是concatenate的特殊情况。

从另一个角度来看,add导致数据维度下降,信息则有所损失,在后续处理中,这里相加的部分的权重始终相同。而concatenate允许有不同的参数。

因此,我们可以看到在GAN中,我们经常使用concatenate的方式。

参考网址

你可能感兴趣的:(十年磨一剑,数学理论,GAN)