论文笔记: 可解释神经聚类作业(copy)

摘要:分享对论文的理解, 原文见 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=ni1j=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×m2倍的 Ω \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=1kxiSjxiωj22.(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ωj22=l=1m(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 xiX,计算它到 Ω \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)=jargminxiωj22,(3)
由此构建 S j = { x i ∣ c ( x i ) = j } . S_j=\{x_i|c(x_i)=j \}. Sj={xic(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=1nisij;(4)

  • Step 4. 如果 Ω ′ = Ω \mathbf{\Omega^{\prime}=\mathbf{\Omega}} Ω=Ω,则表示收敛,算法结束;否则转到Step 2.

  • 问题1: k k kMeans 能保证收敛到全局最优解吗?
    回答:不能. 不同的初始聚类中心选择, 可能导致不同的聚类结果.
    (鹏鹏作业: 根据所构造例子, 用 k k kMeans 获得两种聚类结果, 并展示其过程.)
    k-Means算法并不能保证收敛到全局最优解,不同的初始聚类中心选择, 可能导致不同的聚类结果,根据上面的例子实验得到的两种不同的聚类结果显示如下:

第一种:

第一种聚类

图1:第一种聚类结果

最终聚类结果如下:你好v迪欧少女脸色难看疗法

第二种:

在这里插入图片描述

图2:第二种聚类结果

最终聚类结果如下:在这里插入图片描述

  • 问题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 xic2

然后,我们定义目标函数E为数据集 D \mathbf{D} D中所有数据点到均值点 c \mathbf{c} c的距离之和的平方,即:

E = ∑ ∥ x i − c ∣ ∣ 2 \mathbf{E} = \sum \|\mathbf{x}_i - \mathbf{c}||^2 E=xic2

现在,我们将证明当\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} cjE=cj(xic2)=2(xijcj)

其中, 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) (xijcj)=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=n1xij(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=1nj=1kIj(xi)xiωj22,(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ωj22=l=1m(xilωjl)2=l=1mxil22xilωjl+ωjl2=xi222ωjxi+ωj22,(6)
这里使用转置符号 T \mathsf{T} T 是为了支撑内积的计算.

β i = ∥ x i ∥ 2 2 , (7) \beta_i=\|x_i\|_2^2, \tag{7} βi=xi22,(7)
它是 x i \mathbf{x}_i xi与坐标原点距离的平方, 在聚类算法执行过程中不变, 因此可以看作是一个常数.
b j = ∥ ω j ∥ 2 2 , (8) b_j=\| \omega_j\|_2^2, \tag{8} bj=ωj22,(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ωj22=βiwjxibj(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ωj22/τ)exp(xiωj22/τ),(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=jLij=jIij(βiωjxibj).(12)
在这里插入图片描述

图3:损失函数的计算

图 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+wjxi+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=jj=1kexp(zij/τ)exp(zij/τ)zij=jf(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} maxjf(zij), where zij=βi+wjxi+bj.(13)

然而,这里的 z i j 中, w j 和 b j z_{ij}中,\mathbf{w}_j和b_j zij中,wjbj相互依赖 (耦合), 无法进行有效的优化. 为此, 必须在训练阶段将拆开.
使用支持向量机类似的方案, 将这里的常数和 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=jIij(2wjxi)(14)
在这里插入图片描述

图4:权重归一化与梯度归一化

如图 4 所示, 进行式 (14) 的权重归一化之后, 向量的模被控制在单位长度, 以免趋近于无穷; 梯度归一化之后, 变化量被控制在一定范围, 类似于梯度下降时使用的步长, 以避免抖动并保证收敛.
在这里插入图片描述

图5:端到端训练网络.

现在将聚类嵌入到一个编码-解码器结构中, 令
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=ixig(h(xi))22+λi,jIij(2wjh(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

  • 前者是模型可解释性, 即获得的中间结果, 最终结果是否可以被强行解释.
  • 后者是可解释模型, 即模型本身的机制是否可解释的.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值