
前提知识维度特征维度可以简单理解为需要用多少个数字去表示特征。例如一个人有身高、体重、性别、年龄这四个特征每个特征都用一个数字表示那人的特征维度就是4。软/硬分布在聚类算法中根据一个数据点是否确定属于唯一一个簇可划分为软分布和硬分布。如果一个数据点和簇中心的关系只有属于和不属于也就是0和1则是硬分布比如Kmeans等如果数据点和簇中心之间的关系用相关度或者隶属度表示则是软分布比如FCM、DEC、IDEC等。背景聚类通过挖掘数据特征之间的关系增大簇之间的距离缩小簇内间距。但随着数据量的增长描述数据的特征维度也在不断增加。如果保留数据的全部特征进行聚类不仅会增加计算量还会因为噪声和无用特征的存在导致聚类结果不理想。所以为了数据清洗并且将高维数据特征压缩为低维数据特征以便更好地进行聚类于是引入DNNDeep Natural Network深度神经网络进而有了深度聚类DEC就是深度聚类中的代表算法之一。DNN搭建AEAuto-Encoder自编码器是一种神经网络架构由encoder编码器和decoder解码器组成具有压缩和重构的功能是DEC的基础骨架。encoder是由多个全连接层激活函数组成的网络块负责将高维特征压缩为低维特征。如上图所示全连接层的隐藏计算层一共有四个神经元是参与计算的最小网络单位将所有特征输入进每个神经元每个神经元会对输入进行加权求和即线性变换其中权重w和偏置b都是可学习的参数且所有神经元独立使用W和b。隐藏层的结果经过激活函数激活后再输入进输出层的神经元加权求和后即为嵌入后的特征z可见嵌入特征z的维度和输出层神经元个数保持一致和隐藏层神经元个数无关。decoder的结构和encoder非常相似区别在于decoder的输入特征维度要比输出层神经元个数大以此完成升维任务。AE预训练AE是要服务于最后的聚类任务的一个好的AE模型对聚类结果至关重要因此需要先对AE进行预训练得到不错的结果后再将其用于聚类。encoder负责压缩特征decoder负责使用由encoder得到的嵌入特征进行重构得到与原始特征X比较即可判断AE的表现。预训练损失函数使用X和的均方误差MSEDEC算法会抛弃decoder只用encoder完成后续的聚类任务。聚类聚类任务中需要更新的参数就是簇中心在第一次聚类之前需要初始化簇中心有两个方法①随机初始化②AE预训练完成后将数据放在AE中再跑一遍这一遍只要encoder生成的嵌入特征z用 kmeans对z进行一次聚类得到初始化簇中心显然②的误差会更小所以一般都会选择②。聚类损失函数KL散度其中q是目标/近似分布p是希望q去逼近的真实分布KL散度表示真实分布p和近似分布q之间的差距。KL越小p和q之间的差距越小近似分布越逼近真实分布聚类结果越好。接下来计算近似分布Q计算z和的欧式距离但是DEC是软分布所以需要先把欧氏距离转换成软分布使用学生-t分布的概率密度公式计算软分布t分布并不是用来建模隐空间样本的分布只是距离‑相似度的转换核。相比正态分布学生 t‑分布拥有更重的尾部距离较大时相似度不会快速归零保留软分布的梯度避免训练过早变成硬分布。其中α是t分布的自由度。在DEC论文以及其他方法中α的值通常固定为1所以Q一般写成由于聚类是无监督学习压根没有真实分布所以对Q进行锐化得到P锐化的作用就是会让大的更大小的更小。loss会让Q不断的逼近P从而达到聚类的效果P也叫伪标签。总结DEC的损失函数只有聚类损失即KL散度因为在AE预训练完成之后只有encoder参与了后续的聚类。KL散度是由P和Q计算得来的P又是由Q锐化得到的所以参数更新就是Q中的嵌入特征z和簇中心但是z只是一个计算结果是由encoder计算得到的所以DEC真正需要更新的参数有两个①神经网络参数W和b②簇中心完整过程①预训练AE完成神经网络参数初始化和簇中心初始化。②将数据输入encoder得到嵌入特征z计算嵌入特征z和簇中心的欧式距离带入t分布的概率密度公式将距离转化为相关度得到近似分布Q锐化Q得到伪标签P。③计算KL散度反向传播梯度下降调整参数W、b、。④重复②③直到KL散度不再变化。注意由于DEC需要更新的参数很多而且数据量很大所以一般会采用mini-batch的策略进行模型微调也就是②③每次只选取一部分的数据输入到encoder当中参数正常更新但是P的公式中需要计算所有数据的软分布之和现在训练只是选了一部分数据只会临时记录这一部分数据的Q所以不能更新P等到一定轮次可以自己设置之后再统一计算所有的Q求和再更新P这样也会节省很多时间。DEC缺点DEC的P是由Q锐化得到的所以实际上模型微调的方向就已经人为确定了就是让相关度高的更高低的更低假如一开始的方向就是错的那一条道走到黑显然也不会有好结果。DEC的损失函数只有KL散度这会导致模型为了让loss减小调整W和b的时候可能会导致encoder压缩出扭曲的嵌入特征虽然看似loss小了但实际上是不合理的这也是DEC在模型微调环节把decoder去掉encoder没有了重构约束的结果也是IDEC改进的方向。