Kang M., Park J. Contrastive Generative Adversarial Networks. arXiv preprint arXiv 2006.12681, 2020.

如何将对比损失和GAN结合在一起呢?

主要内容

还是老问题, 结合对比学习就是如何构造正负样本的问题.

首先看图c, 本文ContraGAN提取特征的方式为\(D_{\phi_1}(x)\), 这部分是判别器的encoder部分, 即除最后一个全连接层的部分. 之后再经过projection (h)(这个是从SimCLR中启发得来的东西)得到最后的用于计算对比损失的特征\(l(x)=h(G_{\phi_1}(x))\). 另一部分的特征是直接通过样本标签得来的, 通过一个class embedding (e), 获得对应的特征\(e(y)\).

于是第一阶段的"对比损失"就出炉了

\[\tag{7}
\ell(x_i,y_i;\tau) =-\log \frac{\exp(l(x_i)^Te(y_i)/\tau)}{\exp(l(x_i)^Te(y_i)/\tau)+ \sum_{k\not= i}^m \exp(l(x_i)^Tl(x_k)/\tau)},
\]

其中\(x_i, x_k\)来自于一个batch的数据\(\{x_1, \ldots, x_m\}\), \(\tau\)代表temperature. 此对比损失与SimCLR中的差别仅在正样本对上, SimCLR中构造正样本对是\(l(\mathcal{T}(x_i))\), \(l(\mathcal{T}'(x_i))\), 即通过augmentation来构造正样本对. 这里的话是通过标签来构造正样本对. 显然最小化(7)式需要使得\(x_i\)的特征靠近\(e(y_i)\), 以及不同样本特征远离彼此. 这就造成了一个问题, 实际上作者是希望同一类的样本的特征是靠近的, 但(7)是的分母部分是背离这一点的(虽然分子是符合这一点的), 为此, 作者又在分子上加了他们的cosine相似度:

\[\tag{8}
\ell_{2C}(x_i,y_i;\tau) =-\log \frac{\exp(l(x_i)^Te(y_i)/\tau)+ \sum_{k=1}^m 1_{y_k=y_i} \exp(l(x_i)^Tl(x_k)/\tau)}{\exp(l(x_i)^Te(y_i)/\tau)+ \sum_{k\not= i}^m \exp(l(x_i)^Tl(x_k)/\tau)}.
\]

说白了, 这不就是彻彻底底的希望最大化类间距离, 最小化类内距离, 连类内中心都选好了(\(e(y_i)\), 虽然这个中心是可学习的).

作者说是这个idea受到一个互信息理论下界的启发, 但是我感觉没啥特别的意义, 这里就不贴了.

注: 总感觉没有体现出contrastive的特点, 从算法中可以看到, 计算训练损失, 真实的样本和伪造的样本是独立的. 但是仔细想想, 我们的目的不是训练一个好的生成器, 使其构造的图片和真实图片相近, 所以怎么也应该是真实图片和构造图片之间的对比. 当然, 困难在于我们不知道生成器所生成的图片所对应的真实的图片是怎样的, 不过我始终觉得这种处理方法没有发挥出contrastive的作用.

代码

作者整理了许多GAN模型.

原文代码

Contrastive Generative Adversarial Networks的更多相关文章

  1. CIAGAN: Conditional Identity Anonymization Generative Adversarial Networks阅读笔记

    CIAGAN: Conditional Identity Anonymization Generative Adversarial Networks 2020 CVPR 2005.09544.pdf ...

  2. StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks 论文笔记

    StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks  本文将利 ...

  3. 论文笔记之:Semi-Supervised Learning with Generative Adversarial Networks

    Semi-Supervised Learning with Generative Adversarial Networks 引言:本文将产生式对抗网络(GAN)拓展到半监督学习,通过强制判别器来输出类 ...

  4. 《Self-Attention Generative Adversarial Networks》里的注意力计算

    前天看了 criss-cross 里的注意力模型  仔细理解了  在: https://www.cnblogs.com/yjphhw/p/10750797.html 今天又看了一个注意力模型 < ...

  5. Paper Reading: Perceptual Generative Adversarial Networks for Small Object Detection

    Perceptual Generative Adversarial Networks for Small Object Detection 2017-07-11  19:47:46   CVPR 20 ...

  6. (转)Introductory guide to Generative Adversarial Networks (GANs) and their promise!

    Introductory guide to Generative Adversarial Networks (GANs) and their promise! Introduction Neural ...

  7. SalGAN: Visual saliency prediction with generative adversarial networks

    SalGAN: Visual saliency prediction with generative adversarial networks 2017-03-17 摘要:本文引入了对抗网络的对抗训练 ...

  8. Generative Adversarial Networks,gan论文的畅想

    前天看完Generative Adversarial Networks的论文,不知道有什么用处,总想着机器生成的数据会有机器的局限性,所以百度看了一些别人 的看法和观点,可能我是机器学习小白吧,看完之 ...

  9. 论文笔记之:UNSUPERVISED REPRESENTATION LEARNING WITH DEEP CONVOLUTIONAL GENERATIVE ADVERSARIAL NETWORKS

    UNSUPERVISED REPRESENTATION LEARNING WITH DEEP CONVOLUTIONAL GENERATIVE ADVERSARIAL NETWORKS  ICLR 2 ...

随机推荐

  1. 日常Java 2021/11/16

    获得applet参数 下面的例子演示了如何使用一个Applet响应来设置文件中指定的参数.该Applet显示了-个黑色棋盘图案和第二种颜色.第二种颜色和每一列的大小通过文档中的Applet的参数指定. ...

  2. LinkBinTree

    package ch11; import java.util.ArrayList; import java.util.List; import java.util.Stack; public clas ...

  3. vue-cli4脚手架搭建三

    组件传值 <script> import LunBo from "./LunBo"; export default { name: 'Home', components ...

  4. ClassLoader.loadClass()与Class.forName()的区别《 转》

    ClassLoader.loadClass()与Class.forName()区别: ClassLoader.loadClass()与Class.forName()大家都知道是反射用来构造类的方法,但 ...

  5. Hibernate的基本功能:对数据库的增删改查(创建对象实例)

    一.通过实例化的对象向数据库添加新记录 package com.yh.test; import org.hibernate.Session; import org.hibernate.SessionF ...

  6. 【Xcode】sh: pause: command not found

    system("pause"); 只适合于DOS和Windows系统,不适合Linux系统. 直接删掉就可以. 或者改为: #include <unistd.h> pa ...

  7. 第三届“传智杯”全国大学生IT技能大赛(初赛A组)题解

    留念 C - 志愿者 排序..按照题目规则说的排就可以.wa了两发我太菜了qwq #include<bits/stdc++.h> using namespace std; const in ...

  8. WebRTC + WebSocket 实现视频通话

    前言 WebRTC WebRTC(Web Real-Time Communication).Real-Time Communication,实时通讯. WebRTC能让web应用和站点之间选择性地分享 ...

  9. java 数据类型:集合接口Collection之常用ArrayList;lambda表达式遍历;iterator遍历;forEachRemaining遍历;增强for遍历;removeIf批量操作集合元素(Predicate);

    java.util.Collection接口 Java的集合主要由两个接口派生出来,一个是Collection一个是Map,本章只记录Collection常用集合 集合只能存储引用类型数据,不能存储基 ...

  10. Dockerfile使用OracleJDK创建自定义tomcat8镜像

    我们默认下载的tomcat镜像是用的openjdk ,但是我们有些项目必须使用oraclejdk 那就不能使用官方的tomcat镜像,只能重新自定义一个镜像 Dockerfile文件 FROM cen ...