使用GAN进行半监督分类(GAN for Semi-Supervised Classification)

对于一个用于半监督分类(后简称分类)的GAN来说,最重要的是Generator(生成器),Discriminator(判别器)只有一个作用:训练生成器。我们来看看,在此分类问题中,判别器将提供什么样的帮助。

Semi-Supervised GAN: the 200 Words Summary

首先来看一个“Cluster”聚类的概念,想象一下你的分类任务就是只含有两个不同特征的点集,它们的分布看起来是这样的:
在这里插入图片描述
这里有两个圆,分别代表两个类别:橙色 和 蓝色,如果是这样的一个任务,我相信不用深度学习方法就能解决。但是如果所被标记的点只有这么一些呢?
在这里插入图片描述

如果仅仅只是用这一小部分标记(labeled)数据来训练你的模型,效果应该不会太好。因此这时候就需要想到GAN:当你向GAN提供整个数据集(包括违背标记的灰色点),它能很轻易地生成处于两个环内的点。然后,用标记过的点将两个环划分为两个类别,这样就完成了!

Discriminator to Classifier

现在我们来看看这一切实际应该怎么操作[1, 2],假设有一个K类的图像分类问题,让我们指定一个“假”图像作为一个新类别加入到类别中,这样类别就增加到了K+1个,这就意味着有一部分训练数据并不来自于训练集。听起来很熟悉吧?事实上,我们可以用得到的具有K+1个类的分类器来代替我们在无监督GAN中的判别器,如果图像被分类为前K类之一,我们将认为它是 “真实的”,而K+1类则保留给分类器认为是由生成器生成的图像。

生成器的训练方式基本没有发生改变:他的目标是努力让分类器(原判别器)将其生成的“假”图像识别为前K类,即让分类器(原判别器)认为其生成的图像为“真”图像。

判别…分类器将有更多的任务,会有三种类型的数据输入到分类器:

  • 被标记的训练数据(希望分类器分类成正确类别)
  • 未被标记的训练数据(只希望分类器能分类成前K个类别)
  • 生成器生成的数据(希望分类器能分类成K+1)

除了有两种真实数据需要处理外(对真实数据的损失函数也有两种分布),半监督分类器的训练方式和半监督判别器的训练方式基本相同。

我们再来谈一谈生成器,无监督GAN的表现令人印象深刻,那么就会有人问:半监督问题下,生成器能够被训练的有多好?(即使分类问题中我们更加关心分类器)

Good GAN, Bad GAN

事实证明,需要一个相当 "糟糕 "的生成器才能使分类器获得良好的性能。为了理解为什么会出现这种情况,我们要回到我们的两个圆圈的例子:
在这里插入图片描述

一个理想的无监督生成器会产生什么样的数据?当然,它会产生更多的点来组成两个圆盘。然而,如果你看一下上面的图片,就不难说服自己,没有足够的未标记的点填充到圆盘中。我们无法利用它来进行无监督分类,如果一个好的生成器对分类任务没有帮助,那么是什么呢?一个坏的生成器。

那什么是坏的生成器?一个能输出随机噪声的生成器就是坏的,但这对我们的分类没有任何帮助。相反,我们要考虑一个complement(互补)的生成器:一个能产生与特征空间中的真实点相匹配的数据点的发生器。例如,位于两个圆盘之间的点。
在这里插入图片描述
在两个圆圈之间产生的 "假 "点构成的环将帮助分类器将真实的点分配到正确的类别中:凡是真实的且与中心的距离小于假点环的,都是蓝色,凡是真实的且与中心的距离大于假点环的,都是橙色。换句话说,complement(互补)生成器有助于下细化类别之间的决策边界。

当查看我为猫和狗的二元分类而编写和训练的半监督GAN时,我们将看到一些在高维的特征空间中生成的图像的真实世界的例子。
项目链接:https://github.com/opetrova/SemiSupervisedPytorchGAN

参考文献:
[1] https://github.com/opetrova/SemiSupervisedPytorchGAN

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
graph convolutional networks (GCNs)是一种用于半监督分类的图卷积网络。GCNs适用于处理图数据,其中图由节点和节点之间的连接边组成。半监督分类是指在一些标记有类别的节点样本的基础上,对未标记的节点进行分类。以下是关于GCNs在半监督分类中的代码解释: GCNs的代码通常包含以下主要部分: 1. 数据准备:首先,我们需要准备图数据。这包括节点特征矩阵和图的邻接矩阵。节点特征矩阵是一个二维矩阵,每一行对应一个节点的特征向量。邻接矩阵描述节点之间的连接关系。 2. 定义模型:接下来,我们定义GCNs的模型结构。这包括定义卷积层、池化层和分类层等。卷积层用于在图上学习节点的特征表达,池化层用于减少节点的数量,分类层用于进行节点分类。 3. 前向传播:在GCNs中,前向传播的过程是通过迭代卷积层来逐步改进节点特征。我们可以通过相邻节点的特征加权平均来更新每个节点的特征。这个过程被称为图卷积。 4. 反向传播与优化:在前向传播后,我们计算模型预测结果与真实标签之间的损失。然后,使用反向传播算法计算梯度,并通过优化算法(例如随机梯度下降)更新模型的参数,以最小化损失。 5. 训练和评估:使用带有已标记节点标签的图数据集进行模型的训练。训练的目标是使模型能够准确预测未标记节点的类别。评估阶段,我们在测试集上评估模型的性能,通常使用准确率等指标来度量分类结果的质量。 总的来说,GCNs的代码实现主要涉及图数据的准备、模型定义、前向传播、反向传播与优化以及训练和评估等步骤。通过这些步骤,我们可以使用GCNs对图数据进行半监督分类任务。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值