Towards K-means-friendly Spaces: Simultaneous Deep Learning and Clustering解析

Towards K-means-friendly Spaces: Simultaneous Deep Learning and Clustering解析

因为最近会经常用到聚类,并且对于深度聚类的了解较少,所以准备从这篇比较经典的开始,
论文地址:论文地址
论文代码:代码

背景

大多数的学习任务都需要用到降维和聚类,不过一般来说都是分开进行降维和聚类的,但是最近的研究表明同时优化两种任务,这两者可以相互提升性能。
K-means一般只适合聚类K-means友好型数据,即样本在聚类中心周围均匀的分布,所以我们可以将样本映射到一个“K-means友好”的分布,再进行聚类,就能得到较好的聚类效果。
作者这里利用DNN能够拟合非线性函数的能力,使用DNN将数据映射到一个“K-means友好”的分布,再进行聚类。(这里作者使用的DNN是一个autoEndecoder自监督模型)

效果可视化

在这里插入图片描述
左上角的图片是原始数据,是一个二维的数据,然后将数据通过非线性变换,升维到100维,再用各个聚类方法来聚类,可以看到DCN(本文方法)的效果好于其他方法。

K-means

在这里插入图片描述
这里就是K-means的主要公式,物理意义:让每个样本 和其所属的聚类中心尽可能的近。M是聚类中心向量拼成的矩阵,si是assignment矩阵就是onehot向量,代表每个样本属于哪个簇。

DCN

在这里插入图片描述
模型就是使用了一个autoEndecoder来重构feature,其中就使用其隐藏层当作聚类的features(降维后的features,假设就是降维后的数据的分布为 K means友好的)
然后损失函数同时跟新整个DNN和(K-means,间接更新)
损失函数:
在这里插入图片描述
前一项是使自编码器的输入输出尽可能相似,后一项是K-means损失函数

优化策略

模型已经介绍完了,其实还蛮简单的,但是如果我们直接这样训练模型,会遇到不少麻烦。

逐层贪婪训练

首先我们的损失函数是一个非凸函数,所以我们参数的初始化就变得尤为重要,这里作者采用了逐层贪婪训练

逐层贪婪算法的主要思路是每次只训练网络中的一层,即我们首先训练一个只含一个隐藏层的网络,仅当这层网络训练结束之后才开始训练一个有两个隐藏层的网络,以此类推。在每一步中,我们把已经训练好的前k-1层固定,然后增加第k层

交替随机优化

即使我们有了一个非常好的初始化参数,但是想要解决非凸优化问题还是非常具有挑战性的,一般来说我们采用随机梯度下降(SDG)算法要同时跟新四个参数 W, Z,M(聚类中心),{sj},这里{sj}是一个离散的集合,(里面就是onehot向量,代表这个样本属于哪个簇),所以不能直接用梯度下降算法更新 。
所以作者提出结合alternating optimization and SGD,其做法就是将参数分为两组 M, {sj}和(W, Z),先固定一组参数,更新另外一组,然后再固定已经更新的参数去更新未更新的参数

更新网络参数

这里作者在更新DNN网络参数的时候,固定了M和{sj}来更新W和Z.

更新聚类参数

这里固定 了W和Z,更新M和{sj},其中sj的更新如下
在这里插入图片描述
就是计算样本到聚类中心的距离,离哪个聚类中心越近,则sj的哪一维变成1,其余是0,就是属于这个簇的意思。
对于M的更新,一般来说是用
在这里插入图片描述
进行更新,但是这样更新存在诸多问题,因为已经出现的历史数据可能不足以对全局集群结构进行建模,因此初始s可能与正确数据相距甚远。就是说要多利用最新来(变换)的信息。可能有的样本一直都在一个簇里面,那么这个样本就不足以对全局结构进行建模

为了解决上述问题令cik为算法在处,理传入的样本xi之前,将样本分配给聚类k的算法的次数所以如果一个样本始终在一个簇里面,那么这个样本对于更新聚类中心的影响就不大,如果有新的样本进来,那么对于聚类中心的更新影响就会很大,故使用下列公式
在这里插入图片描述

交替随机优化的总算法为
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验

实验部分就不细说了,作者的代码给的是手写数据集
在这里插入图片描述

总结

提出了深度聚类的方法,对我来说很有启发的就是那个交替随即优化的过程。
因为以前觉得K-means不能做成端到端,不停更新的模式,这里受到了启发,我们完全可以将K-means加在一个深度学习模型中:

首先先初始化K-means,先用最原始数据跑一次K-means,得到聚类中心和分配矩阵,当DNN跟新参数后,K-means就重新计算距离更新 sj 和 M ,在模型最后的损失函数中,将K-means的参数固定,加上K-means的损失项,同时约束DNN

不过我粗略的将这个方法代替K-means放在我的实验中(未调参,参数比较多) ,并未取得好的效果,不过还是挺受启发的。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值