前言
在深度学习中,经常会存在需要特征融合的地方[1],而最基本的融合方法无非是:(1) 按点逐位相加(point-wise addition) 和 (2) 进行向量拼接(concatenate)。这两种方式有着异同,也有着关联,接下来进行简单讨论。
∇
\nabla
∇ 联系方式: e-mail: [email protected] QQ: 973926198 github: https://github.com/FesianXu
Point-wise addition
逐个位相加,用数学表达为: 现有特征向量
v
1
∈
R
n
v_1 \in \mathbb{R}^n
v 1 ∈ R n ,
v
2
∈
R
n
v_2 \in \mathbb{R}^n
v 2 ∈ R n ,为了融合这两个特征向量,直接进行对应元素的相加,既是
v
=
v
1
+
v
2
,
v
=
{
x
i
∣
x
i
=
v
1
[
i
]
+
v
2
[
i
]
,
i
=
1
,
⋯
,
n
}
v = v_1+v_2, v = \{x_i | x_i = v_1[i] + v_2[i], i = 1,\cdots,n\}
v = v 1 + v 2 , v = { x i ∣ x i = v 1 [ i ] + v 2 [ i ] , i = 1 , ⋯ , n } 。进行这个操作的前提当然是这两个向量的维度是相同的,如果是不同维度,则可以通过线性变换
v
n
=
W
v
∈
R
n
v_n = Wv \in \mathbb{R}^n
v n = W v ∈ R n 转换成同维向量,其中
W
∈
n
×
m
,
v
∈
R
m
W \in \mathbb{n \times m}, v \in \mathbb{R}^m
W ∈ n × m , v ∈ R m 。
Concatenate
向量拼接,则是一个更为通用的特征融合方法,数学表达为: 现有特征向量
v
1
∈
R
n
v_1 \in \mathbb{R}^n
v 1 ∈ R n ,
v
2
∈
R
m
v_2 \in \mathbb{R}^m
v 2 ∈ R m ,将其在同一个阶[2]的进行拼接,有融合特征向量
v
=
[
v
1
,
v
2
]
∈
R
n
+
m
v = [v_1, v_2] \in \mathbb{R}^{n + m}
v = [ v 1 , v 2 ] ∈ R n + m 。拼接完后,经常可以用线性映射,转换成
v
=
W
v
∈
R
n
v = Wv \in \mathbb{R}^n
v = W v ∈ R n ,进行这一步的操作目的是能够和前者point-wise addition的进行同维度的比较。
两者关联与异同
前面介绍的两种操作,其实是有联系的,结论先抛出了,就是:point-wise addition 是 concatenate的特殊形式,前者可以用学习的方式,用后者表示出来 ,用另一种说法就是,point-wise addition 是 concatenate加了一定先验假设的结果 。为什么这样说呢?我们先观察一种情况:
比较两种特征融合的方式,并且进行线性映射后的结果,有:
Addition
:
Y
=
W
(
v
1
+
v
2
)
=
W
v
1
+
W
v
2
∈
R
n
Y = W(v_1+v_2) = Wv_1 + Wv_2 \in \mathbb{R}^n
Y = W ( v 1 + v 2 ) = W v 1 + W v 2 ∈ R n , 其中每一个
y
∈
Y
y \in Y
y ∈ Y 可以表达成
y
=
w
1
v
1
1
+
w
2
v
1
2
⋯
+
w
n
v
1
n
+
w
1
v
2
1
+
w
2
v
2
2
⋯
+
w
n
v
2
n
y = w_1v_1^1+w_2v_1^2 \cdots+w_nv_1^n + w_1v_2^1+w_2v_2^2 \cdots+w_nv_2^n
y = w 1 v 1 1 + w 2 v 1 2 ⋯ + w n v 1 n + w 1 v 2 1 + w 2 v 2 2 ⋯ + w n v 2 n ,用矩阵形式表达就是:
[
w
1
,
w
2
,
⋯
,
w
n
]
⋅
[
(
v
1
1
+
v
2
1
)
,
(
v
1
2
+
v
2
2
)
,
⋯
,
(
v
1
n
+
v
2
n
)
]
T
[w_1, w_2,\cdots,w_n] \cdot [(v_1^1+v_2^1), (v_1^2+v_2^2), \cdots, (v_1^n+v_2^n)]^T
[ w 1 , w 2 , ⋯ , w n ] ⋅ [ ( v 1 1 + v 2 1 ) , ( v 1 2 + v 2 2 ) , ⋯ , ( v 1 n + v 2 n ) ] T 举个具体的例子,设
v
1
=
[
2
,
4
]
,
v
2
=
[
5
,
6
]
,
W
=
[
2
,
3
]
v_1 = [2, 4], v_2 = [5, 6], W=[2, 3]
v 1 = [ 2 , 4 ] , v 2 = [ 5 , 6 ] , W = [ 2 , 3 ] , 那么最后结果容易算出是
44
44
4 4 。
Concatenate
:
Y
=
W
[
v
1
,
v
2
]
∈
R
n
Y = W[v_1, v_2] \in \mathbb{R}^n
Y = W [ v 1 , v 2 ] ∈ R n ,还是用矩阵的形式对其进行表达,不过这个时候我们的
W
∈
R
n
+
m
W \in \mathbb{R}^{n+m}
W ∈ R n + m ,可以发现这个情况下参数量比上者多得多。
[
w
1
,
w
2
,
⋯
,
w
n
,
w
n
+
1
,
⋯
,
w
n
+
m
]
⋅
[
v
1
1
,
v
1
2
,
⋯
,
v
1
n
,
v
2
1
,
⋯
,
v
2
m
]
T
[w_1,w_2,\cdots,w_n,w_{n+1},\cdots,w_{n+m}] \cdot [v_1^1, v_1^2, \cdots, v_1^n, v_2^1, \cdots, v_2^m]^T
[ w 1 , w 2 , ⋯ , w n , w n + 1 , ⋯ , w n + m ] ⋅ [ v 1 1 , v 1 2 , ⋯ , v 1 n , v 2 1 , ⋯ , v 2 m ] T
这个时候我们可以发现,通过学习过程中的自动参数调整,在concatenate
的情况下,总是有办法表达成Addition
中的结果的,原因就是可以通过设置Concatenate
情形下的
W
W
W 的某些值相同,还是举原来的具体例子说明:
v
=
[
v
1
,
v
2
]
=
[
2
,
4
,
5
,
6
]
v = [v_1, v_2] = [2, 4, 5, 6]
v = [ v 1 , v 2 ] = [ 2 , 4 , 5 , 6 ] ,此时只需要
W
=
[
2
,
3
,
2
,
3
]
W = [2,3,2,3]
W = [ 2 , 3 , 2 , 3 ] ,就可以表达成和Addition
完全一样的结果,读者可以自行验证。
就结论而言,因为Concatenate情况下参数量完全足以cover住Addition的,因此通过学习过程,完全是可以进行表达的,因此后者是前者的特殊形式,是添加了先验知识的特征融合方法。
那么,这个先验知识是什么呢?笔者认为因为Addition
是在相同维度的特征空间中进行的,相加代表特征向量的平移,因此这个先验知识可能 是假设这两类特征具有相似性,比如模态比较接近,性质比较相同的特征。当然这个只是笔者猜测,并无文献参考,欢迎各位斧正,谢谢。
Update 2019/10/26 : 评论区有朋友问:
“point-wise addition 是 concatenate的特殊形式”的结果似乎只在均将融合后的特征线性映射成标量后才成立,但是这两种融合方法之后不一定要经过这种处理吧?而且,这种线性映射会减少大量信息,似乎不甚合理?
我觉得这个问题其实是不成立的,因为原文里面举的例子是映射成为标量只是为了举例方便而已,实际上,映射成其他高维矢量也是没问题的,比如说: 在Pointwise addition
的情况
v
1
=
(
1
,
2
)
T
,
v
2
=
(
3
,
4
)
T
v_1 = (1,2)^{\mathrm{T}}, v_2 = (3,4)^{\mathrm{T}}
v 1 = ( 1 , 2 ) T , v 2 = ( 3 , 4 ) T ,那么假设其
W
=
[
1
1
2
4
]
W = \left[ \begin{matrix} 1 & 1 \\ 2 & 4 \end{matrix} \right]
W = [ 1 2 1 4 ] ,我们有:
W
(
v
1
+
v
2
)
=
[
1
1
2
4
]
[
4
6
]
=
[
9
30
]
W(v_1+v_2) = \left[ \begin{matrix} 1 & 1 \\ 2 & 4 \end{matrix} \right] \left[ \begin{matrix} 4 \\ 6 \end{matrix} \right] = \left[ \begin{matrix} 9 \\ 30 \end{matrix} \right]
W ( v 1 + v 2 ) = [ 1 2 1 4 ] [ 4 6 ] = [ 9 3 0 ]
在concatenate
的情况中,我们有:
[
v
1
,
v
2
]
=
(
1
,
2
,
3
,
4
)
T
[v_1, v_2] = (1,2,3,4)^{\mathrm{T}}
[ v 1 , v 2 ] = ( 1 , 2 , 3 , 4 ) T 那么如果需要退化到addition的情况的话,我们的
W
W
W 可以为:
W
=
[
w
11
w
12
w
13
w
14
w
21
w
22
w
23
w
24
]
W = \left[ \begin{matrix} w_{11} & w_{12} & w_{13} & w_{14} \\ w_{21} & w_{22} & w_{23} & w_{24} \end{matrix} \right]
W = [ w 1 1 w 2 1 w 1 2 w 2 2 w 1 3 w 2 3 w 1 4 w 2 4 ] 因为我们有八个未知量,而只有两个方程,因此这是个病态问题,其实我们有多组解的,不管怎么样,我们总是可以用concatenate
去退化到addition
的情况的,不管是映射到标量还是矢量。
Reference
[1]. Li K, Zou C, Bu S, et al. Multi-modal feature fusion for geographic image annotation[J]. Pattern Recognition, 2018, 73: 1-14. [2]. https://blog.csdn.net/dcrmg/article/details/79017146