原文链接:http://proceedings.mlr.press/v48/xieb16.pdf
基于神经网络的具体算法DEC
一、简介
- 聚类特别依赖特征空间的选择;
- 先前很少有研究来解决用于聚类的特征空间学习问题;
- 本文提出了一种称为
Deep?Embedded?Clustering(DEC)
\text{Deep Embedded Clustering(DEC)}
Deep?Embedded?Clustering(DEC)的聚类方法,该方法通过迭代方式来同时学习特征空间(向量表示)并完成聚类;
二、聚类算法DEC
? 将
n
n
n个点
{
x
i
∈
X
}
i
=
1
n
\{x_i\in X\}_{i=1}^n
{xi?∈X}i=1n?聚类至
k
k
k个簇,每个簇均有一个质心
u
j
,
j
=
1
,
…
,
k
u_j,j=1,\dots,k
uj?,j=1,…,k。本文不直接在数据空间
X
X
X上聚类,而是通过非线性映射
f
θ
:
X
→
Z
f_\theta:X\rightarrow Z
fθ?:X→Z,将数据空间
X
X
X映射至特征空间
Z
Z
Z,其中
θ
\theta
θ是可学习参数。为了避免维度灾难,
Z
Z
Z的维度远远小于
X
X
X。至于非线性映射
f
θ
f_\theta
fθ?,很自然选择神经网络来进行近似。
? 算法
DEC
\text{DEC}
DEC的两个目标:
- 在特征空间
Z
Z
Z中学习
k
k
k个簇心
{
u
j
∈
Z
}
j
=
1
k
\{u_j\in Z\}_{j=1}^k
{uj?∈Z}j=1k?(聚类);
- 学习将数据映射至特征空间
Z
Z
Z的网络参数
θ
\theta
θ;
1. 基于KL散度的聚类
? 给定一个初始化的非线性映射
f
θ
f_\theta
fθ?和初始化簇中心
{
u
j
}
j
=
1
k
\{u_j\}_{j=1}^k
{uj?}j=1k?。(如何初始化会在下一小节介绍)
?
DEC
\text{DEC}
DEC使用无监督交替两阶段方法来改善聚类效果,
- 第一阶段:计算嵌入节点和簇中心的软分配;
- 第二阶段:更新映射
f
θ
f_\theta
fθ?,并使用辅助目标分布从当前高置信度分配中细化簇中心;
1.1 计算软分配
? 这里使用学习
t
t
t分布作为衡量嵌入节点与簇中心的相似度
q
i
j
=
(
1
+
∣
∣
z
i
?
u
i
∣
∣
2
/
α
)
?
α
+
1
2
∑
j
′
(
1
+
∣
∣
z
i
?
u
j
′
∣
∣
2
/
α
)
?
α
+
1
2
q_{ij}=\frac{(1+||z_i-u_i||^2/\alpha)^{-\frac{\alpha+1}{2}}}{\sum_{j'}(1+||z_i-u_{j'}||^2/\alpha)^{-\frac{\alpha+1}{2}}}
qij?=∑j′?(1+∣∣zi??uj′?∣∣2/α)?2α+1?(1+∣∣zi??ui?∣∣2/α)?2α+1?? 其中,
z
i
=
f
θ
(
x
i
)
∈
Z
z_i=f_\theta(x_i)\in Z
zi?=fθ?(xi?)∈Z是
x
i
∈
X
x_i \in X
xi?∈X嵌入后的向量;
α
\alpha
α是学生
t
t
t分布的自由度(论文设
α
=
1
\alpha=1
α=1);
q
i
j
q_{ij}
qij?被认为是分配样本
i
i
i至簇
j
j
j的概率;
1.2 KL散度最小化
? 该阶段通过辅助分布来进一步使各个簇更加的内聚。具体来说,模型通过将上面得到的软分配与目标分布来训练模型。为了实现这个目标,这里定义了一个基于KL散度的损失函数来衡量软分配
q
i
q_i
qi?与辅助分布
p
j
p_j
pj?间的差距
L=KL(P||Q)
=
∑
i
∑
j
p
i
j
l
o
g
p
i
j
q
i
j
\text{L=KL(P||Q)}=\sum_i\sum_jp_{ij}log\frac{p_{ij}}{q_{ij}}
L=KL(P||Q)=i∑?j∑?pij?logqij?pij?? 其中,
q
i
j
q_{ij}
qij?就是上面得到的软分配,
p
i
j
p_{ij}
pij?则是一个目标分布。
? 下面会介绍这个目标分布怎么来的。
? 对于本文的聚类算法,目标分布
P
P
P的选择非常重要。具体来说,目标分布应该具有如下性质:
- 能够改善聚类中簇的内聚程度;
- 能够更加重视高置信度分布的数据点;
- 每个簇中心对于损失的贡献是标准化的,防止大的簇扭曲了特征空间;
论文选择将软分配概率
q
i
q_i
qi?进行平方,从而实现目标分布,即
p
i
j
=
q
i
j
2
/
f
j
∑
j
′
q
i
j
′
2
/
f
j
′
p_{ij}=\frac{q_{ij}^2/f_j}{\sum_{j'}q_{ij'}^2/f_{j'}}
pij?=∑j′?qij′2?/fj′?qij2?/fj?? 其中,
f
j
=
∑
i
q
i
j
f_j=\sum_i q_{ij}
fj?=∑i?qij?是软类频率。
1.3 优化
? 论文使用带有momentum的
SGD
\text{SGD}
SGD来联合优化簇中心
{
u
j
}
\{u_j\}
{uj?}和神经网络参数
θ
\theta
θ。损失函数
L
L
L关于每个数据点特征空间嵌入向量
z
i
z_i
zi?的梯度和每个簇中心
u
j
u_j
uj?的梯度为
?
L
?
z
i
=
α
+
1
α
∑
j
(
1
+
∣
∣
z
i
?
u
j
∣
∣
2
α
)
?
1
?
L
?
u
j
=
?
α
+
1
α
∑
i
(
1
+
∣
∣
z
i
?
u
j
∣
∣
2
α
)
?
1
×
(
p
i
j
?
q
i
j
)
(
z
i
?
u
j
)
\frac{\partial L}{\partial z_i}=\frac{\alpha+1}{\alpha}\sum_j(1+\frac{||z_i-u_j||^2}{\alpha})^{-1}\\ \frac{\partial L}{\partial u_j}=-\frac{\alpha+1}{\alpha}\sum_i(1+\frac{||z_i-u_j||^2}{\alpha})^{-1}\times (p_{ij}-q_{ij})(z_i-u_j)
?zi??L?=αα+1?j∑?(1+α∣∣zi??uj?∣∣2?)?1?uj??L?=?αα+1?i∑?(1+α∣∣zi??uj?∣∣2?)?1×(pij??qij?)(zi??uj?) 当相邻两次迭代的变化小于
t
o
l
%
tol\%
tol%时停止优化。
2. 参数初始化
前面小节假设簇中心和神经网络参数均被初始化。本小节则是具体介绍如何进行初始化。
2.1 神经网络
f
θ
f_\theta
fθ?的初始化
? 论文使用堆叠自编码器来无监督学习数据在特征空间中的表示。堆叠自编码器采用逐层训练的方式,每一层的降噪自编码器都会重构前一层随机加入噪音的输出。降噪自编码器是一个两层的神经网络:
x
~
~
D
r
o
p
o
u
t
(
x
)
h
=
g
1
(
W
1
x
~
+
b
)
h
~
~
D
r
o
p
o
u
t
(
h
)
y
=
g
2
(
W
2
h
~
+
b
2
)
\tilde{x}\sim Dropout(x) \\ h=g_1(W_1\tilde{x}+b) \\ \tilde{h}\sim Dropout(h) \\ y=g_2(W_2\tilde{h}+b_2)
x~~Dropout(x)h=g1?(W1?x~+b)h~~Dropout(h)y=g2?(W2?h~+b2?) 其中,
g
1
g_1
g1?和
g
2
g_2
g2?是编码和解码层的激活函数,并且
θ
=
{
W
1
,
b
1
,
W
2
,
b
2
}
\theta=\{W_1,b_1,W_2,b_2\}
θ={W1?,b1?,W2?,b2?}是模型参数。降噪自编码器的训练方式是最小化均方损失函数
∣
∣
x
?
y
∣
∣
2
2
||x-y||_2^2
∣∣x?y∣∣22?。在训练完一层后,使用它的输出
h
h
h作为下一层训练的输入。
? 经过逐层的贪心训练后,将所有的编码器按顺序拼接起来形成一个深度自编码器,并通过最小化构造损失函数来微调。最终得到的是,一个由编码器拼接成的多层深度自编码器,该自编码器用来将数据映射至特征空间,从而完成初始化。
2.2 簇中心初始化
? 在获得初始化的特征空间向量表示后,使用标准的
k-mean
\text{k-mean}
k-mean聚类来获得
k
k
k个初始化簇中心
{
u
j
}
j
=
1
k
\{u_j\}_{j=1}^k
{uj?}j=1k?。
三、思考
- 论文的主要思路:1. 先使用已有的方式得到一个初步的聚类效果;2. 迭代的方式逐步改进聚类效果;
- 论文使用一个堆叠自编码器将数据映射至特征空间。这两年预训练模型有了长足的进步,这里可以使用预训练模型来提供自编码器;
- 聚类是否能作为预训练任务来预训练模型呢?这种得到的预训练模型是否有意义?
- 可否通过某种方式对聚类进行一定的控制?
- 这种迭代的方式是否可以用于少样本的有监督问题上?
|