网站建设合同是否属于技术服务合同域名查询官网
论文地址:https://arxiv.org/pdf/2002.05709.pdf
目前流行的无监督学范式。通过训练,使模型拥有比较的能力。即,模型能够区别两个数据(instance)是否是相同的。这在 深度聚类 领域受到广泛的关注。(在有监督中的 few-shot, 使用一些类让模型学会比较,再用一些新类去测试模型的比较能力)
我们分几个模块了解对比学习。
数据增强
对比学习主要是通过拉进 正例对 之间特征表示的相似度;以及拉远 负例对 之间特征表示的相似度。
从而使模型具有 对比的能力。因为是无监督学习,我们的数据没有标签。我们构建正例对的方法就是通过数据增强(基本不改变数据的语义信息)。
数据增强的方法有很多种:
图片数据增强
文本数据增强
语音数据增强
图数据增强
正负例对的构建
原数据:(x1,x2,x3)(x_1, x_2, x_3)(x1,x2,x3);
增强数据a:(x1a,x2a,x3a)(x_1^a, x_2^a, x_3^a)(x1a,x2a,x3a);
增强数据b:(x1b,x2b,x3b)(x_1^b, x_2^b, x_3^b)(x1b,x2b,x3b);
Aug_data{a & b} | x1bx_1^bx1b | x2bx_2^bx2b | x3bx_3^bx3b |
---|---|---|---|
x1ax_1^ax1a | (x1a,x1b)\color{red}(x_1^a, x_1^b)(x1a,x1b) | (x1a,x2b)(x_1^a, x_2^b)(x1a,x2b) | (x1a,x3b)(x_1^a, x_3^b)(x1a,x3b) |
x2ax_2^ax2a | (x2a,x1b)(x_2^a, x_1^b)(x2a,x1b) | (x2a,x2b)\color{red}(x_2^a, x_2^b)(x2a,x2b) | (x2a,x3b)(x_2^a, x_3^b)(x2a,x3b) |
x3ax_3^ax3a | (x3a,x1b)(x_3^a, x_1^b)(x3a,x1b) | (x3a,x2b)(x_3^a, x_2^b)(x3a,x2b) | (x3a,x3b)\color{red}(x_3^a, x_3^b)(x3a,x3b) |
构成的正例对:红色;
构成的负例对:黑色。
上面说的只是原始的 对比对的构造方式。 现在还有根据 语义信息 进行去除假负例对。
假负例对: x1,x2x_1, x_2x1,x2 属于一个 簇类,(x1a,x2b)(x_1^a, x_2^b)(x1a,x2b) 却属于负例对,实际上应该属于正例对,且他们的特征表示的相似度应该很大。
编码器 Φ(⋅)\Phi(\cdot)Φ(⋅)
将图片,文本,语音,图等进行编码。得到特征矩阵 HHH。
对于一个原数据: X={xi}i=0MX = \{ x_i \}_{i=0}^MX={xi}i=0M, 我们得到其相应的增数据:Xa={xia}i=0MX^a = \{ x_i^a \}_{i=0}^MXa={xia}i=0M, Xb={xib}i=0MX^b = \{ x_i^b \}_{i=0}^MXb={xib}i=0M。MMM是batch size的大小。
然后经过编码得到特征矩阵:Ha=Φ(Xa),Hb=Φ(Xb)H^a = \Phi(X^a), H^b = \Phi(X^b)Ha=Φ(Xa),Hb=Φ(Xb),其中,Ha,Hb∈RM×hidden_sizeH^a, H^b \in \mathbb{R}^{M \times hidden\_size}Ha,Hb∈RM×hidden_size。
Project head f(⋅)f(\cdot)f(⋅)
一般使用一个两层的线性MLP或者三层的非线性MLP。将得到的Feature Matrix映射到一个字空间(subspace)。一般都是将其映射为128维。
对于得到的特征矩阵:Ha,HbH^a, H^bHa,Hb。我们经过 f(⋅)f(\cdot)f(⋅) 得到映射的子空间: Za=f(Ha),Zb=f(Hb)Z^a = f(H^a), Z^b = f(H^b)Za=f(Ha),Zb=f(Hb), 其中,Za,Zb∈RM×128Z^a, Z^b \in \mathbb{R}^{M \times 128}Za,Zb∈RM×128。
最小化对比损失
得到子空间表示后,在使用对比损失函数,最小化损失函数。
lia=−logexp(s(zia,zib)/τ)∑j=1M[exp(s(zia,zja)/τ)+exp(s(zia,zjb)/τ)]lib=−logexp(s(zib,zia)/τ)∑j=1M[exp(s(zib,zja)/τ)+exp(s(zib,zjb)/τ)]L=12M∑i=1M(lia+lib)\mathcal{l}^a_i = -\log \frac{\exp(s(z_i^a, z_i^b)/\tau)}{\sum_{j=1}^{M} [\exp(s(z_i^a, z_j^a)/\tau) + \exp(s(z_i^a, z_j^b)/\tau) ]} \\ \mathcal{l}^b_i = -\log \frac{\exp(s(z_i^b, z_i^a)/\tau)}{\sum_{j=1}^{M} [\exp(s(z_i^b, z_j^a)/\tau) + \exp(s(z_i^b, z_j^b)/\tau) ]} \\ \mathcal{L} = \frac{1}{2M} \sum_{i=1}^{M} (\mathcal{l}^a_i + \mathcal{l}^b_i) lia=−log∑j=1M[exp(s(zia,zja)/τ)+exp(s(zia,zjb)/τ)]exp(s(zia,zib)/τ)lib=−log∑j=1M[exp(s(zib,zja)/τ)+exp(s(zib,zjb)/τ)]exp(s(zib,zia)/τ)L=2M1i=1∑M(lia+lib)
其中,τ\tauτ 是温度参数,MMM 是batch size的大小,s(⋅)s(\cdot)s(⋅) 是相似性度量,具体表达为:s(zi,zj)=ziTzj/∣∣zi∣∣2⋅∣∣zj∣∣2s(z_i, z_j) = z_i^Tz_j / ||z_i||_2 \cdot ||z_j||_2s(zi,zj)=ziTzj/∣∣zi∣∣2⋅∣∣zj∣∣2。