文章链接:https://arxiv.org/abs/2002.01633
源码链接:https://github.com/bdy9527/SDCN

TL;DR

本文提出了一种结构深度聚类网络(SDCN),将结构信息集成到深度聚类中。设计了一个传递算子将autoencoder学习到的表示传递到相应的GCN层,并设计了双重自监督机制来统一这两种不同的深层神经结构并指导整个模型的更新。通过这种方式,从低阶到高阶的多重数据结构,自然地与自动编码器学习到的多重表示相结合。

模型/算法

如图所示。首先构造一个基于原始数据的KNN(K-Nearest Neighbor)图。然后将原始数据和KNN图分别输入到自动编码器和GCN中。将自动编码器的每一层与GCN的相应层连接起来,通过传递操作符将特定于自动编码器的表示集成到结构感知的表示中。用一种双重自我监督机制来监督自动编码器和GCN的训练进度。

kNN Graph

构建KNN图两种常用的方法:

  • Heat Kernel(用于连续数据)

    Sij=exixj2t\mathrm{S}_{i j}=e^{-\frac{\left\|x_{i}-\mathrm{x}_{j}\right\|^{2}}{t}}

  • Dot-product(用于离散数据)

    Sij=xjTxi\mathrm{S}_{i j}=\mathrm{x}_{j}^{T} \mathrm{x}_{i}

在计算相似矩阵后,选取每个样本的top-K个相似点作为其近邻,构造无向k近邻图。这就可以从非图数据中得到邻接矩阵A。

DNN Module

构造一个有LL 层的autoencoder,H()H(\ell) 表示 encoder 的第\ell层:

H()=ϕ(We()H(1)+be())\mathbf{H}^{(\ell)}=\phi\left(\mathbf{W}_{e}^{(\ell)} \mathbf{H}^{(\ell-1)}+\mathbf{b}_{e}^{(\ell)}\right)

H(0)H(0)为原始数据XX

在encoder部分之后是decoder部分,decoder部分也是几个全连接层来重构输入数据:

H()=ϕ(Wd()H(1)+bd())\mathbf{H}^{(\ell)}=\phi\left(\mathbf{W}_{d}^{(\ell)} \mathbf{H}^{(\ell-1)}+\mathbf{b}_{d}^{(\ell)}\right)

decoder的输出是原始数据的重建误差:X^=H(L)\hat{X}=H^{(L)},目标函数是:

Lres=12Ni=1Nxix^i22=12NXX^F2\mathcal{L}_{r e s}=\frac{1}{2 N} \sum_{i=1}^{N}\left\|\mathbf{x}_{i}-\hat{\mathbf{x}}_{i}\right\|_{2}^{2}=\frac{1}{2 N}\|\mathbf{X}-\hat{\mathbf{X}}\|_{F}^{2}

GCN Module

常规的LL 层图卷积网络,最后一层为Softmax多分类层:

Z=softmax(D~12A~D~12Z(L)W(L))Z=\operatorname{softmax}\left(\widetilde{\mathbf{D}}^{-\frac{1}{2}} \widetilde{\mathbf{A}} \widetilde{\mathbf{D}}^{-\frac{1}{2}} \mathbf{Z}^{(L)} \mathbf{W}^{(L)}\right)

Dual Self-Supervised Module

Student’s t-distribution作为内核来衡量数据的表示向量hih_i和聚类中心向量uiu_i 的相似性:

qij=(1+hiμj2/v)v+12j(1+hiμj2/v)v+12q_{i j}=\frac{\left(1+\left\|\mathbf{h}_{i}-\boldsymbol{\mu}_{j}\right\|^{2} / v\right)^{-\frac{v+1}{2}}}{\sum_{j^{\prime}}\left(1+\left\|\mathbf{h}_{i}-\boldsymbol{\mu}_{j^{\prime}}\right\|^{2} / v\right)^{-\frac{v+1}{2}}}

hih_iH(L)H(L)的第ii 行向量,uiu_i 是预训练autoencoder学习到的向量表示的K-means初始化中心。qijq_{ij}表示样本ii分配给类别jj 可能性。

在获得聚类结果分布QQ后,目标是通过学习高置信度赋值来优化数据表示。具体来说,希望使数据表示更接近聚类中心,从而提高聚类的内聚性。因此,计算目标分布PP 如下:

pij=qij2/fjjqij2/fjp_{i j}=\frac{q_{i j}^{2} / f_{j}}{\sum_{j^{\prime}} q_{i j^{\prime}}^{2} / f_{j^{\prime}}}

其中fj=iqijf_{j}=\sum_{i} q_{i j}是soft cluster frequencies。在目标分布PP中,QQ中的每一个赋值都被平方并归一化,使赋值具有更高的置信度,从而得到如下目标函数:

Lclu=KL(PQ)=ijpijlogpijqij\mathcal{L}_{c l u}=K L(P \| Q)=\sum_{i} \sum_{j} p_{i j} \log \frac{p_{i j}}{q_{i j}}

目标分布PP通过最小化QQPP分布之间的KL散度损失,可以帮助DNN模块更好地表示聚类任务,即,使数据表示更接近集群中心。这被认为是一种自我监督机制,因为目标分布PP是由分布QQ来计算的,而PP分布反过来又监督分布QQ的更新。

GCN模块也提供一个聚类分配分布ZZ,因此可以使用分布PP对分布ZZ进行监督:

Lgcn=KL(PZ)=ijpijlogpijzij\mathcal{L}_{g c n}=K L(P \| Z)=\sum_{i} \sum_{j} p_{i j} \log \frac{p_{i j}}{z_{i j}}

整体模型的总损失函数如下:

L=Lres+αLclu+βLgcn\mathcal{L}=\mathcal{L}_{r e s}+\alpha \mathcal{L}_{c l u}+\beta \mathcal{L}_{g c n}

选择分布ZZ中的 soft assignments 作为最终的聚类结果。因为GCN学习的表示包含两种不同的信息。分配给样本ii 的标签为:

ri=argmaxjzijr_{i}=\underset{j}{\arg \max } z_{i j}

整体算法流程如下:

Experiment details

联系作者