Contrastive Generative Adversarial Networks
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)\).
于是第一阶段的"对比损失"就出炉了
\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相似度:
\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模型.
最新文章
- linux几种快速清空文件内容的方法
- 69 su -用户和工作组管理
- [xampp]在Crunch Bang下安装xampp1.8.3
- Javascript模块化编程(一):模块的写法【转】
- Ruby1.9.3-下载网络图片至本地,并按编号保存。
- Mac电脑没有声音,苹果电脑没有声音怎么办
- Exceptionless 本地部署踩坑记录
- vue笔记-条件渲染
- GridView 事件出发后 内容滚动条 实时定位
- 在C++的函数中如何指定一个数组,使得这个数组的大小由函数的输入值来决定
- codeforces659C
- C#之值类型和引用类型
- 可以作为瘟到死(windows)路径的字符
- 往github提交代码流程
- [转]The superclass ";javax.servlet.http.HttpServlet"; was not found on the Java Build Path
- [软件]在浏览器里添加MarkDown Here(插件)
- 【Linux】eclipse juno 边框过大的调整方法
- js 事件调度
- [leetcode shell]192. Word Frequency
- jquery对象的遍历$(selector).each()
热门文章
- words in English that contradict themselves
- 20. VIM命令操作技巧
- 求最长子序列(非连续)的STL方法 - 洛谷P1020 [NOIP1999 普及组] 导弹拦截
- 连接查询条件在on后面和条件在where后面
- Insert into select语句引发的生产事故
- springboot-使用AOP日志拦截实现
- Output of C++ Program | Set 9
- my42_Mysql基于ROW格式的主从同步
- 【C/C++】最大连续子序列和/动态规划
- Docker从入门到精通(二)——安装Docker