Tian Y., Krishnan D., Isola P. CONTRASTIVE REPRESENTATION DISTILLATION. arXiv preprint arXiv 1910.10699, 2019.

感觉其和的相似度有50%, 不过这篇写得早一点, 所以后者是借鉴了这篇文章? 这篇文章总的来说就是将distillation 和 contrastive learning 结合起来.

主要内容

思想便是, 希望\(f^S(x_i)\)靠近\(f^T(x_i)\), 而\(f^S(x_j)\)远离\(f^T(x_i)\). 定义

\[S:=f^S(x), \quad T:= f^T(x).
\]

假设源于同一样本的联合分布\(P(S,T|C=1)\)为\(P_1(S,T)\), 而源于不同样本的联合分布\(P(S,T|C=0)\)为\(P_0(S)P_0(T)\). 则我们很自然地希望最大化互信息:

\[I(S,T)= \mathbb{E}_{P_1(S,T)} \log \frac{P_1(S,T)}{P_0(S)P_0(T)}.
\]

接下来就是负采样和对比学习的东西了, 假设数据集是如此构造的: 一个特征\(T\), 以及N+1个特征\(\{S,S_1,\ldots, S_N\}\), 其中\(S,T\)构成正样本对(即来源于同一个样本, 其余\(S_i,T\)构成负样本对. 则我们有先验

\[P(C=1)=\frac{1}{N+1}, P(C=0)=\frac{N}{N+1}.
\]

于是便有

\[P(C=1|T,S)=\frac{P_1(T,S)}{P_1(T,S)+NP_0(T)P_0(S)},
\]

\[\begin{array}{ll}
\log P(C=1|T,S)
&= -\log (1+N\frac{P_0(T)P_0(S)}{P_1(T,S)}) \\
& \le -\log N + \log \frac{P_1(T,S)}{P_0(T)P_0(S)}.
\end{array}
\]

两边关于\(P_1(T,S)\)求期望可知

\[I(T,S) \ge \log N + \mathbb{E}_{P_1(T, S)} \log P(C=1|T,S).
\]

但是\(P(C=1|T,S)\)未知, 故作者采用\(h(T,S)\)去拟合, 通过极大似然估计

\[\mathcal{L}_{critic}(h)= \mathbb{E}_{P_1(T,S)} \log h(T,S) + N \mathbb{E}_{P_0(T,S)}\log (1-h(T,S)).
\]

只要\(h\)的拟合能力够强, 最后便能很好的逼近\(P(C=1|T,S)\). 设其最优解为\(h^*\). 但是需要注意的一点是, \(h^*\)跟\(T, S\)有关系, 则其隐式地和\(f^S\)有关系, 而\(f^S\)又需要

\[\max_{f^S} \mathbb{E}_{P_1} \log h^*(T,S),
\]

所以这就成了一个交替迭代的过程. 作者就另辟蹊径, 既然

\[\begin{array}{ll}
I(T,S)
&\ge \log N + \mathbb{E}_{P_1(T,S)} \log h^*(T,S) + N \mathbb{E}_{P_0(T,S)}\log (1-h^*(T,S)) \\
& \ge \log N + \mathbb{E}_{P_1(T,S)} \log h(T,S) + N \mathbb{E}_{P_0(T,S)}\log (1-h(T,S)).
\end{array}
\]

便不妨共同优化\(f^S, h\).

注: 第二个不等式成立, 因为\(h(T,S) \in [0, 1]\), 故第二项非正.

文中取的\(h\)为

\[h(T,S)=\frac{e^{g^T(T)'g^S(S)/\tau}}{e^{g^T(T)'g^S(S)/\tau} + \frac{N}{M}},
\]

其中, \(g\)为一线性变换, \(\tau\)为temperature, \(M\)为整个数据集的大小.

超参数的选择

CIFAR100:

N: 16384

\(\tau\): 0.1

代码

原文代码

CONTRASTIVE REPRESENTATION DISTILLATION的更多相关文章

  1. 论文解读(GRACE)《Deep Graph Contrastive Representation Learning》

    Paper Information 论文标题:Deep Graph Contrastive Representation Learning论文作者:Yanqiao Zhu, Yichen Xu, Fe ...

  2. Awesome Knowledge-Distillation

    Awesome Knowledge-Distillation 2019-11-26 19:02:16 Source: https://github.com/FLHonker/Awesome-Knowl ...

  3. Feature Distillation With Guided Adversarial Contrastive Learning

    目录 概 主要内容 reweight 拟合概率 实验的细节 疑问 Bai T., Chen J., Zhao J., Wen B., Jiang X., Kot A. Feature Distilla ...

  4. Representation Learning with Contrastive Predictive Coding

    目录 概 主要内容 从具有序的数据讲起 Contrastive Predictive Coding (CPC) 图片构建序 Den Oord A V, Li Y, Vinyals O, et al. ...

  5. 论文解读(MVGRL)Contrastive Multi-View Representation Learning on Graphs

    Paper Information 论文标题:Contrastive Multi-View Representation Learning on Graphs论文作者:Kaveh Hassani .A ...

  6. 论文解读(S^3-CL)《Structural and Semantic Contrastive Learning for Self-supervised Node Representation Learning》

    论文信息 论文标题:Structural and Semantic Contrastive Learning for Self-supervised Node Representation Learn ...

  7. 论文解读(MERIT)《Multi-Scale Contrastive Siamese Networks for Self-Supervised Graph Representation Learning》

    论文信息 论文标题:Multi-Scale Contrastive Siamese Networks for Self-Supervised Graph Representation Learning ...

  8. Noise Contrastive Estimation

    Notes from Notes on Noise Contrastive Estimation and Negative Sampling one sample: \[x_i \to [y_i^0, ...

  9. Notes on Noise Contrastive Estimation and Negative Sampling

    Notes on Noise Contrastive Estimation and Negative Sampling ## 生成负样本 在常见的关系抽取应用中,我们经常需要生成负样本来训练一个好的系 ...

随机推荐

  1. 零基础学习java------21---------动态代理,java8新特性(lambda, stream,DateApi)

    1. 动态代理 在一个方法前后加内容,最简单直观的方法就是直接在代码上加内容(如数据库中的事务),但这样写不够灵活,并且代码可维护性差,所以就需要引入动态代理 1.1 静态代理实现 在讲动态代理之前, ...

  2. 零基础学习java------day17------缓冲字节流,转换字节流,简化流,缓冲字符流,序列化和对象流

    1. 缓冲字节流 缓冲区:缓冲区实质上是一个数组.通常它是一个字节数组,但是也可以使用其他种类的数组.但是一个缓冲区不 仅仅 是一个数组.缓冲区提供了对数据的结构化访问,而且还可以跟踪系统的读/写进程 ...

  3. 零基础学习java------day16-----文件,递归,IO流(字节流读写数据)

    1.File 1.1 构造方法(只是创建已经存在文件的对象,并不能创建没有的文件) (1)public File(String pathname) (2)public File(String pare ...

  4. Vue相关,Vue生命周期及对应的行为

    先来一张经典图 生命钩子函数 使用vue的朋友们知道,生命周期函数长这样- mounted: function() { } // 或者 mounted() { } 注意点,Vue的所有生命周期函数都是 ...

  5. 【排序算法】——冒泡排序、选择排序、插入排序、Shell排序等排序原理及Java实现

    排序 1.定义: 所谓排序,即是整理文件中的内容,使其按照关键字递增或递减的顺序进行排列. 输入:n个记录,n1,n2--,其对应1的关键字为k1,k2-- 输出:n(i1),n(i2)--,使得k( ...

  6. Cocoapods 版本更新与更新到指定版本

    1.本地现有的Cocoapods的版本号是1.1.0.rc.2,想升级到最新版本 1.先切换gem源 gem sources --remove https://rubygems.org/ gem so ...

  7. Oracle删除重复数据记录

    删除重复记录,利用ROWID 和MIN(或MAX)函数, ROWID在整个数据库中是唯一的,由Oracle自己产生和维护,并唯一标识一行(无论该表中是否有主键和唯一性约束),ROWID确定了每条记录在 ...

  8. jQuery 的两种语法

    文档就绪事件(文档加载完成之后才执行jQuer代码): 第一种: $(document).ready(function() { // jQuery 代码.... }); 第二种: $(function ...

  9. 用户信息系统_serviceImpl

    package com.hopetesting.service.impl;import com.hopetesting.dao.UserDao;import com.hopetesting.dao.i ...

  10. leetcode,两个排序数组的中位数

    先上题目描述: 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 . 请找出这两个有序数组的中位数.要求算法的时间复杂度为 O(log (m+n)) . 你可以假设 nums1 和  ...