在深度学习中,有时候我们会涉及到两个特征结合,在使用卷积情况下就涉及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
B1∗C1∗H1∗W1, 特征图feature map 2 的维度为
B
2
∗
C
2
∗
H
2
∗
W
2
B_2*C_2*H_2*W_2
B2∗C2∗H2∗W2
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
B2∗(C2+C1)∗H2∗W2。
在程序实现上,我们可以这样:
但是,我们注意到,在做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的方式。