SpectralNet: Spectral Clustering Using Deep Neural Networks

论文:ICLR 2018
代码:tensorflow 1.

文章中的训练好的SpectralNet可以实现将输入点到输出图拉普拉斯矩阵的本征空间的映射,并且实现聚类。训练SpectralNet包含三个部分:

  1. 通过AutoEncoder网络对输入数据进行编码;使用孪生网络–Siamese network,对已编码的数据进行距离度量学习,得到自适应的距离;

  2. 通过在强制正交性的同时优化谱聚类目标,利用神经网络无监督地学习映射 F θ F_\theta Fθ;

  3. 将得到的特征再用k-means分类得到最终的结果。

1. Siamese 网络

Siamese网络通常训练一组相似(正)和不相似(负)的数据点。 当标记数据可用时,可以基于标记信息选择这样的对(即,具有相同标记的点对被认为是正的,而具有不同标记的点对被认为是负的)。 在未标记的数据集这种情况下,可以直接从欧几里德距离或图距来学习关系矩阵例如通过“标记”点 x i x_i xi; 如果 ∣ ∣ x i − x j ∣ ∣ ||x_i-x_j|| xixj很小则 x j x_j xj为正,否则为负。 在文章中,我们从每个点的最近邻居构建正对,负对由远距离较大的点构成。 因此,Siamese网络被训练以学习自适应最近邻居度量。

  • Siamese 是一种神经网络的框架,而不是具体的某种网络,就像seq2seq一样,具体实现上可以使用RNN也可以使用CNN。

  • Siamese network就是“连体的神经网络”,神经网络的“连体”是通过共享权值来实现的。(共享权值即左右两个神经网络的权重一模一样)

  • siamese network的作用是衡量两个输入的相似程度。孪生神经网络有两个输入(Input1 and Input2),将两个输入feed进入两个神经网络(Network1 and Network2),这两个神经网络分别将输入映射到新的空间,形成输入在新的空间中的表示。通过Loss的计算,评价两个输入的相似度。

siamese network
如果左右两边不共享权值,而是两个不同的神经网络,称为pseudo-siamese network,伪孪生神经网络。
pseudo-siamese network

孪生神经网络用于处理两个输入**“比较类似"的情况。伪孪生神经网络适用于处理两个输入"有一定差别”**的情况。比如,我们要计算两个句子或者词汇的语义相似度,使用siamese network比较适合;如果验证标题与正文的描述是否一致(标题和正文长度差别很大),或者文字是否描述了一幅图片(一个是图片,一个是文字),就应该使用pseudo-siamese network。也就是说,要根据具体的应用,判断应该使用哪一种结构,哪一种Loss。

损失函数

Contrastive Loss
L = 1 2 N ∑ n = 1 N y d 2 + ( 1 − y ) m a x ( m a r g i n − d , 0 ) 2 L=\frac{1}{2N}\sum_{n=1}^Nyd^2+(1-y)max(margin-d,0)^2 L=2N1n=1Nyd2+(1y)max(margind,0)2

d = ∣ ∣ a n − b n ∣ ∣ 2 d=||a_n - b_n||_2 d=anbn2代表两个样本特征的欧氏距离,y为两个样本是否匹配的标签,y=1代表两个样本相似或者匹配,y=0则代表不匹配,margin为设定的阈值。

这种损失函数最初来源于Yann LeCun的Dimensionality Reduction by Learning an Invariant Mapping,主要是用在降维中,即本来相似的样本,在经过降维(特征提取)后,在特征空间中,两个样本仍旧相似;而原本不相似的样本,在经过降维后,在特征空间中,两个样本仍旧不相似。

观察上述的contrastive loss的表达式可以发现,这种损失函数可以很好的表达成对样本的匹配程度,也能够很好用于训练提取特征的模型。当y=1(即样本相似)时,损失函数只剩下 ∑ y d 2 \sum yd^2 yd2,即原本相似的样本,如果在特征空间的欧式距离较大,则说明当前的模型不好,因此加大损失。而当y=0时(即样本不相似)时,损失函数为 ∑ ( 1 − y ) m a x ( m a r g i n − d , 0 ) 2 \sum (1-y)max(margin-d,0)^2 (1y)max(margind,0)2,即当样本不相似时,其特征空间的欧式距离反而小的话,损失值会变大,这也正好符号我们的要求。

从 Siamese网络输出的是两个输入数据相关的特征向量,想要得到相似度需要借助距离函数,比如欧式距离、Jaccard距离,本文使用的是欧氏距离,并且用此距离代替谱聚类中邻接矩阵 高斯核函数里的欧式距离。

代码

孪生网络入门(下) Siamese Net分类服装MNIST数据集(pytorch)

孪生网络实验记录_狂小p只和傻子玩的博客

2. SpectralNet

原始特征X,低维特征Y,相似度矩阵W。使用神经网络从X学习低维特征Y.

L S p e c t r a l = 1 m 2 ∑ i , j = 1 m W i , j ∣ ∣ y i − y j ∣ ∣ 2 L_{Spectral}=\frac{1}{m^2}\sum_{i,j=1}^m W_{i,j}||y_i-y_j||^2 LSpectral=m21i,j=1mWi,jyiyj2

为了防止所有的点在网络映射中被分组到同一个簇中,输出的y在期望中必须是标准正交的。

Algorithm 1: SpectralNet training

参考连接:
bestrivern-孪生神经网络
weixin_45492636-孪生神经网络
autocyz–Contrastive Loss

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值