讨论 2021-11-04 = ###### tags: `tutorials` `Fudan` `2021` # 对比学习 对比学习指的是通过让模型区分和不区分样本对来进行学习的。与平时常用的最大似然估计,交叉熵等误差函数不同,对比学习总归需要两个或以上的样本进行学习。其实其他方法也可以看做是对label进行对比学习,只不过对比学习更强调区分样本。 参考 https://davidmeyer.github.io/ml/nce.pdf    到这一步,其实对比学习的主要问题就描述清楚了,之后如何建模,其实有多样的选择。原始NCE采用了如下的方案,但其实对比学习有众多不同的策略。   ### 三种形式 目前有三种常见的对比学习误差函数,他们思想类似,但具体性质其实是有一定区别的,我们下面简单讨论一下。 \begin{gather} L = - \{ \ln [\sigma(\text{sim}(z_i,z_j)) ] + \sum_{k\neq j} \ln [1-\sigma(\text{sim}(z_i,z_k))] \} \\ L= - \{\ln \frac{\exp(\text{sim}(z_i,z_j))}{\sum_k \exp(\text{sum}(z_i,z_k))} \} \\ L = - \max(m+\frac{1}{K} \sum_{k\neq j} \text{sim}(z_i,z_k) - \text{sim}(z_i,z_j), 0) \end{gather} 首先第一种最接近原始的对比学习,好处是这个函数本身不需要考虑概率的归一化问题(因为log把归一化引子分离了)。同时,他也是最直接体现对比的,对相似的直接提高其概率似然度,对反例,直接减小。 第二种方法目前最流行,严格来说,他不算对比,因为他少了对负样本对的惩罚项。但由于负样本成为了归一化项,所以会受到间接惩罚。与第一种的最大区别是负样本对和正样本对不再平等。 第三种更直接,但缺点是不考虑归一化,也不考虑空间的局部性质差异(不存在静态的,同时很好的m)。 https://arxiv.org/pdf/2002.05709.pdf ### 对比学习是一种度量学习 考虑下图,红色蓝色代表标签,圆形代表数据点,方形代表未采集到的样本。对比学习其实就是拉扯空间,让同类点离得更近,不同类点离得更远,并且图中两条线段是最需要拉远和最需要拉近的,他们产生的loss是最有指导价值的。 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up