对于无监督学习来说,互信息是一个非常重要的指标,它衡量了两个随机变量之间的相关性。在无监督学习中,利用对互信息的优化,通常我们能够得到更加好的特征表示。
要做什么
特征抽取是无监督学习的重要部分,旨在对大量的无标注数据样本进行训练,最后能够得到一个编码器E,将每一个样本
x
x
x编码为一个好的向量表示
z
z
z,那么如何衡量这个表示是否好呢?自编码器(AutoEncoder)告诉我们, 希望编码出的向量能够重构原始样本。因此我们在加入一个解码器D, 将重构的
x
′
x'
x′与
x
x
x做Mse loss。
但是这样的想法真的好吗?答案是不见得,比如下面的例子:
尽管我们已经见过很多次钞票长什么样子,但我们很少能一模一样的画出钞票;虽然我们画不出栩栩如生的钞票,但我们依旧可以轻易地辨别出钞票。因此钞票在我们大脑中的表示,并不需要我们能够生成完整的钞票,而只需要我们能够进行辨别。基于此,我们可以认为,在人的认知学习中:一个样本的好的表示应该是能够从大量数据中辨别出该样本,而不是能够直接生成改样本。
互信息的优化
那别如何去学习到一个足够辨别该样本的表示呢?没错,就是最大化互信息。这里先引入一些记号,令
X
X
X表示所有样本集合,
x
x
x表示其中一个样本。
Z
Z
Z表示所有编码向量的集合,
z
z
z表示其中一个编码向量。
X
X
X与
Z
Z
Z的互信息表示为:
I
(
X
,
Z
)
=
∑
x
∈
X
,
z
∈
Z
p
(
x
,
z
)
l
o
g
p
(
x
∣
z
)
p
(
x
)
=
H
(
X
)
−
H
(
X
∣
Z
)
I(X,Z)=\sum_{x \in X, z \in Z}p(x, z) log \frac{p(x|z)}{p(x)}=H(X) - H(X|Z)
I(X,Z)=x∈X,z∈Z∑p(x,z)logp(x)p(x∣z)=H(X)−H(X∣Z)
最大化原始数据
X
X
X和其表示
Z
Z
Z的互信息
I
(
X
,
Z
)
I(X,Z)
I(X,Z), 如果
X
X
X是固定的,比如图谱的像素,那么就等价与最小化条件熵
H
(
X
∣
Z
)
H(X | Z)
H(X∣Z), 也就是说,条件熵越小,也就表示,给定一个表示
z
z
z, 其对应的样本
x
x
x的不确定性越低,也就是说,
z
z
z能够很好地从大量样本
X
X
X中辨别
x
x
x。
对比预测编码(CPC)
本文提出地对比预测编码(CPC)架构如下:
以语音为例,首先通过一个编码器
g
e
n
c
g_{enc}
genc将语音信号
x
t
x_t
xt编码为潜在表示
z
t
z_t
zt, 然后通过一个
g
a
r
g_{ar}
gar总结所有
z
≤
t
z_{\le t}
z≤t得到
c
t
c_t
ct(
c
t
c_t
ct融合了
t
t
t时间前的所有信息), 然后通过一个
W
k
W_k
Wk映射为
W
k
c
t
W_kc_t
Wkct, 最终我们希望能够通过
W
k
c
t
W_kc_t
Wkct识别出
x
t
+
k
x_{t+k}
xt+k。因为
W
k
W_k
Wk是对时间步的映射,被所有
C
C
C共享,因此如果能够从
W
k
c
t
W_kc_t
Wkct中识别
x
t
+
k
x_{t+k}
xt+k,那么便说明
c
t
c_t
ct是一个好的表示。得到了每一个
x
t
x_t
xt的编码表示
c
t
c_t
ct后,如果需要得到样本的表示,对他们进行一个pooling就可以了。
结合上文对互信息最大化的讲解,那么CPC的目标就变成了最大化
X
X
X和
C
C
C的互信息
I
(
X
,
C
)
I(X,C)
I(X,C):
I
(
X
,
C
)
=
∑
x
∈
X
,
z
∈
C
p
(
x
,
c
)
l
o
g
p
(
x
∣
c
)
p
(
x
)
I(X,C)=\sum_{x \in X, z \in C}p(x, c) log \frac{p(x|c)}{p(x)}
I(X,C)=x∈X,z∈C∑p(x,c)logp(x)p(x∣c)
也就是原文中的式(1)。
对互信息的估计
文章的初心是希望最大化互信息,但是在实现时,是通过优化InfoNCE对互信息的下界进行优化,从而间接最大化互信息。
定义InfoNCE为:
其中
X
X
X是所有可能的采样集合,含有
N
N
N个样本
{
x
1
,
x
2
,
.
.
.
,
x
N
}
\{x_1, x_2, ..., x_N\}
{x1,x2,...,xN}, 其中含有一个对应
c
t
c_t
ct的正样本
x
t
+
k
x_{t+k}
xt+k和
N
−
1
N-1
N−1个负样本。
其中
f
k
(
x
t
+
k
,
c
t
)
=
e
x
p
(
z
t
+
k
T
W
k
c
t
)
f_k(x_{t+k}, c_t)=exp(z_{t+k}^TW_kc_t)
fk(xt+k,ct)=exp(zt+kTWkct),建模了Density Ratio, 即:
f
k
(
x
t
+
k
,
c
t
)
∝
p
(
x
t
+
k
∣
c
t
)
p
(
x
t
+
k
)
f_k(x_{t+k}, c_t) \propto \frac{p(x_{t+k} | c_t)}{p(x_{t+k})}
fk(xt+k,ct)∝p(xt+k)p(xt+k∣ct)。
关于
f
k
(
x
t
+
k
,
c
t
)
f_k(x_{t+k}, c_t)
fk(xt+k,ct)为什么要用一个指数簇函数表示,我们待会儿再讲,这里先证明为什么
f
k
(
x
t
+
k
,
c
t
)
f_k(x_{t+k}, c_t)
fk(xt+k,ct)建模了Density Ratio。
L
N
\mathcal{L}_N
LN其实就是代表了交叉熵损失,
f
k
∑
X
f
k
\frac{f_k}{\sum_Xf_k}
∑Xfkfk表示模型的输出,它其实就是
p
(
d
=
i
∣
X
,
c
t
)
p(d=i | X, c_t)
p(d=i∣X,ct), 这里
[
d
=
i
]
[d = i]
[d=i]表示
x
i
x_i
xi是正例,即
i
=
t
+
k
i=t+k
i=t+k。而:
因此:
f
k
(
x
t
+
k
,
c
t
)
=
t
p
(
x
t
+
k
∣
c
t
)
p
(
x
t
+
k
)
∝
p
(
x
t
+
k
∣
c
t
)
p
(
x
t
+
k
)
f_k(x_{t+k}, c_t) = t \frac{p(x_{t+k} | c_t)}{p(x_{t+k})}\propto \frac{p(x_{t+k} | c_t)}{p(x_{t+k})}
fk(xt+k,ct)=tp(xt+k)p(xt+k∣ct)∝p(xt+k)p(xt+k∣ct)。
那为什么 f k ( x t + k , c t ) f_k(x_{t+k}, c_t) fk(xt+k,ct)为什么要用一个指数簇函数表示呢?对 t p ( x t + k ∣ c t ) p ( x t + k ) = e x p ( z t + k T W k c t ) t \frac{p(x_{t+k} | c_t)}{p(x_{t+k})}=exp(z_{t+k}^TW_kc_t) tp(xt+k)p(xt+k∣ct)=exp(zt+kTWkct)两边取 l o g log log, 有: l o g t p ( x t + k ∣ c t ) p ( x t + k ) = z t + k T W k c t logt\frac{p(x_{t+k} | c_t)}{p(x_{t+k})} = z_{t+k}^TW_kc_t logtp(xt+k)p(xt+k∣ct)=zt+kTWkct, t t t是一个放缩倍数,因此加入了 e x p exp exp后, z t + k T W k c t z_{t+k}^TW_kc_t zt+kTWkct其实就是拟合的 x t + k x_{t+k} xt+k和 c t c_t ct的点互信息。
到这里, L N \mathcal{L}_N LN的意义就呼之欲出了:直观来说,对于每一次采样,它就是尽量让正样本对之间的点互信息尽量大。而在所有数据中,大部分的点互信息 l o g p ( x ∣ c ) p ( x ) log\frac{p(x|c)}{p(x)} logp(x)p(x∣c)大,可以想象 I ( X , C ) I(X,C) I(X,C)也会大。
文章在附录中也证明了,优化
L
N
\mathcal{L}_N
LN, 其实就是在对
I
(
X
,
C
)
I(X,C)
I(X,C)的下界进行优化:
疑问
1、为什么要通过优化互信息的下界来优化互信息?而不像[1]中一样直接优化互信息本身呢?
2、关于传统的有监督分类中,最后的logit要接一个softmax而不接其他的归一化层,是不是最后通过softmax后,其实就是在最大化点互信息?
参考文献:
[1] 苏剑林. (2018, Oct 02). 《深度学习的互信息:无监督提取特征 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/6024