论文阅读《Adversarial Multiview Clustering Networks With Adaptive Fusion》

本文介绍了一种新颖的深度聚类方法Adversarial Multiview Clustering Network (AMvC),它通过对抗生成和自适应融合解决多视图一致性问题。AMvC利用多视图编码器、生成对抗模块和深度聚类模块,通过L1,2范数正则化提升聚类性能。核心在于编码器学习共享潜在表示,生成器增强一致性,鉴别器确保鲁棒性,以及深度嵌入聚类层优化聚类结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


论文信息

论文标题:Adversarial Multiview Clustering Networks With Adaptive Fusion
论文作者:Qianqian Wang,Zhiqiang Tao,Wei Xia,Quanxue Gao,Xiaochun Cao,Licheng Jiao
论文来源: 2022,TNNLS
论文地址:download
论文代码:download


一、Abstract

挑战:现有的深度多视图聚类(MVC)方法主要基于自动编码器网络,该网络寻找公共潜在变量来分别重建每个视图的原始输入。然而,由于特定于视图的重建损失,在多个视图上提取一致的潜在表示以进行聚类是一个挑战。
AMvC概述:为了应对这一挑战,本文提出了对抗式MVC(AMvC)网络。所提出的AMvC根据不同视图之间的融合潜在表示生成每个视图的样本,以鼓励更一致的聚类结构。具体来说,使用多视图编码器从所有视图中提取潜在描述,并使用相应的生成器生成重构样本。将判别网络和均方损失联合用于训练多视图编码器和生成器,以平衡每个视图潜在表示的清晰度和一致性。此外,还提出了一种自适应融合层来获得共享的潜在表示,并在该层上施加了聚类损失和 l 1 , 2 \mathcal{l}_{1,2} l1,2-norm约束,以提高聚类性能和区分潜在空间。

二、Introduction

然而,现有的基于自动编码器的deep-MVC方法有一些局限性:
1) 它们仅利用重建损失来学习重建样本与原始样本之间的一致性信息,而重建损失是视图特有的,很难在多个视图上提取一致的潜在表示进行聚类。
2) 共享表示可能没有足够的区分能力进行聚类。
3) 这些方法中使用了各种融合方法,但它们忽略了不同的视图通常在重要性方面有所不同。

三、Adversarial Multiview Clustering Network

l 1 , 2 \mathcal{l}_{1,2} l1,2-norm正则化使得共享潜在表示更容易区分。
在这里插入图片描述我们构建了由三个子模块组成的AMvC网络:多视图编码器模块E、多视图生成对抗模块(包含生成器G和鉴别器D)和深度聚类模块(包含加权自适应融合层和深度嵌入聚类层)。
在这里插入图片描述在这里插入图片描述

(一)多视图编码器模块

在多视图编码器网络 E = { E 1 , … , E v , … , E V } E=\left\{E_{1}, \ldots, E_{v}, \ldots, E_{V}\right\} E={E1,,Ev,,EV}中,对于每个视图,都有M层独立的完全连接网络和N层完全连接的共享参数网络。独立图层用于处理每个视图的不同特征尺寸。对于 v t h vth vth视图 X v X^{v} Xv,编码器 E v E_{v} Ev旨在学习潜在表示 Z v = { z 1 ( v ) , z 2 ( v ) , … , z n ( v ) } ( Z v ∈ R m × n ) \mathbf{Z}^{v}=\left\{z_{1}^{(v)}, z_{2}^{(v)}, \ldots, z_{n}^{(v)}\right\}\left(\mathbf{Z}^{v} \in R^{m \times n}\right) Zv={z1(v),z2(v),,zn(v)}(ZvRm×n)。具体而言,它将 d v d_{v} dv维输入数据 x i ( v ) x_{i}^{(v)} xi(v)映射到低维表示 z i ( v ) z_{i}^{(v)} zi(v)。这个映射可以表示为 Z v = E v ( X v ; θ E v ) \mathbf{Z}^{v}=E_{v}\left(\mathbf{X}^{v} ; \theta_{E_{v}}\right) Zv=Ev(Xv;θEv) E v E_{v} Ev表示 v t h vth vth视图的编码网络,其参数为 θ E v \theta_{E_{v}} θEv

(二)多视图生成对抗模块

多视图生成器: G = { G 1 , … , G v , … , G V } G=\left\{G_{1}, \ldots, G_{v}, \ldots, G_{V}\right\} G={G1,,Gv,,GV}
多视图鉴别器: D = { D 1 , … , D v , … , D V } D=\left\{D_{1}, \ldots, D_{v}, \ldots, D_{V}\right\} D={D1,,Dv,,DV}
多视图生成器网络由具有共享参数的N层全连接网络和每个视图的M层独立全连接网络组成,可以生成所有视觉重建样本,并具有每个视图对应的潜在表示。
鉴别器网络由V个完全连接的层网络组成。每个鉴别器 D v D_{v} Dv由三个完全连接的层组成,我们应该注意, x i ( v ) x_{i}^{(v)} xi(v)是真实实例,而 x ^ i ( v ) \hat x_{i}^{(v)} x^i(v)是生成的样本。 D v D_{v} Dv将判别结果返回给生成器 G v G_{v} Gv,以更新其参数。通过这种方式,鉴别器作为正则化器来指导我们的多视点编码器网络E的训练,以提高嵌入表示的鲁棒性,并有效地解决过拟合问题。

(三)深度聚类模块

为了获得共享的潜在表示Z,我们在模型中引入了加权自适应融合层FU,它将V个潜在表示 Z v Z_{v} Zv自适应地融合到公共表示 Z = f ( { Z v } v = 1 V ; β ) Z=f \left(\left\{ Z^{v}\right \}_{v=1}^{V};\beta \right) Z=f({Zv}v=1V;β) f ( ⋅ ; β ) f(·;β) f(;β)表示融合函数。为了寻找一个聚类友好的潜在空间,我们在网络中开发了一个独特的深度嵌入聚类层 C U CU CU。嵌入的聚类层在每次迭代后都包含新的聚类质心。我们使用共享表示Z和簇质心 { μ j } j = 1 k \left\{\mu_{j}\right\}_{j=1}^{k} {μj}j=1k来获得当前数据分布和目标数据分布。此外,我们利用当前数据分布和目标数据分布的 K u l l b a c k – L e i b l e r ( K L ) Kullback–Leibler(KL) KullbackLeibler(KL)散度作为目标函数,迭代更新共享表示Z和簇质心 { μ j } j = 1 k \left\{\mu_{j}\right\}_{j=1}^{k} {μj}j=1k

(四)总体目标函数

min ⁡ E , G , β , μ max ⁡ D L A E + λ 1 L G A N + λ 2 L C L U + λ 3 L 12 \min _{E, G, \beta, \mu} \max _{D} \mathcal{L}_{\mathrm{AE}}+\lambda_{1} \mathcal{L}_{\mathrm{GAN}}+\lambda_{2} \mathcal{L}_{\mathrm{CLU}}+\lambda_{3} \mathcal{L}_{12} E,G,β,μminDmaxLAE+λ1LGAN+λ2LCLU+λ3L12
包括四个部分:自动编码器(AE)损失,GAN损失,聚类损失CLU,1,2-范数正则化。
L A E = ∑ v = 1 V ∥ X v − X ^ v ∥ F 2 \mathcal{L}_{\mathrm{AE}}=\sum_{v=1}^{V}\left\|\mathbf{X}^{v}-\hat{\mathbf{X}}^{v}\right\|_{\mathrm{F}}^{2} LAE=v=1VXvX^vF2

L G A N = ∑ v = 1 V ( E x v ∼ P ( X v ) [ log ⁡ D v ( x v ) ] + E x ^ v ∼ P ( X ^ v ) [ log ⁡ ( 1 − D v ( x ^ v ) ) ] ) \mathcal{L}_{\mathrm{GAN}}=\sum_{v=1}^{V}\left(\mathbb{E}_{x^{v} \sim P\left(\mathbf{X}^{v}\right)}\left[\log D_{v}\left(x^{v}\right)\right]+\mathbb{E}_{\hat{x}^{v} \sim P\left(\hat{\mathbf{X}}^{v}\right)}\left[\log \left(1-D_{v}\left(\hat{x}^{v}\right)\right)\right]\right) LGAN=v=1V(ExvP(Xv)[logDv(xv)]+Ex^vP(X^v)[log(1Dv(x^v))])
实际数据分布和生成的数据分布

Z = f ( { Z v } v = 1 V ; β ) = ∑ v = 1 V β v Z v / ∑ v = 1 V β v \mathbf{Z}=f\left(\left\{\mathbf{Z}^{v}\right\}_{v=1}^{V} ; \beta\right)=\sum_{v=1}^{V} \beta_{v} \mathbf{Z}^{v} / \sum_{v=1}^{V} \beta_{v} Z=f({Zv}v=1V;β)=v=1VβvZv/v=1Vβv

L C L U = ∑ i ∑ j p i j log ⁡ p i j q i j \mathcal{L}_{\mathrm{CLU}}=\sum_{i} \sum_{j} p_{i j} \log \frac{p_{i j}}{q_{i j}} LCLU=ijpijlogqijpij

L 12 = ∥ Z ∣ 1 , 2 = ∑ i ( ∑ j ∣ z i j ∣ ) 2 \mathcal{L}_{12}=\|\left.\mathbf{Z}\right|_{1,2}=\sqrt{\sum_{i}\left(\sum_{j}\left|z_{i j}\right|\right)^{2}} L12=Z1,2=i(jzij)2

(五)算法伪代码

算法伪代码

image-to-Image Translation with Conditional Adversarial Networks(条件对抗网络的图像到图像转换)是一种用于图像转换的深度学习方法。它通过训练一个生成器网络和一个判别器网络来实现图像的转换。生成器网络将输入图像转换为目标图像,而判别器网络则试图区分生成的图像和真实的目标图像。 这种方法的关键是使用对抗性训练。生成器网络和判别器网络相互竞争,以提高生成器网络生成逼真图像的能力。生成器网络通过最小化判别器网络对生成的图像的判别误差来学习生成逼真的图像。判别器网络则通过最大化对生成的图像和真实图像的判别能力来学习区分真实图像和生成图像。 在条件对抗网络中,生成器网络和判别器网络都接收额外的条件输入,以指导图像转换的过程。这个条件输入可以是任何与图像转换任务相关的信息,例如标签、语义分割图或其他图像。 通过训练生成器网络和判别器网络,条件对抗网络可以实现各种图像转换任务,例如将黑白图像转换为彩色图像、将马的图像转换为斑马的图像等。 这是一个使用条件对抗网络进行图像到图像转换的示例代码: ```python import tensorflow as tf from tensorflow.keras import layers # 定义生成器网络 def build_generator(): # 定义生成器网络结构 generator = tf.keras.Sequential() generator.add(layers.Conv2DTranspose(64, (4, 4), strides=(2, 2), padding='same', input_shape=(256, 256, 3))) generator.add(layers.BatchNormalization()) generator.add(layers.ReLU()) generator.add(layers.Conv2DTranspose(32, (4, 4), strides=(2, 2), padding='same')) generator.add(layers.BatchNormalization()) generator.add(layers.ReLU()) generator.add(layers.Conv2DTranspose(3, (4, 4), strides=(2, 2), padding='same', activation='tanh')) return generator # 定义判别器网络 def build_discriminator(): # 定义判别器网络结构 discriminator = tf.keras.Sequential() discriminator.add(layers.Conv2D(64, (4, 4), strides=(2, 2), padding='same', input_shape=(256, 256, 3))) discriminator.add(layers.LeakyReLU()) discriminator.add(layers.Conv2D(128, (4, 4), strides=(2, 2), padding='same')) discriminator.add(layers.BatchNormalization()) discriminator.add(layers.LeakyReLU()) discriminator.add(layers.Conv2D(256, (4, 4), strides=(2, 2), padding='same')) discriminator.add(layers.BatchNormalization()) discriminator.add(layers.LeakyReLU()) discriminator.add(layers.Conv2D(1, (4, 4), strides=(1, 1), padding='same')) return discriminator # 定义条件对抗网络 class cGAN(tf.keras.Model): def __init__(self, generator, discriminator): super(cGAN, self).__init__() self.generator = generator self.discriminator = discriminator def compile(self, g_optimizer, d_optimizer, loss_fn): super(cGAN, self).compile() self.g_optimizer = g_optimizer self.d_optimizer = d_optimizer self.loss_fn = loss_fn def train_step(self, real_images, labels): # 生成器网络生成假图像 with tf.GradientTape() as tape: fake_images = self.generator([real_images, labels], training=True) # 判别器网络判别真实图像和假图像 real_output = self.discriminator([real_images, labels], training=True) fake_output = self.discriminator([fake_images, labels], training=True) # 计算生成器和判别器的损失 g_loss = self.loss_fn(fake_output, tf.ones_like(fake_output)) d_loss_real = self.loss_fn(real_output, tf.ones_like(real_output)) d_loss_fake = self.loss_fn(fake_output, tf.zeros_like(fake_output)) d_loss = d_loss_real + d_loss_fake # 更新生成器和判别器的参数 g_gradients = tape.gradient(g_loss, self.generator.trainable_variables) d_gradients = tape.gradient(d_loss, self.discriminator.trainable_variables) self.g_optimizer.apply_gradients(zip(g_gradients, self.generator.trainable_variables)) self.d_optimizer.apply_gradients(zip(d_gradients, self.discriminator.trainable_variables)) return {"g_loss": g_loss, "d_loss": d_loss} # 创建生成器和判别器 generator = build_generator() discriminator = build_discriminator() # 创建条件对抗网络 cgan = cGAN(generator, discriminator) # 编译条件对抗网络 cgan.compile( g_optimizer=tf.keras.optimizers.Adam(learning_rate=0.0002, beta_1=0.5), d_optimizer=tf.keras.optimizers.Adam(learning_rate=0.0002, beta_1=0.5), loss_fn=tf.keras.losses.BinaryCrossentropy(from_logits=True) ) # 训练条件对抗网络 cgan.fit(dataset, epochs=100) # 使用生成器网络进行图像转换 input_image = ... label = ... output_image = generator([input_image, label]) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值