关于 Gram 矩阵
n 维欧式空间中任意 k 个向量之间两两内积所组成的矩阵,称为这 k 个向量的 Gram 矩阵。
向量内积公式:
a
⃗
⋅
b
⃗
=
∑
i
=
1
n
a
i
b
i
\vec a\cdot\vec b=\sum\limits_{i=1}^na_ib_i
a⋅b=i=1∑naibi所以 Gram 矩阵的公式就是:
G
r
a
m
(
a
⃗
1
⋯
a
⃗
k
)
=
(
(
a
⃗
1
⋅
a
⃗
1
)
⋯
(
a
⃗
1
⋅
a
⃗
k
)
⋮
⋱
⋮
(
a
⃗
k
⋅
a
⃗
1
)
⋯
(
a
⃗
k
⋅
a
⃗
k
)
)
Gram(\vec a_1\cdots\vec a_k)=\begin{pmatrix}(\vec a_1\cdot\vec a_1)&\cdots&(\vec a_1\cdot\vec a_k)\\\vdots&\ddots&\vdots\\(\vec a_k\cdot\vec a_1)&\cdots&(\vec a_k\cdot\vec a_k)\end{pmatrix}
Gram(a1⋯ak)=⎝⎜⎛(a1⋅a1)⋮(ak⋅a1)⋯⋱⋯(a1⋅ak)⋮(ak⋅ak)⎠⎟⎞
可以看出,Gram 矩阵是一个对称矩阵。
Gram 矩阵可以看作是数据之间的偏心协方差矩阵(即没有减去均值的协方差矩阵,关于协方差矩阵可以看这篇文章)
Gram 矩阵的应用
对于一组特征,我们计算它的 Gram 矩阵,可以反映出特征两两之间的相关性。对角线上的元素可以理解为该特征的信息,其余元素则提供了不同特征相关性信息,这样一个矩阵既能体现出有哪些特征,又能反映出不同特征之间的紧密程度。
Gram 矩阵最直接的应用是在图像风格迁移领域。对于一张图片,我们想要提取它的风格,就需要使用网络提取局部纹理特征、图像轮廓等信息,然后计算 Gram 矩阵,就可以找出特征之间的相关性,这个计算出的 Gram 矩阵就反映了图像的风格。此时如果要比较两张图片之间的风格相似程度,只需要比较它们的 Gram 矩阵,若 Gram 矩阵的差异较小,则可以认为两张图像风格相近。