【论文阅读】Deep Adversarial Subspace Clustering

导读:

  本文为CVPR2018论文《Deep Adversarial Subspace Clustering》的阅读总结。目的是做聚类,方法是DASC=DSC(Deep Subspace Clustering)+GAN(Generative Adversarial Networks)。本文从以下四个方面来对论文做个简要整理:

  背景:简要介绍与本文密切相关的基础原理,DSC,GAN。

  方法:介绍论文使用的方法和细节。

  实验:实验结果和简要分析。

  总结:论文主要特色和个人体会。

一、背景

  论文方法DASC(深度对抗聚类)是基于DSC(深度子空间聚类)和GAN(生成对抗网络)的,所以,在介绍论文方法之前,对DSC和GAN做个简要介绍。

  1.DSC

  1)原理(LRR)

  首先要明确的是,整个论文的大方向是做聚类。做聚类以往已经有非常多的方法,最近几年比较流行也即DSC所采用的理论基石是低秩表示(LRR)。

  LRR理论基本思想是,对于一个数据(如图像或图像特征等)可以表示为干净数据部分和噪声部分,其中干净数据部分又可以采用字典和系数表示的形式,此时要求干净数据的系数表示部分是低秩的,噪声部分是稀疏的。此时,如果用数据本身作为字典,那么其系数部分就可以描述原始数据间的相似度。用数学公式表示如下:

  

  其中,X=[x1,x2,...xn]∈Rd*n表示原始输入数据(一般是图像的特征),Z∈Rn*n表示系数部分,E∈Rd*n表示噪声。

  那么这个式子与聚类有什么关系呢?关系是,假设待聚类的数据分布于多个线性子空间,那么通过求解上述式子的最小化问题,我们可以得到数据X间的相似度矩阵Z,有了相似度矩阵我们就可以对输入数据X=[x1,x2,...xn]进行聚类。

  因此,实现对多个d维数据xi的聚类,LRR方法采用的方法是,将xi按列组合成X,然后通过优化上述式子,得到Z,最后将Z输入到谱聚类算法中,就可以得到最终的聚类结果。

  2)方法(网络)

  一般来说,对于图像做聚类,我们采用的方法是,对图像提取特征,然后得到特征表示,组成X,然后采用LRR原理进行聚类。但是这种先提取特征再进行聚类的缺点是一个两阶段的过程,两者不能互相促进。

  因此DSC将特征提取和相似度矩阵的学习融入到一个网络中进行统一学习。重新定义符号表示,用X表示输入数据,Z表示特征,θ表示待学习的参数相似度矩阵,那么DSC的学习是最优化下面的式子:

  min ||Z-Zθ||F+λ||θ||F,以求得参数Z和θ。

  网络整体结构如下:

  

  上图所示,输入图像X,经过两层编码器进行编码(即特征转换),得到特征表示Z,然后将Z reshape成一个列向量,然后与后面变量Zθ进行全连接,再将Zθ重新reshape成与前面相对应的大小,再经过两个解码层,得到恢复出的图像。即,原图->编码得特征->解码得原图。

  3)设计

  DSC重点主要是Loss的设计,Loss由重建损失、参数正则损失、自表示损失几部分组成:

  

  2.GAN

  1)原理

  

  GAN由一个生成器和一个判别器组成。其中,生成器负责生成数据,从真实的数据中生成假的数据,期望假的数据越逼真越好。判别器负责判断接收到的数据是真实的还是产生的,即一个二分类器,期望效果比较好,也就是说真实的数据判别为真的概率更大,假的数据判别为真的概率更小。所以,在生成器期望生成的数据逼真到能够欺骗判别器而判别器期望判别能力强的情况下,通过两者的博弈,来达到生成数据能够模拟真实数据的效果。

  2)设计

  实现GAN主要是通过Loss的设计,D的输出为数据被判定为真实数据的概率,整体Loss如下:

  

  优化D:

  优化G:

  对于上述Loss的解释是,优化判别器D时,希望D判别能力强,那么就希望真实数据被判定为真的概率大,所以Ex~Pdata(x)[log(D(x))]应该比较大,D(G(Z))比较小,Ez~Pz(z)[log(1-D(G(z)))]应该比较大,所以是最大化V(D,G)。优化产生器时,期望伪造数据比较真,那么就希望Z为伪造品时,D(G(Z))比较大,也即Ez~Pz(z)[log(1-D(G(z)))]比较小。

  更多关于GAN的解释可见其他博客,这里不做更详细的解释。

  3)作用

  使得伪造的数据足够逼真,比如从噪声数据,逐步学习,得到人脸数据等。

  3.DASC

  上面介绍完了DAC和GAN,我们知道DSC已经可以做聚类了,而且聚类算比较好的了,那么还能不能再提高呢?答案是可以。

  我们知道,DSC是一步一步训练得到Z来做聚类,其中有个问题是,我们并不确定迭代到多少次效果比较好,也不能确定下次迭代就比上次得到的Z好,那么有没有什么方法能够指导无监督网络DSC的学习,让网络的训练每次都朝着效果更好的方向训练呢?

  这就是DASC所做的工作了,基础思想是,用GAN来指导DSC的学习,使其每次都朝着效果更好的方向发展。

二、方法

  本章介绍DASC的方法,从原理、生成器、判别器、训练这四个部分分别进行探讨。

  1)原理

  用GAN指导DSC的学习,就需要明确下面两个问题。

  一是,把处于同一子空间的数据,进行线性组合得到新的数据,那么新的数据依然处于该子空间。反之,处于不同子空间的数据,进行线性组合得到的数据跟原始数据处在不同子空间。(可以从下图看出)

  

  二是,处在同一子空间的数据,判别器(即分类器)分辨不出是真实数据还是伪造的数据,即输出概率为0.5。

  通过一二知,聚类效果比较好->新数据依然处于该子空间->判别器无法判别真假。即,判别器越无法判断真假数据,说明聚类效果越好。

  所以,我们要做的任务就是,通过生成器得到正(真实数据)次(线性组合得到的伪造数据)品,输入到判别器中,经过对抗学习,得到更好的相似度矩阵θ和特征表达Z,从而来得到最终的聚类结果。

  

  其中,生成器G包括DSC和正次品采样层。下面的DSC得到中间聚类结果后,将Z输入给采样层,采样层得到正次品输入给判别器D。

  2)生成器

  生成器的操作步骤是:

  11)聚类得到Ci和特征表示zi

  22)计算类Ci中zi到相对应的子空间Si的投影残差Lr。其中Si是由投影矩阵Ui来表示的,Ui(或者说Si)是判别器学习得到的,与生成器的学习无关。

  

  33)选择投影残差Lr最小的80%~90%的Ci中的数据作为正品。(因为经过DSC大部分的数据已经是正确的。这里还可以起到去噪的作用)

  44)随机线性组合计算得到与正品同样数量的次品。其中α来于[0-1]中的随机数。

  

  55)将正次品输给判别器D。

  

  3)判别器

  11)学习的参数

  学习的参数为子投影矩阵Ui(代表子空间Si),用子空间来判别是正品还是次品。原则是,投影残差Lr越小,说明是正品(文章中说能量越小)的概率越大,对判别器来说Loss的输出也应该越小。反之Loss就越大。所以投影残差Lr即与Loss成反比。

  

  22)优化

  经过上述分析,直接给出Loss优化如下。

      

              

  

  33)细节

  投影矩阵Ui和类簇Ci并不是一一对应的关系,因为每次更新都需要找一下是否子空间投影矩阵是否有变化,所以需要Ci进行竞争Ui。竞争的方式是,对每个类簇计算平均投影残差,然后选择具有最小平均残差的Ui作为自己的投影矩阵。如果该Ui具有更小平均投影残差的类簇,那么原类簇则采用对Z进行QR分解来得到自己的Ui

  判别器采用两层全连接感知机。

  4)训练

  11)DSC预训练初始化DASC网络。

  22)用Zi的QR分解初始化Ui

  33)联合交替更新DASC中的D和G,其中D更新五次,G更新一次。

三、实验

  直接贴结果吧。

  

  

  

  

  分析略。

四、总结

  1.该文章采用了DSC+GAN的方式,是GAN在无监督聚类上的首次成功运用。

  2.文章对无监督的聚类进行了定性的评估:线性组合在同一子空间(不能被判别器正确识别)说明聚类效果好。

  3.文章对无监督聚类进行了定量的评估:据子空间的投影残差越小说明属于真实数据的概率越大。

  4.在写作方面,文章采用比较新颖刁钻的方式。比如,把投影距离称为能量大小,把线性组合称为新子空间采样。换汤不换药,还显得很好喝,就比较骚了。

  本文对应论文和ppt下载地址;网盘地址

转载于:https://www.cnblogs.com/EstherLjy/p/9840016.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/426575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 值相同 hashcode_搞懂 Java equals 和 hashCode 方法

image搞懂 Java equals 和 hashCode 方法分析完 Java List 容器的源码后,本来想直接进入 Set 和 Map 容器的源码分析,但是对于这两种容器,内部存储元素的方式的都是以键值对相关的,而元素如何存放,便与 equals 和 hash…

Hadoop学习笔记

1.Hadoop安装 Apache的国内镜像地址: 地址1:http://mirror.bit.edu.cn/apache/ 地址2:https://mirrors.tuna.tsinghua.edu.cn/apache Fuck CSDN,谁给你的权利把开源的东西作为商品(下载积分)售卖&#xff1…

玩转oracle 11g(1):Oracle 11g的安装

由于工作需要,本人现在要对oracle 11g做一段攻坚战,先从安装开始 基本是傻瓜程序,网上也有大量教程 1 安装数据库软件 安装前准备工作 a.必须使用超级用户安装(adminstrator) b.服务器的名称不要有汉字 c.服务器的名称…

WEB基本架构

转载于:https://www.cnblogs.com/JerryZao/p/9843804.html

玩转oracle 11g(2):创建数据库

纯属个人操作,不懂私聊我 在程序列表中 oracle 的文件下,找到 database configuration assistant 下一步 继续下一步 定制数据库 命名测试歌谣 取消勾选,下一步 为所有用户设置密码 geyao 下一步 点击编辑归档参数 档案资料库取消勾…

玩转oracle 11g(3):配置监听

1打开oracle net configuration 2下一步 3服务名歌谣 4下一步 5主机名电脑的 6测试 输入账号密码总会把,不多说

Verilog语言实现并行(循环冗余码)CRC校验

1 前言 (1) 什么是CRC校验? CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能&#…

玩转oracle 11g(4):连接,文件操作,交互命令

1连接plsql开始学习 2 Oracle安装会自动的生成sys用户和system用户: (1) sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户默认的密码是change_on_install (2&a…

苹果4s有java系统版本_iphone4s用ios8卡吗?iPhone4s升级iOS8正式版手机体验

9月10日凌晨1点正式推出了iPhone6与iPhone6 Plus,与这两款新机一同来临的还有iOS 8正式版,在北京时间9月18日凌晨,苹果正式向用户推送了iOS 8正式版操作系统。iOS8系统在手机方面仅支持iPhone 4S及以上的设备,不少用户都担心iPhon…

软件——机器学习与Python,Python3的输出与输入

输出 用print()在括号中加上字符串,就可以向屏幕上输出指定的文字。比如输出hello, world,用代码实现如下: >>> print(hello, world)print()函数也可以接受多个字符串,用逗号“,”隔开,就可以连成一串输出&am…

玩转oracle 11g(7):导出导入数据库

oracle11g数据库导入导出: ①:传统方式——exp(导出)和(imp)导入: ②:数据泵方式——expdp导出和(impdp)导入; ③:第三方工具——PL/sql Develpoer; 一、什么是数据库导入导出? oracle11g数据库的导入/导出&#xff0c…

java学习(43):值参数传递

//值参数传递 class student02{ private int age; private int strong; public void addition(int age,int strong){ System.out.println(“年龄为”age); System.out.println(“体重为”strong); age12; strong13; } } public class test10 { public static void main(String…

java学习(44):引用参数传递

//引用参数传递 class test13 { public void seeBook(Book book){ System.out.println("我正在看书,信息如下 "); System.out.println(book.getTitle()); System.out.println(book.getPageSize()); book.setTitle(“三国演义”); book.setPageSize(5000); } } class…

Vector的使用详解

Java中 Vector的使用详解 Vector 可实现自动增长的对象数组。 java.util.vector提供了向量类(Vector)以实现类似动态数组的功能。 创建了一个向量类的对象后,可以往其中随意插入不同类的对象,即不需顾及类型也不需预先选定向量的容量,并可以方…

java学习(45):无参无返回

/*如何定义 Java 中的方法 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块。 一般情况下,定义一个方法的语法是:访问修饰符 返回值类型 方法名(参数列表){方法体} 其中: 1、 访问修饰符:…

java 内部thread_Java代码质量改进之:使用ThreadLocal维护线程内部变量

在上文中,《Java代码质量改进之:同步对象的选择》,我们提出了一个场景:火车站有3个售票窗口,同时在售一趟列车的100个座位。我们通过锁定一个靠谱的同步对象,完成了上面的功能。现在,让我们反过…

java学习(46):无参带返回

/*1、 如果方法的返回类型为 void ,则方法中不能使用 return 返回值! *2、 方法的返回值最多只能有一个,不能返回多个值 *3、 方法返回值的类型必须兼容,例如,如果返回值类型为 int ,则不能返回 String 型值…

Luogu 4284 [SHOI2014]概率充电器

BZOJ 3566 树形$dp$ 概率期望。 每一个点的贡献都是$1$,在本题中期望就等于概率。 发现每一个点要通电会在下面三件事中至少发生一件: 1、它自己通电了。 2、它的父亲给它通电了。 3、它的儿子给它通电了。 那么我们设$f_i$表示它的父亲给它通电的概率&…

java 域的隐藏_Windows Server 2008R2\2012\2016使用域策略自定义隐藏指定驱动器

Windows Server 2008R2\2012\2016使用域策略自定义隐藏指定驱动器最近在做项目的时候需要对Win7客户端的部分驱动器进行隐藏,但域策略默认的隐藏选项不能满足需求,根据微软官方文档https://support.microsoft.com/zh-cn/help/231289/using-group-policy-…

java学习(47):带参无返回

//带参无返回值 /*注意: 1、 调用带参方法时,必须保证实参的数量、类型、顺序与形参一一对应 2、 调用方法时,实参不需要指定数据类型 3、 方法的参数可以是基本数据类型,如 int、double 等,也可以是引用数据类型&am…