摘要
聚类是机器学习中的一项基本任务,其目标是将实例分配到不同的组中,以便相似的样本归属于同一个簇,而不同的样本归属于不同的簇。传统的浅层聚类方法通常假设数据以特征向量的形式收集和表示,并在其内部进行聚类。然而,在处理高维数据(如图像、文本、视频和图)的聚类任务时,往往面临诸多挑战,例如表示的不加区分性以及实例间复杂的关系。
过去几十年来,深度学习在有效表示学习和复杂关系建模方面取得了显著成功。受到这些进展的启发,深度聚类(Deep Clustering)旨在通过深度学习技术提升聚类效果,并引起了学术界和工业界的广泛关注。尽管这一研究领域已取得了许多成果,但缺乏系统性的分析和全面的分类框架在一定程度上制约了其进一步发展。
在这篇综述中,首先探讨了如何将深度学习融入深度聚类,并识别出其两个核心组成部分:表示学习模块和聚类模块。随后,总结并分析了这两个模块的代表性设计。此外,提出了一种基于这两个模块交互方式的全新深度聚类分类法,包括多阶段方法、生成式方法、迭代方法和同步方法。
除了理论分析,还介绍了知名的基准数据集、评估指标以及开源工具,以直观展示不同的实验方法。最后,探讨了深度聚类的实际应用场景,并提出了未来研究中亟待解决的关键挑战。
【论文阅读】A Comprehensive Survey on Deep Clustering: Taxonomy, Challenges, and Future Directions之总述-CSDN博客 中已经介绍了基本的概念,
【论文阅读】A Comprehensive Survey on Deep Clustering: Taxonomy, Challenges, and Future Directions之表示学习-CSDN博客 中已经介绍了表示学习,
【论文阅读】A Comprehensive Survey on Deep Clustering: Taxonomy, Challenges, and Future Directions之聚类模块-CSDN博客 中已经介绍了聚类模块,
那这里将详细介绍深度聚类的类别。
深度聚类的分类
扩展之前关于深度聚类框架中表示学习和聚类的核心模块的讨论。根据这些模块的输入和输出,现有的深度聚类方法实施了多种策略,以增强它们之间的交互和协作,从而提高深度聚类的效果。因此,将省略每个模块设计的复杂细节,而是集中讨论它们的相互关系,并将现有的方法分为四类:
- 多阶段深度聚类:表示学习模块与聚类模块顺序连接。
- 迭代深度聚类:表示学习模块与聚类模块迭代更新。
- 生成式深度聚类:聚类模块被建模为表示模块的先验。
- 同时深度聚类:表示学习模块与聚类模块同时更新。
表3中详细展示它们在分类法下的具体设计。
1 多阶段深度聚类
考虑到表示学习和聚类模块,显然表示学习的输出会顺利过渡到聚类模块的输入,从而直接帮助生成聚类结果。多阶段深度聚类指的是这两大模块被分开优化并顺序连接的方法。随着表示学习和聚类模块的不断发展,多阶段方法仍然是深度聚类领域中的一个活跃方向。早期的多阶段深度聚类方法[111, 112]通过训练深度自编码器学习表示,然后将其作为K-means方法的输入来获得聚类结果。尽管这些方法比较简单,但它们已经超越了早期的方法,并推动了深度聚类的发展。后来,提出了深度子空间聚类方法,该方法首先学习亲和矩阵和实例表示,然后通过谱聚类对亲和矩阵进行聚类[55, 56, 58],或者对实例表示进行K-means聚类[57]。得益于scikit-learn[140]和许多其他开源机器学习库的贡献,聚类算法已被广泛应用于许多领域和数据类型,且编程成本较低。例如,在文本/视频/图形数据聚类场景中,关系(相似性)匹配在[113, 141, 142]中使用,K-means在[143]中使用,谱聚类在[76, 114, 144]中使用,层次聚合聚类在[145]中使用,许多其他聚类算法也被直接应用。在图形数据中,基于图切割的节点聚类,如Metis[146]、Graclus[147]和Balance Normalized Cut(BNC)[148],被应用于图聚类[149-151]。
最新的多阶段方法显式地将聚类先验融入到表示学习中,然后在目标友好的表示上进行聚类。例如,IDFD[51]通过两种目标来学习表示:学习实例之间的相似性并减少特征之间的相关性。通过上述明确的目的,直接在学习到的表示上使用简单的K-means,也可以在许多现有的深度聚类方法中实现竞争性的聚类结果。
总结
多阶段方法具有快速部署、编程友好和直观理解的优点,因此可以轻松地应用于各种数据类型的应用[152-159]。然而,这种简单的深度表示学习与浅层聚类的结合存在以下缺点:
- 大多数表示学习方法并未专门针对聚类任务设计,缺乏执行此类任务所需的区分能力。
- 聚类结果揭示了数据实例之间的基本联系,但这些信息并未被有效利用来指导区分性表示的学习。
总之,这种简单的级联连接会切断表示学习与聚类之间的信息流和互动,因此,两个模块的局限性将共同影响最终的性能。
2 迭代深度聚类
为了弥补之前所述的多阶段深度聚类的不足,迭代深度聚类通过利用稳健表示的优势来支持聚类,同时聚类结果又反馈给表示学习过程,从而改进了该过程。总的来说,典型的迭代深度聚类框架通过两个主要阶段进行迭代更新:
(1) 从当前表示中推导聚类结果,
(2) 基于最新的聚类结果改进表示。
由于在迭代深度聚类中,表示模块仅用于为聚类模块提供输入,本小节将根据聚类模块的反馈对现有的迭代深度聚类方法进行分类。
2.1 带有个别监督的迭代深度聚类
带有个别监督的迭代深度聚类依赖于聚类模块生成的伪标签,这些伪标签可以用于以监督的方式训练表示学习模块。
在早期的工作中[49, 125],簇中心和分配采用K-means方式更新。S2ConvSCN[53]和PSSC[126]结合了子空间聚类和伪标签生成,通过谱聚类或划分伪相似度图来获得伪标签。后来,许多工作[95, 98, 99]倾向于利用神经网络同时进行表示学习和聚类,这两个部分被组合为一个神经网络。聚类模块通常是一个多层感知机(MLP),用于产生软聚类分配。在这种方式下,硬伪标签可以通过梯度反向传播和适当的约束同时引导聚类和表示学习。具有代表性的方法是DeepCluster[99],它在K-means聚类和通过最小化预测聚类分配与伪标签之间的差距来更新主干网络及分类器之间交替进行。事实上,DeepCluster已经作为一种成熟的聚类算法应用于视频聚类[74]。
后来,SCAN[95]采用了预训练与微调的框架。聚类结果通过自我标签进行微调,该方法通过对软分配概率进行阈值处理选择高置信度的实例,并通过最小化选定实例的交叉熵损失来更新整个网络。SPICE[98]是另一个具有代表性的迭代深度聚类方法,其中分类模型首先在伪标签的指导下训练,然后在可靠标签实例集上通过半监督训练进行重新训练。
2.2 带有关系监督的迭代深度聚类
带有关系监督的迭代深度聚类指的是基于伪标签的关系,它为表示学习模块提供了成对的指导。更具体地说,这种关系通常通过两个实例是否具有相同的离散伪标签来建模[7, 100],该模型被训练为一个二分类任务。另一类流行的方法[54, 101]通过聚类分配概率的相似度来建模关系,从而将表示学习训练为回归任务。
总结
迭代深度聚类方法[123, 124, 127, 160-162]得益于表示学习和聚类之间的相互促进。然而,它们也遭遇了迭代过程中的错误传播问题。更具体地说,不准确的聚类结果可能导致混乱的表示,从而限制了自我标签效果对性能的影响。此外,这反过来又会影响聚类结果,特别是在训练的初期阶段。因此,现有的迭代聚类方法在很大程度上依赖于表示模块的预训练。
尽管面临这些挑战,迭代深度聚类方法在表示学习和聚类能力方面快速进步,在实际应用中展现出了相当大的潜力。
3 生成式深度聚类
虽然前述方法通过梯度传播在表示学习和聚类模块之间建立了联系,但这种连接仅依赖于模块之间梯度的传递。为了增强这些模块的自然协作能力,利用深度生成网络在这两个领域的广泛应用,基于生成式深度聚类的方法已经被开发并广泛探索。
具体来说,这类方法假设潜在的聚类结构,并通过估计数据密度推断聚类分配。最具代表性的模型是高斯混合模型(GMM)[163],它假设数据点是从高斯混合中生成的。具体而言,假设有K个聚类,一个观测样本x是通过以下过程生成的:
- 选择一个聚类:c ∼ Mult(π)
- 生成一个样本:x|c ∼ N(μc, σc²I)
其中,π表示聚类的先验概率;Mult(π)是带有参数π的多项式分布;μc和σc分别是对应于聚类c的高斯分布的均值和方差参数。著名的期望最大化算法可用于学习最优参数和聚类分配。
尽管GMM已成功应用,但其浅层结构通常不足以捕捉数据的非线性模式,这会对其在复杂数据(例如图像、文本、图形等)上的表现产生不利影响。为了解决这个问题,提出了将生成模型与强大的深度神经网络结合的深度生成模型,这些神经网络具有足够的能力来建模复杂和非线性的数据。这类方法可以分为两种类型:基于变分自编码器(VAE)的方法和基于生成对抗网络(GAN)的方法。
3.1 基于变分自编码器的深度生成聚类
对于高维和复杂数据的聚类,一种有前景的解决方案是直接将GMM与深度神经网络堆叠——GMM生成潜在向量z,深度神经网络进一步将潜在向量z转化为复杂的数据实例x。通过这种方式,堆叠的模型不仅可以享有潜在聚类结构的优点,同时又有足够的能力来建模复杂的数据。例如,具有代表性的模型VaDE[116]和GMVAE[115]假设每个实例的生成过程如下:
- 选择一个聚类:c ∼ Mult(π)
- 生成一个潜在向量:z|c ∼ N(μz(c; β), σz²(c; β)I)
- 生成一个样本:x|z ∼ N(μx(z; θ), σx²(z; θ)I)
其中,μz(.; β)、σz²(.; β)、μx(.; θ)和σx²(.; θ)是由神经网络提供的,带有参数β和θ,分别决定了高斯分布的均值和方差。给定上述生成过程,可以通过最大化给定数据点的似然函数(如公式(19))来获得最优参数和聚类分配:
然而,直接优化上述似然函数是不可行的,因为它涉及到积分和复杂的神经网络。VAE[30]为如何解决这个问题提供了思路,使得参数和后验分布可以通过反向传播有效估计。具体来说,生成模型通过以下变分推理目标进行训练,如公式(20)所示,也就是ELBO:
其中,q(z, c|x; φ)是变分后验,用于近似真实后验,可以通过识别网络φ进行建模。蒙特卡洛方法[32]和重参数化技巧[30]可以用来学习这些参数。
最近,在VaDE和GMVAE的基础上,提出了一些改进的变体。例如,Prasad等人[164]引入了一种数据增强技术,约束输入实例(例如图像)与其增强版本共享相似的聚类分布;Li等人[165]采用了蒙特卡洛目标和标准退火轨迹来优化混合模型,这可以生成比基本VAE方法更好分离的嵌入;Ji等人[166]提出用改进的基于互信息的目标替换VAE中的解码器;Wang等人[167]提出将潜在嵌入分为两部分,分别捕获聚类的特殊性和共性。
3.2 基于生成对抗网络的深度生成聚类
近年来,生成对抗网络(GAN)在估计复杂数据分布方面取得了巨大成功[122, 168–171]。标准的GAN包含两个组成部分:生成器G,旨在合成“真实”样本以欺骗判别器;以及判别器D,试图区分真实数据和生成的样本。通过两者之间的对抗,生成器可以生成具有与数据分布相似的样本。受到这种强大能力的启发,将GAN集成到生成式聚类模型中将是一个有前景的方向。具体来说,Ben-Yosef等人[119]提出将GMM与GAN堆叠,其中GMM作为生成数据实例的先验分布。正式地,他们优化了以下目标函数(公式21):
其中,p_X(x)表示训练数据的分布;p_Z(z)是G的先验分布,定义为高斯混合分布(公式22):
通过为GAN提供这种多模态概率分布,模型能够更好地拟合复杂的数据分布,特别是在数据包含许多不同聚类时。还有一些改进的变体。例如,Yu等人[120]提出直接用GAN替代GMM的高斯分布,并开发了一种ϵ-期望最大化学习算法,以避免早期收敛问题;Ntelemis等人[172]提出在GAN的判别器之前使用Sobel操作;Mukherjee等人[118]提出从一组一热编码变量和连续潜在变量的混合分布中采样潜在向量z,并引入具有聚类特定损失的反向网络,使得模型更加适合聚类任务。类似地,在[121, 173]中为特征层(即潜在向量)对抗引入了反向网络。
总结
尽管深度生成聚类模型能够在完成聚类的同时生成样本,但它们也存在一些弱点:
(1) 训练生成模型通常涉及蒙特卡洛采样,这可能导致训练不稳定和高计算复杂度;
(2) 主流的生成模型基于VAE和GAN,难免继承了它们的相同缺点。
基于VAE的模型通常需要对数据分布进行先验假设,这在实际情况下可能并不成立;虽然基于GAN的算法更加灵活多样,但它们通常会遭遇模式崩塌和收敛缓慢的问题,特别是对于包含多个聚类的数据。
4 同时深度聚类
与通过概率分布加强表示学习和聚类之间联系的生成式深度聚类方法相比,利用深度学习优势的更有效的技术是通过一个单一的优化目标同时优化这两个模块。因此,同时深度聚类方法迅速发展,并在最近取得了显著的成功。尽管大多数迭代深度聚类方法也通过一个单一目标优化这两个模块,但这两个模块是显式地迭代优化的,无法同时更新。在本小节中,介绍了同时深度聚类的代表性架构。
4.1 自训练自编码器
自编码器是一种强大的工具,可以以无监督的方式学习数据表示,早期的同时深度聚类尝试便已采用了这一方法[112]。
代表性方法是DEC [102],该方法将自编码器与自训练策略结合。这个简单但有效的策略深刻地影响了后续的研究。自编码器首先进行预训练,只有编码器作为表示学习模块的初始化。然后引入第4.3节中提到的自训练策略,旨在同时优化聚类和表示学习。
基于传统的DEC方法,提出了许多变体和改进。为了保持每个实例的局部结构,IDEC [103]进一步将重构损失集成到自编码器中。自训练的自编码器的通用公式可以总结为公式(23):
其中,LAE是自编码器的损失,LST是聚类导向自训练的损失,例如DEC中的邻域约束。为了提升自编码器的能力,研究者们尝试适应不同的数据类型。在[104-106]中,自编码器的线性层被替换为全卷积层,这样可以更好地捕捉图像特征。在CCNN [130]中,提出了聚类卷积神经网络作为一种新的骨干网络,用于提取对聚类任务有利的表示。在DEPICT [105]中,引入了一个额外的噪声编码器,通过最小化噪声解码器和干净编码器之间每一层的重构误差,增强了自编码器的鲁棒性。
尽管自训练策略取得了成功,但后来的工作也尝试解决特定问题。为了增加聚类的鲁棒性,自训练被应用于两个分支:干净分支和增强分支[104](噪声分支[105])。具体来说,目标分布P使用干净分支计算,用以指导增强或噪声分支的软分配Q。自训练策略还可以与子空间聚类相结合。CSC [107]引入了一个假设,称为分布不变性,即目标分布P对于子空间空间中的不同距离度量应该是不变的。因此,使用两个度量(欧几里得距离和余弦距离)计算目标分布PE和PC,并最小化它们之间的KL散度。
根据上述分析,自训练类似于K-means聚类,并且存在不同聚类之间的不平衡问题[174]。为了解决数据不平衡和分布外样本的问题,StatDEC [9]通过加入聚类的归一化实例频率来改进目标分布。通过这种方式,模型能够保持小组的区分度,并形成一个对不平衡聚类不敏感的局部聚类边界。
4.2 基于互信息最大化的聚类
如【论文阅读】A Comprehensive Survey on Deep Clustering: Taxonomy, Challenges, and Future Directions之表示学习-CSDN博客和写文章-CSDN创作中心
所示,互信息最大化已经成功应用于表示学习和聚类。两者模块中互信息的统一形式为理解和实现提供了便利。
代表性的基于互信息最大化的聚类方法是DCCM [132]。对于每个数据实例,最大化深层和浅层表示之间的互信息,从而保证表示的一致性。这种一致性通过鼓励具有相同伪标签的实例共享相似的表示,进一步扩展到聚类分配空间。
许多后续的工作可以视为该方法的变体。在VCAMI [175]和IIC [133]中,引入了增强互信息(AMI)来提高鲁棒性。这种增强不变性启发了后来的对比深度聚类方法,将在下节介绍。在ImC-SWAV [176]中,最大化集成离散表示和离散概率分布之间的互信息,从而改进了传统的SWAV [177]方法。
4.3 对比深度聚类
与基于互信息最大化的深度聚类类似,对比学习也成功应用于表示学习模块和聚类模块。对比学习的主要思想是将相似实例拉近,而将不同的实例推开,这与聚类的精神一致:来自同一聚类的实例应该靠近,而来自不同聚类的实例应该分开。
代表性的对比深度聚类方法是CC [134]。基本思想是将每个聚类视为低维空间中的数据实例。对比表示学习中的实例区分任务可以通过区分不同的聚类迁移到聚类任务中,这也是聚类的基本要求。此外,增强不变性和局部鲁棒性的优势可以在聚类任务中得以保持。
以CC为基础架构,许多对比深度聚类可以视为其变体。PICA [131]可以看作是没有增强的CC的退化形式,它通过最小化聚类分配统计向量之间的余弦相似度,直接分离不同的聚类。在DCCM [132]中,引入增强来保证学习到的表示的局部鲁棒性。DRC [137]采用与CC相同的对比学习,其中聚类表示称为分配概率。不同之处在于聚类的正则化,这一方法受到组套索(group lasso)[178]的启发。在CRLC [179]中,对比学习是在同一实例的两个增强版本的聚类分配之间进行的,而不是在聚类表示之间进行。同时,对比学习中的点积被对数点积所取代,更适合概率对比学习。SCCL [136]通过文本数据增强扩展了这一方法,证明了这种基于对比学习的自训练框架具有普遍适用性。
后续的工作进一步采用了语义空间中的对比聚类。在SCL [180]中,负样本通过不同的伪标签进行限制,以便更好地区分不同聚类中的实例。MiCE [181]采用分而治之策略,其中门控函数将整个数据集划分为多个聚类,每个聚类中的专家旨在区分该聚类中的实例。然而,与InfoNCE不同,后者隐式地建模了对齐和均匀性[45],MiCE则以更显式的方式建模这两个属性。最近,TCC [182]通过重新参数化技巧进一步提高了效率,并显式地提高了聚类的可区分性。
一些其他方法尝试克服传统对比学习的问题。在GCC [139]中,通过在实例表示上构建的KNN图选择正负对,这可能与克服对比学习中的“假负样本”问题相关。在NCC [183]中,对比学习模块从SimCLR替换为BYOL [184],从而解决了对负样本的过度依赖问题。
4.4 混合式同步深度聚类
前述的同步深度聚类方法具有显著的特点和优势,一些其他的工作则是上述技术的混合形式。SCCL [136] 和 Sundareswaran 等 [185] 将对比表示学习与自训练相结合。DDC [186] 和 RCC [187] 将关系匹配聚类与伪标签相结合,以提高聚类性能。DCC [188] 将基于自编码器的表示与关系匹配聚类结合起来。通过结合对比学习中的增强技术,文献[117]将基于自编码器的表示学习与谱聚类相结合。
总结
同步深度聚类 [128, 129, 135, 138, 189–198] 因其统一优化而引起了最多的关注。直观地看,学习到的表示是面向聚类的,聚类在具有判别性的空间中进行。然而,这可能源于表示学习模块与聚类模块之间优化焦点的不当偏见,当前只能通过手动设置平衡参数来缓解这一问题。此外,模型容易陷入退化的解,其中所有实例都被分配到一个单一的聚类中。