协方差矩阵:
假设
X
n
×
m
\mathbf X_{n×m}
Xn×m代表n个样本,m个维度。
μ
x
(
1
×
m
)
\mu_{\mathbf x_{(1×m)}}
μx(1×m)是
X
n
×
m
\mathbf X_{n×m}
Xn×m每一维度的均值,那么协方差矩阵计算公式为:
马氏距离:
1、判断样本与总体之间的距离,考虑到各个特征之间的相关性,并于各个分量的尺度无关。如果样本就处于总体的均值处, 则距离为0,该距离随着P偏移均值而逐步增大。
假设总体的均值和协方差矩阵为
μ
x
∈
(
1
×
m
)
,
Σ
x
∈
(
m
×
m
)
\mu_{\mathbf x} \in(1×m),\Sigma_{\mathbf x} \in(m×m)
μx∈(1×m),Σx∈(m×m),样本
x
∈
(
1
×
m
)
x \in(1×m)
x∈(1×m),则马氏距离:
D
m
a
h
a
(
X
,
x
)
=
(
x
−
μ
x
)
Σ
x
−
1
(
x
−
μ
x
)
T
D_{maha}(\mathbf X, x)=(x- \mu_{\mathbf x}) \Sigma_{\mathbf x}^{-1}(x- \mu_{\mathbf x})^T
Dmaha(X,x)=(x−μx)Σx−1(x−μx)T
2、也可以判断服从同一分布的两个样本之间的距离
假设分布的协方差矩阵为
Σ
\Sigma
Σ
D
m
a
h
a
(
y
,
x
)
=
(
x
−
y
)
Σ
−
1
(
x
−
y
)
T
D_{maha}(y, x)=(x- y) \Sigma^{-1}(x- y)^T
Dmaha(y,x)=(x−y)Σ−1(x−y)T
KL 散度
D
K
L
(
p
∣
∣
q
)
=
∑
i
=
1
n
p
(
x
i
)
l
o
g
p
(
x
i
)
q
(
x
i
)
D_{KL}(p||q)= \sum_{i=1}^np(x_i) log\frac{p(x_i)}{q(x_i)}
DKL(p∣∣q)=i=1∑np(xi)logq(xi)p(xi)
其中p(
x
i
x_i
xi)是真实的分布,q(
x
i
x_i
xi)是我们预测的分布,我们希望q(
x
i
x_i
xi)越接近p(
x
i
x_i
xi)越好。KL散度就是衡量任意一个分布偏离真实分布的程度,如果两个分布完全匹配,那么KL散度为0,否则KL散度取值为0到无穷大之间。
从公式上理解KL散度
如果
q
(
x
i
)
q(x_i)
q(xi)大于
p
(
x
i
)
p(x_i)
p(xi),那么
l
o
g
p
(
x
i
)
q
(
x
i
)
log\frac{p(x_i)}{q(x_i)}
logq(xi)p(xi)小于0,反之,对数项大于0。只有当
q
(
x
i
)
=
=
p
(
x
i
)
q(x_i)==p(x_i)
q(xi)==p(xi),D等于0。而使用
p
(
x
i
)
p(x_i)
p(xi)对这个对数项加权求和之后,从某种意义上说,这就是求期望的过程。也就是希望在真实分布
p
p
p概率大的地方权重更大,即更重要。
但是KL散度是不对称的,即
D
k
l
(
p
∣
∣
q
)
≠
D
k
l
(
q
∣
∣
p
)
D_{kl} (p||q) \neq D_{kl}(q||p)
Dkl(p∣∣q)=Dkl(q∣∣p)。我们在用
q
(
x
i
)
q(x_i)
q(xi)近似真实分布
p
(
x
i
)
p(x_i)
p(xi)的时,可以选择最小化
D
k
l
(
p
∣
∣
q
)
D_{kl}(p||q)
Dkl(p∣∣q)或着最小化
D
k
l
(
q
∣
∣
p
)
D_{kl}(q||p)
Dkl(q∣∣p)。两种选择取决于具体问题。1
如何选择:
D
k
l
(
p
∣
∣
q
)
D_{kl}(p||q)
Dkl(p∣∣q):模型更倾向选择一个分布
q
q
q,使得它在
p
p
p具有高概率的地方具有高概率。例如当
p
p
p具有多个峰时,
q
q
q选择将这些峰模糊在一起,以便将高概率质量放到所有峰上。
D
k
l
(
q
∣
∣
p
)
D_{kl}(q||p)
Dkl(q∣∣p):模型倾向选择一个分布
q
q
q,使得它在
p
p
p具有低概率的地方具有低概率。当
p
p
p具有多个峰且这些峰间隔很宽时,
q
q
q会选择单个峰,以避免将概率质量放在
p
p
p的多个峰之间的低概率区域。另外,如果这些峰没有别足够强的低概率区域分离,那么也可以选择这个公式来强调高概率的地方具有高概率的结果,此时这个方向的KL散度仍然可能选择模糊这些峰。
KL散度是非负的。
KL散度在神经网络中的用法
因为神经网络一般不会预测出分布的概率密度函数,所以以上直接基于概率密度函数的公式没法用,但是可以用经过变换之后的公式来计算两个分布的KL散度。
一般神经网络都是通过预测出分布的均值和方差,再计算与真实分布的KL距离。
1、假设
p
n
×
m
\mathbf p_{n×m}
pn×m是服从原分布的n个样本,每个样本有m个维度。
μ
p
,
Σ
p
\mu_{\mathbf p},\Sigma_{\mathbf p}
μp,Σp为真实分布的均值和协方差矩阵,
μ
q
,
Σ
q
\mu_{\mathbf q},\Sigma_{\mathbf q}
μq,Σq为网络预测的均值方差,那么真实分布和网络预测的分布KL散度为:
D
k
l
(
p
∣
∣
q
)
=
1
2
{
l
o
g
∣
Σ
q
∣
∣
Σ
p
∣
−
m
+
t
r
(
Σ
q
−
1
Σ
p
)
+
(
μ
q
−
μ
p
)
T
Σ
q
−
1
(
μ
q
−
μ
p
)
}
D_{kl}(\mathbf p || \mathbf q)=\frac12 \{log\frac {|\Sigma_\mathbf q|}{|\Sigma_\mathbf p|}-m+tr(\Sigma_\mathbf q^{-1} \Sigma_\mathbf p)+(\mu_{\mathbf q}-\mu_{\mathbf p})^T \Sigma_q^{-1}(\mu_{\mathbf q}-\mu_{\mathbf p}) \}
Dkl(p∣∣q)=21{log∣Σp∣∣Σq∣−m+tr(Σq−1Σp)+(μq−μp)TΣq−1(μq−μp)}
2、当真实分布
p
\mathbf p
p服从一元标准正态分布,即
p
∼
N
(
0
,
1
)
\mathbf p \sim N(0,1)
p∼N(0,1),网络预测的均值和方差为
q
∼
N
(
μ
,
σ
2
)
\mathbf q \sim N(\mu, \sigma^2)
q∼N(μ,σ2)
D
k
l
{
N
(
μ
,
σ
2
)
∣
∣
N
(
0
,
1
)
}
=
1
2
{
−
l
o
g
σ
2
+
μ
2
+
σ
2
−
1
}
D_{kl}\{N(\mu,\sigma^2) || N(0,1)\}= \frac12 \{ -log \sigma^2 + \mu^2+ \sigma^2 - 1\}
Dkl{N(μ,σ2)∣∣N(0,1)}=21{−logσ2+μ2+σ2−1}
这个公式更多的用在VAE网络中。
更多细节说明可以看花书3.13节关于信息的知识 ↩︎