摘要:分享对论文的理解, 原文见 Xi Peng, Yunfan Li, Ivor W. Tsang, Hongyuan Zhu, Jiancheng Lv, Joey Tianyi Zhou, XAI Beyond Classification: Interpretable Neural Clustering, Journal of Machine Learning Research 22 (2021) 1–27.
源码地址: www.pengxi.me.
1. 符号系统
符号风格按照本贴作者的习惯有所修改.
符号 | 含义 | 备注 |
---|---|---|
X = { x 1 , … , x n } \mathbf{X}=\left\{\mathbf{x}_1, \ldots, \mathbf{x}_n\right\} X={x1,…,xn} | 数据集 | n n n为实例个数 |
x i = ( x i 1 , … , x i m ) \mathbf{x}_i=\left(x_{i 1}, \ldots, x_{i m}\right) xi=(xi1,…,xim) | 对象/实例 | m m m为特征个数/数据维度 |
S = { S 1 , … , S k } \mathcal{S}=\left\{\mathbf{S}_1, \ldots, \mathbf{S}_k\right\} S={S1,…,Sk} | 聚类结果/数据集划分 | k k k为簇数 |
S i = { s i 1 , … , s i n i } ⊂ X \mathbf{S}_i=\left\{\mathbf{s}_{i 1}, \ldots, \mathbf{s}_{i n i}\right\} \subset \mathbf{X} Si={si1,…,sini}⊂X | 第 i i i簇 | ∑ i = 1 k n i = n \sum_{i=1}^kn_i=n ∑i=1kni=n |
Ω = ( ω 1 , … , ω k ) \mathbf{\Omega}=\left(\omega_1, \ldots, \omega_k\right) Ω=(ω1,…,ωk) | 聚类中心点 | |
ω i = ( ω i 1 , … , ω i m ) \omega_i=\left(\omega_{i 1}, \ldots, \omega_{i m}\right) ωi=(ωi1,…,ωim) | ω i = 1 n i ∑ j = 1 n i s i j \omega_i=\frac{1}{n i} \sum_{j=1}^{n_i} \mathbf{s}_{i j} ωi=ni1∑j=1nisij | S i \mathbf{S}_i Si的均值 |
W = ( w i j ) k × m \mathbf{W}=\left(w_{i j}\right)_{k \times m} W=(wij)k×m | 2倍的 Ω \mathbf{\Omega} Ω | 主要是改个形式方便神经网络 |
下面给出一个数据集:
0.2, 0.3
0.1, 0.4
0.5, 0.6
0.6, 0.8
0.7, 0.2
0.9, 0.3
其中, n = 6 , m = 2. n=6,m=2. n=6,m=2.(鹏鹏作业:做一个 n = 20 n=20 n=20的人造数据集)
1.9, 0.4
1.5, 0.2
1.3, 0.2
1.2, 0.2
1.5, 0.2
1.5, 0.1
1.7, 0.5
4.3, 1.5
3.3, 1.0
3.6, 1.3
4.6, 1.3
4.1, 1.4
3.8, 1.3
4.5, 1.5
6.6, 2.1
5.5, 2.1
4.9, 2.0
4.8, 1.8
5.6, 2.2
5.8, 1.8
2. k k kMeans算法
kMeans 的目标是求一个最优聚类方案 (划分)
S
∗
=
arg
min
S
∑
j
=
1
k
∑
x
i
∈
S
j
∥
x
i
−
ω
j
∥
2
2
.
(1)
\mathcal{S}^*=\underset{\mathcal{S}}{\arg \min } \sum_{j=1}^k \sum_{\mathbf{x}_i \in \mathbf{S}_j}\left\|\mathbf{x}_i-\omega_j\right\|_2^2. \tag{1}
S∗=Sargminj=1∑kxi∈Sj∑∥xi−ωj∥22.(1)
换言之, 就是最大化各簇的"内聚性"之和.
为尽可能降低理解难度, 解释如下:
∥
x
i
−
ω
j
∥
2
2
=
∑
l
=
1
m
(
x
i
l
−
ω
j
l
)
2
=
(
x
i
1
−
ω
j
1
)
2
+
⋯
+
(
x
i
m
−
ω
j
m
)
2
,
(2)
\left\|\mathbf{x}_i-\omega_j\right\|_2^2=\sum_{l=1}^m\left(x_{i l}-\omega_{j l}\right)^2=\left(x_{i 1}-\omega_{j 1}\right)^2+\cdots+\left(x_{i m}-\omega_{j m}\right)^2, \tag{2}
∥xi−ωj∥22=l=1∑m(xil−ωjl)2=(xi1−ωj1)2+⋯+(xim−ωjm)2,(2)
即为两个
m
m
m维数据点的欧氏距离平方.
k
k
kMeans算法描述如下:
- Step 1. 随机选择 k k k 个数据点, 获得 Ω \mathbf{\Omega} Ω;
- Step 2. 对于任意 x i ∈ X x _i\in X xi∈X,计算它到 Ω \mathbf{\Omega} Ω 中各点的距离, 并确定其簇编号为
c
(
x
i
)
=
arg
min
j
∥
x
i
−
ω
j
∥
2
2
,
(3)
c(x_i)=\underset{j}{\arg \min}\left\|x_i-\omega_j\right\|_2^2, \tag{3}
c(xi)=jargmin∥xi−ωj∥22,(3)
由此构建
S
j
=
{
x
i
∣
c
(
x
i
)
=
j
}
.
S_j=\{x_i|c(x_i)=j \}.
Sj={xi∣c(xi)=j}.
-
Step 3. 计算各簇的新中心集合 Ω ′ = ( ω 1 ′ , … , ω k ′ ) \mathbf{\Omega}^{\prime}=\left(\omega_1^{\prime}, \dots, \omega_k^{\prime}\right) Ω′=(ω1′,…,ωk′),其中
ω ′ = 1 n i ∑ i = 1 n i s i j ; (4) \omega^{\prime}= \frac{1}{n_i}\sum_{i=1}^{n_i}s_{ij}; \tag{4} ω′=ni1i=1∑nisij;(4) -
Step 4. 如果 Ω ′ = Ω \mathbf{\Omega^{\prime}=\mathbf{\Omega}} Ω′=Ω,则表示收敛,算法结束;否则转到Step 2.
-
问题1: k k kMeans 能保证收敛到全局最优解吗?
回答:不能. 不同的初始聚类中心选择, 可能导致不同的聚类结果.
(鹏鹏作业: 根据所构造例子, 用 k k kMeans 获得两种聚类结果, 并展示其过程.)
k-Means算法并不能保证收敛到全局最优解,不同的初始聚类中心选择, 可能导致不同的聚类结果,根据上面的例子实验得到的两种不同的聚类结果显示如下:
第一种:
最终聚类结果如下:
第二种:
最终聚类结果如下:
- 问题2: 优化问题 (1) 式是一个困难问题吗?
回答:它是一个 NP 完全问题.
(鹏鹏作业: 找到相应的证明, 可以不去手动证明, 贴图即可.)
k-Means算法被认为是NP-hard问题的原因是它涉及到组合优化问题中的一个子集,即聚类问题。要理解为什么k-Means是NP-hard问题,可以从其算法的特性入手。k-Means算法的步骤如下:
1)随机选择k个聚类中心。
2)将每个数据点分配到距离最近的聚类中心。
3)根据每个聚类的分配结果,更新聚类中心的位置。
4)重复步骤2和3,直到聚类中心的位置不再变化或达到预定的迭代次数。
在k-Means算法中,最关键的步骤是将每个数据点分配到距离最近的聚类中心。这个过程涉及到计算每个数据点与所有聚类中心之间的距离,并选择最小距离对应的聚类中心进行分配。这个选择过程需要遍历所有可能的聚类中心,因此随着数据点数量的增加,计算量呈指数级增长。
NP-hard问题是指在多项式时间内无法解决的问题,但可以在多项式时间内验证其解的正确性。虽然k-Means算法可以在多项式时间内执行,但并没有确定的算法可以保证找到全局最优解,即使在二维空间中也是如此。因此,k-Means问题被认为是NP-hard问题。
- 问题3:簇确定后, 为什么聚类中心点的计算为 (3) 式, 用其它的点会不会导致 (1) 式更小?
(鹏鹏作业: 自己去证明.)
一组数据到其均值点的距离之和最小的性质是由数学推导得出的。这个性质是基于欧几里得距离的平方误差准则而得出的。
当我们想要证明一组数据到其均值点的距离之和最小时,我们可以使用微积分和最优化的方法来推导和证明。
假设我们有一组数据集 D \mathbf{D} D,包含 n n n个数据点。每个数据点可以表示为 x i x_i xi,其中 i = 1 , 2 , … , n i = 1, 2, \dots, n i=1,2,…,n。我们定义数据集 D \mathbf{D} D的均值点为 c \mathbf{c} c,其表示为 c = ( c 1 , c 2 , … , c d ) c = (c_1, c_2, \dots, c_d) c=(c1,c2,…,cd),其中 d d d 是数据点的维度。
我们的目标是最小化数据集 D \mathbf{D} D中所有数据点到均值点 c \mathbf{c} c的距离之和。
首先,我们定义距离的度量方式为欧几里得距离的平方,即 ∥ x i − c ∣ ∣ 2 \|\mathbf{x}_i - \mathbf{c}||^2 ∥xi−c∣∣2。
然后,我们定义目标函数E为数据集 D \mathbf{D} D中所有数据点到均值点 c \mathbf{c} c的距离之和的平方,即:
E = ∑ ∥ x i − c ∣ ∣ 2 \mathbf{E} = \sum \|\mathbf{x}_i - \mathbf{c}||^2 E=∑∥xi−c∣∣2
现在,我们将证明当\mathbf{E}最小时,均值点 c \mathbf{c} c为数据集 D \mathbf{D} D的中心点。
我们首先对目标函数\mathbf{E}关于均值点 c \mathbf{c} c的每个分量 c j c_j cj进行偏导数求解:
∂ E ∂ c j = ∂ ( ∑ ∥ x i − c ∥ 2 ) ∂ c j = ∑ 2 ( x i j − c j ) \begin{aligned}\frac{\partial \mathbf{E}}{\partial c_j} &= \frac{\partial \mathbf{(\sum\|x_i-c\|^2)}}{\partial c_j}\\ &= \sum2(x_{ij}-c_j) \end{aligned} ∂cj∂E=∂cj∂(∑∥xi−c∥2)=∑2(xij−cj)
其中, x i j x_{ij} xij 是数据点 x i 的第 j x_i 的第j xi的第j个分量。
将上述偏导数等于零,我们得到以下方程组:
∑
(
x
i
j
−
c
j
)
=
0
(
对
j
=
1
,
2
,
…
,
d
)
\sum(x_{ij}-c_j)=0(对j=1,2,\dots,d)
∑(xij−cj)=0(对j=1,2,…,d)
解上述方程组,我们可以得到均值点
c
\mathbf{c}
c的表达式:
c
j
=
1
n
∑
x
i
j
(
对
j
=
1
,
2
,
…
,
d
)
\mathbf{c}_j=\frac{1}{n}\sum x_{ij}(对j=1,2,\dots,d)
cj=n1∑xij(对j=1,2,…,d)
上述表达式表示均值点
c
\mathbf{c}
c的每个分量
c
j
c_j
cj为数据集
D
\mathbf{D}
D中对应维度上的所有数据点分量的平均值。
通过上述推导,我们证明了当数据集
D
\mathbf{D}
D中所有数据点到均值点
c
\mathbf{c}
c的距离之和最小时,均值点
c
\mathbf{c}
c为数据集
D
\mathbf{D}
D的中心点。
3. 用神经网络来实现
将 (1) 式改写为:
min
∑
i
=
1
n
∑
j
=
1
k
I
j
(
x
i
)
∥
x
i
−
ω
j
∥
2
2
,
(5)
\min\sum_{i=1}^n\sum_{j=1}^k\mathcal{I}_j(x_i)\|x_i-\omega_j\|_2^2, \tag{5}
mini=1∑nj=1∑kIj(xi)∥xi−ωj∥22,(5)
其中
I
j
(
x
i
)
对于任意一个
i
而言,仅有一个
j
所对应的值为
1
,其余
j
对应的值为
0
\mathcal{I}_j(x_i)对于任意一个i而言,仅有一个j所对应的值为1,其余j对应的值为0
Ij(xi)对于任意一个i而言,仅有一个j所对应的值为1,其余j对应的值为0.可以把它写成一个
n
×
k
n\times k
n×k的矩阵,如:
I
=
(
1
0
0
0
1
0
1
0
0
0
0
1
0
0
1
0
1
0
)
,
\mathcal{I}=\left(\begin{array}{lll}1 & 0 & 0 \\ 0 & 1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \\ 0 & 0 & 1 \\ 0 & 1 & 0\end{array}\right),
I=
101000010001000110
,
它表示对象被划分为
S
=
{
{
x
i
,
x
3
}
,
{
x
2
,
x
6
}
,
{
x
4
,
x
5
}
}
.
\mathcal{S}= \{\{x_i,x_3\},\{x_2,x_6\},\{x_4,x_5\}\}.
S={{xi,x3},{x2,x6},{x4,x5}}.我认为使用
I
i
j
可能比
I
j
(
x
i
)
\mathcal{I_{ij}}可能比\mathcal{I}_j(x_i)
Iij可能比Ij(xi)这种函数形式更好看一点.
(鹏鹏作业: 根据程序运行结果, 把自己数据对应的布尔矩阵写出来.)
注意 (5) 式与 (1) 式等价. 为了便于优化, 将该布尔矩阵换成一个小数矩阵, 其中原来为 0的值不变, 1则成为一个 ( 0,1 ]区间的小数. 先把它理解为一个隶属度 (cluster membership) 吧, 越接近聚类中心的点, 该值越接近 1.
将 (2) 式改写为
∥
x
i
−
ω
j
∥
2
2
=
∑
l
=
1
m
(
x
i
l
−
ω
j
l
)
2
=
∑
l
=
1
m
x
i
l
2
−
2
x
i
l
ω
j
l
+
ω
j
l
2
=
∥
x
i
∥
2
2
−
2
ω
j
⊤
x
i
+
∥
ω
j
∥
2
2
,
(6)
\begin{aligned}\left\|\mathbf{x}_i-\omega_j\right\|_2^2 & =\sum_{l=1}^m\left(x_{i l}-\omega_{j l}\right)^2 \\ & =\sum_{l=1}^m x_{i l}^2-2 x_{i l} \omega_{j l}+\omega_{j l}^2 \\ & =\left\|\mathbf{x}_i\right\|_2^2-2 \omega_j^{\top} \mathbf{x}_i+\left\|\omega_j\right\|_2^2,\end{aligned} \tag{6}
∥xi−ωj∥22=l=1∑m(xil−ωjl)2=l=1∑mxil2−2xilωjl+ωjl2=∥xi∥22−2ωj⊤xi+∥ωj∥22,(6)
这里使用转置符号
T
\mathsf{T}
T 是为了支撑内积的计算.
令
β
i
=
∥
x
i
∥
2
2
,
(7)
\beta_i=\|x_i\|_2^2, \tag{7}
βi=∥xi∥22,(7)
它是
x
i
\mathbf{x}_i
xi与坐标原点距离的平方, 在聚类算法执行过程中不变, 因此可以看作是一个常数.
b
j
=
∥
ω
j
∥
2
2
,
(8)
b_j=\| \omega_j\|_2^2, \tag{8}
bj=∥ωj∥22,(8)
是
ω
i
\omega_i
ωi与坐标原点距离的平方, 在聚类算法执行过程改变.
w
j
=
2
ω
j
.
(9)
\mathbf{w}_j=2\omega_j. \tag{9}
wj=2ωj.(9)
因此 (6) 式进一步被改造成
∥
x
i
−
ω
j
∥
2
2
=
β
i
−
w
j
⊤
x
i
−
b
j
(10)
\|x_i-\omega_j\|_2^2=\beta_i-w_j^{\top}x_i-b_j \tag{10}
∥xi−ωj∥22=βi−wj⊤xi−bj(10)
令
I
i
j
=
exp
(
−
∥
x
i
−
ω
j
∥
2
2
/
τ
)
∑
j
=
1
k
exp
(
−
∥
x
i
−
ω
j
∥
2
2
/
τ
)
,
(11)
\mathcal{I}_{i j}=\frac{\exp \left(-\left\|\mathbf{x}_i-\omega_j\right\|_2^2 / \tau\right)}{\sum_{j=1}^k \exp \left(-\left\|\mathbf{x}_i-\omega_j\right\|_2^2 / \tau\right)}, \tag{11}
Iij=∑j=1kexp(−∥xi−ωj∥22/τ)exp(−∥xi−ωj∥22/τ),(11)
如果某一数据点与自己的簇中心越近, 则分子越大; 离别人的簇中心越远, 则分子越小. 且该数据取值区间为(0,1). 其中
τ
\tau
τ 为温度因子 (可能与模拟退火法相关).
(鹏鹏作业: 根据 (11) 式及自己的例子计算
I
\mathcal{I}
I 矩阵, 分别设置
τ
=
0.1
,
0.5
,
0.9
\tau=0.1,0.5,0.9
τ=0.1,0.5,0.9各计算一次.)
实际上, (11) 式为 softmax 函数的一种扩展, 它在神经网络中很常用.
简单起见, 仅考虑单个样本
x
i
\mathbf{x}_i
xi的损失.
L
i
=
∑
j
L
i
j
=
∑
j
I
i
j
(
β
i
−
ω
j
⊤
x
i
−
b
j
)
.
(12)
\mathcal{L}_i=\sum_j\mathcal{L}_{ij}=\sum_j\mathcal{I}_{ij}(\beta_i-\omega_j^{\top}x_i-b_j). \tag{12}
Li=j∑Lij=j∑Iij(βi−ωj⊤xi−bj).(12)
图 3 展示了对应于 (12) 式的损失函数计算实现方式.
令
z
i
j
=
−
β
i
+
w
j
⊤
x
i
+
b
j
z_{ij}=-\beta_i+\mathbf{w}_j^{\top}\mathbf{x}_i+b_j
zij=−βi+wj⊤xi+bj
L
i
=
−
∑
j
e
x
p
(
z
i
j
/
τ
)
∑
j
=
1
k
e
x
p
(
z
i
j
/
τ
)
z
i
j
=
−
∑
j
f
(
z
i
j
)
(12)
\begin{aligned} \mathcal{L}_i &=-\sum_j\frac{exp(z_{ij}/\tau)}{\sum_{j=1}^kexp(z_{ij}/\tau )}z_{ij} \\&=-\sum_jf(z_{ij})\end{aligned} \tag{12}
Li=−j∑∑j=1kexp(zij/τ)exp(zij/τ)zij=−j∑f(zij)(12)
因此, 优化目标可以写为
max
∑
j
f
(
z
i
j
)
,
where
z
i
j
=
−
β
i
+
w
j
⊤
x
i
+
b
j
.
(13)
\begin{aligned} & \max \sum_j f\left(z_{i j}\right), \\ & \text { where } z_{i j}=-\beta_i+\mathbf{w}_j^{\top} \mathbf{x}_i+b_j .\end{aligned}\tag{13}
maxj∑f(zij), where zij=−βi+wj⊤xi+bj.(13)
然而,这里的
z
i
j
中,
w
j
和
b
j
z_{ij}中,\mathbf{w}_j和b_j
zij中,wj和bj相互依赖 (耦合), 无法进行有效的优化. 为此, 必须在训练阶段将拆开.
使用支持向量机类似的方案, 将这里的常数和
b
j
b_j
bj归一化,同时
ω
j
=
ω
j
/
∥
ω
j
∥
,可以获得
\omega_j=\omega_j/\|\omega_j\|,可以获得
ωj=ωj/∥ωj∥,可以获得
L
i
=
∑
j
I
i
j
(
2
−
w
j
⊤
x
i
)
(14)
\mathcal{L}_i=\sum_j\mathcal{I}_{ij}(2-\mathbf{w}_j^{\top}\mathbf{x}_i) \tag{14}
Li=j∑Iij(2−wj⊤xi)(14)
如图 4 所示, 进行式 (14) 的权重归一化之后, 向量的模被控制在单位长度, 以免趋近于无穷; 梯度归一化之后, 变化量被控制在一定范围, 类似于梯度下降时使用的步长, 以避免抖动并保证收敛.
现在将聚类嵌入到一个编码-解码器结构中, 令
L
=
L
r
e
c
+
L
c
l
u
=
∑
i
∥
x
i
−
g
(
h
(
x
i
)
)
∥
2
2
+
λ
∑
i
,
j
I
i
j
(
2
−
w
j
⊤
h
(
x
i
)
)
.
\mathcal{L}=\mathcal{L}_{rec}+\mathcal{L}_{clu}=\sum_i\|\mathbf{x}_i-g(h(\mathbf{x}_i))\|_2^2+\lambda\sum_{i,j}\mathcal{I}_{ij}(2-\mathbf{w}_j^{\top}h(\mathbf{x}_i)).
L=Lrec+Lclu=i∑∥xi−g(h(xi))∥22+λi,j∑Iij(2−wj⊤h(xi)).
其中
h
(
⋅
)
和
g
(
⋅
)
h(\cdot)和g(\cdot)
h(⋅)和g(⋅)分别为编码、解码函数.
- rec 表示 reconstruction, clu 表示 clustering, 也就是说, 同时考虑数据重建与聚类的损失.
- 使用编码 (本质是特征提取) 后的特征进行聚类, 有可能是将原始空间中非球形的簇变换到接近球形;
- 这里使用 h 代替原文的 f 是为了避免与 ( 13 ) 式的 f h代替原文的 f 是为了避免与 (13) 式的 f h代替原文的f是为了避免与(13)式的f 冲突.
- 论文里面设置 λ = 0.01 \lambda = 0.01λ=0.01, 不知道为什么如此小, 聚类效果如此不重要吗? (鹏鹏作业: 在实际数据上运行, 看两个损失的比例.)
4. Model Explainability vs. Interpretable Model
- 前者是模型可解释性, 即获得的中间结果, 最终结果是否可以被强行解释.
- 后者是可解释模型, 即模型本身的机制是否可解释的.