对比表征学习(一)Contrastive Representation Learning

2024-05-27 15:52

本文主要是介绍对比表征学习(一)Contrastive Representation Learning,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

对比表征学习(一)

主要参考翁莉莲的Blog,本文主要聚焦于对比损失函数

对比表示学习(Contrastive Representation Learning)可以用来优化嵌入空间,使相似的数据靠近,不相似的数据拉远。同时在面对无监督数据集时,对比学习是一种极其有效的自监督学习方式

对比学习目标

在最早期的对比学习中只有一个正样本和一个负样本进行比较,在当前的训练目标中,一个批次的数据集中可以有多个正样本和负样本对。

对比损失函数

Contrastive loss

该论文是以对比方式进行深度度量学习(deep metric learning)的最早训练目标之一

给定一组输入样本 { x i } \{x_i\} {xi},每个样本都有一个对应的标签 y i ∈ { 1 , … , L } y_i \in \{1, \dots, L\} yi{1,,L},共有 L L L 个类别。我们希望学习一个函数 f θ ( ⋅ ) : X → R d f_{\theta}(\cdot) : \mathcal{X} \rightarrow \mathbb{R}^d fθ():XRd,该函数能将 x i x_i xi 编码成一个嵌入向量,使得同一类别的样本具有相似的嵌入,而不同类别的样本具有非常不同的嵌入。因此,对比损失(Contrastive Loss)会取一对输入 ( x i , x j ) (x_i, x_j) (xi,xj),并最小化同一类别样本间的嵌入距离,同时最大化不同类别样本间的嵌入距离。
L cont ( x i , x j , θ ) = 1 [ y i = y j ] ∥ f θ ( x i ) − f θ ( x j ) ∥ 2 + 1 [ y i ≠ y j ] max ⁡ ( 0 , ϵ − ∥ f θ ( x i ) − f θ ( x j ) ∥ 2 ) \mathcal{L}_{\text{cont}}(x_i, x_j, \theta) = \mathbf{1}[y_i = y_j] \left\| f_\theta(x_i) - f_\theta(x_j) \right\|^2 + \mathbf{1}[y_i \neq y_j] \max(0, \epsilon - \left\| f_\theta(x_i) - f_\theta(x_j) \right\|^2) Lcont(xi,xj,θ)=1[yi=yj]fθ(xi)fθ(xj)2+1[yi=yj]max(0,ϵfθ(xi)fθ(xj)2)
其中 ϵ \epsilon ϵ​ 是一个超参数,用来定义不同类别样本的最低下界。

Triplet loss

参考论文,提出的目的是用来学习在不同姿势和角度下对同一个人进行人脸识别。

在这里插入图片描述

给定一个锚定输入 x x x,我们选择一个正样本 x + x^+ x+ 和一个负样本 x − x^- x,意味着 x + x^+ x+ x x x 属于同一类,而 x − x^- x 则来自另一个不同的类。三元组损失(Triplet Loss)通过以下公式学习,同时最小化锚定 x x x 和正样本 x + x^+ x+ 之间的距离,并最大化锚定 x x x 和负样本 x − x^- x​ 之间的距离:
L triplet ( x , x + , x − ) = ∑ x ∈ X max ⁡ ( 0 , ∥ f ( x ) − f ( x + ) ∥ 2 − ∥ f ( x ) − f ( x − ) ∥ 2 + ϵ ) \mathcal{L}_{\text{triplet}}(x, x^+, x^-) = \sum_{x \in \mathcal{X}} \max \left(0, \|f(x) - f(x^+)\|^2 - \|f(x) - f(x^-)\|^2 + \epsilon \right) Ltriplet(x,x+,x)=xXmax(0,f(x)f(x+)2f(x)f(x)2+ϵ)
其中,边界参数 ϵ \epsilon ϵ 被配置为相似对与不相似对之间距离的最小偏移量。

Lifted Structured Loss

参考论文,利用一个训练批次中的所有成对边缘,以提高计算效率。

在这里插入图片描述

D i j = ∣ f ( x i ) − f ( x j ) ∣ 2 D_{ij} = |f(x_i) - f(x_j)|_2 Dij=f(xi)f(xj)2,一个结构化的损失函数定义如下:
L struct = 1 2 ∣ P ∣ ∑ ( i , j ) ∈ P max ⁡ ( 0 , L struct ( i j ) ) 2 \mathcal{L}_{\text{struct}} = \frac{1}{2|\mathcal{P}|} \sum_{(i,j) \in P} \max(0, \mathcal{L}_{\text{struct}}^{(ij)})^2 Lstruct=2∣P1(i,j)Pmax(0,Lstruct(ij))2
其中,
L struct ( i j ) = D i j + max ⁡ ( max ⁡ ( i , k ) ∈ N ( ϵ − D i k ) , max ⁡ ( j , l ) ∈ N ( ϵ − D j l ) ) \mathcal{L}_{\text{struct}}^{(ij)} = D_{ij} + \max \left(\max_{(i,k) \in \mathcal{N}} (\epsilon - D_{ik}), \max_{(j,l) \in \mathcal{N}} (\epsilon - D_{jl})\right) Lstruct(ij)=Dij+max((i,k)Nmax(ϵDik),(j,l)Nmax(ϵDjl))
这里 P \mathcal{P} P 包含了正样本对的集合,而 N \mathcal{N} N 是负样本对的集合。注意,密集的成对平方距离矩阵可以在每个训练批次中轻松计算。 max ⁡ ( max ⁡ ( i , k ) ∈ N ( ϵ − D i k ) , max ⁡ ( j , l ) ∈ N ( ϵ − D j l ) ) \max \left(\max_{(i,k) \in \mathcal{N}} (\epsilon - D_{ik}), \max_{(j,l) \in \mathcal{N}} (\epsilon - D_{jl})\right) max(max(i,k)N(ϵDik),max(j,l)N(ϵDjl)) 部分用来挖掘难负样本,然而,这部分不是平滑的,可能会导致在实践中收敛到不好的局部最优。因此,它被放宽为以下形式:
L struct ( i j ) = D i j + log ⁡ ( ∑ ( i , k ) ∈ N exp ⁡ ( ϵ − D i k ) + ∑ ( j , l ) ∈ N exp ⁡ ( ϵ − D j l ) ) \mathcal{L}_{\text{struct}}^{(ij)} = D_{ij} + \log \left( \sum_{(i,k) \in \mathcal{N}} \exp(\epsilon-D_{ik}) + \sum_{(j,l) \in \mathcal{N}} \exp(\epsilon-D_{jl}) \right) Lstruct(ij)=Dij+log (i,k)Nexp(ϵDik)+(j,l)Nexp(ϵDjl)
在论文中,他们还提出通过在每个批次中积极加入一些难分的负样本(hard negative),通过给出几对随机的正样本,来提高负样本的质量

N-pair loss

多类 N 对损失(paper)对三重损失进行了泛化,以包括与多个负样本的比较。

给定一个包含一个正样本和 N − 1 N-1 N1 个负样本的 N + 1 N+1 N+1 元组(还要包括样本本身,所以N+1),训练样本为 { x , x + , x 1 − , … , x N − 1 − } {\{x, x^+, {x_1}^-, \dots, {x_{N-1}}}^-\} {x,x+,x1,,xN1},损失被定义为:

L N -pair ( x , x + , { x i } i = 1 N − 1 ) = log ⁡ ( 1 + ∑ i = 1 N − 1 exp ⁡ ( f ( x ) T f ( x i − ) − f ( x ) T f ( x + ) ) ) = − log ⁡ exp ⁡ ( f ( x ) T f ( x + ) ) exp ⁡ ( f ( x ) T f ( x + ) ) + ∑ i = 1 N − 1 exp ⁡ ( f ( x ) T f ( x i − ) \mathcal{L}_{N\text{-pair}}(x, x^+, \{x_i\}_{i=1}^{N-1}) = \log \left( 1 + \sum_{i=1}^{N-1} \exp(f(x)^T f({x_i}^-) - f(x)^T f(x^+)) \right) \\ = -\log \frac{\exp(f(x)^T f(x^+))}{\exp(f(x)^T f(x^+)) + \sum_{i=1}^{N-1} \exp(f(x)^T f({x_i}^-)} LN-pair(x,x+,{xi}i=1N1)=log(1+i=1N1exp(f(x)Tf(xi)f(x)Tf(x+)))=logexp(f(x)Tf(x+))+i=1N1exp(f(x)Tf(xi)exp(f(x)Tf(x+))

如果我们每个类别只采样一个负样本,这等同于用于多分类的softmax损失。

NCE

Noise Contrastive Estimation,论文链接

创新点是运行逻辑回归来区分目标数据和噪声。

x x x 是目标样本,符合分布 P ( x ∣ C = 1 ; θ ) = p θ ( x ) P(x|C = 1; \theta) = p_\theta(x) P(xC=1;θ)=pθ(x),并且 x ~ \tilde{x} x~ 是噪声样本,符合分布 P ( x ~ ∣ C = 0 ) = q ( x ~ ) P(\tilde{x}|C = 0) = q(\tilde{x}) P(x~C=0)=q(x~)。需要注意逻辑回归模型是模拟对数几率(即 logit),在这种情况下,我们希望对一个来自目标数据分布而非噪声分布的样本 u u u 的 logit 进行建模:

ℓ ( u ) = log ⁡ p θ ( u ) q ( u ) = log ⁡ p θ ( u ) − log ⁡ q ( u ) \ell(u) = \log \frac{p_\theta(u)}{q(u)} = \log p_\theta(u) - \log q(u) (u)=logq(u)pθ(u)=logpθ(u)logq(u)

将 logits 转换成概率后,通过 sigmoid 函数 σ ( ⋅ ) \sigma(\cdot) σ(),我们可以应用交叉熵损失:

L N C E = − 1 N ∑ i = 1 N [ log ⁡ σ ( ℓ ( x i ) ) + log ⁡ ( 1 − σ ( ℓ ( x ~ i ) ) ) ] L_{NCE} = -\frac{1}{N} \sum_{i=1}^N \left[ \log \sigma(\ell(x_i)) + \log (1 - \sigma(\ell(\tilde{x}_i))) \right] LNCE=N1i=1N[logσ((xi))+log(1σ((x~i)))]

其中:

σ ( ℓ ) = 1 1 + exp ⁡ ( − ℓ ) = p θ p θ + q \sigma(\ell) = \frac{1}{1 + \exp(-\ell)} = \frac{p_\theta}{p_\theta + q} σ()=1+exp()1=pθ+qpθ

这里列出了NCE损失的原始形式,它仅使用了一个正样本和一个噪声样本。在许多后续工作中,融合多个负样本的对比损失也广泛被称为NCE。

InfoNCE

论文链接,受到NCE的启发,InfoNCE使用分类交叉熵损失函数在一组不相关的噪声样本中寻找正例

给定一个上下文向量 c c c,正样本应该从条件分布 p ( x ∣ c ) p(x|c) p(xc) 中抽取,而 N − 1 N-1 N1 个负样本则从与上下文 c c c 独立的提议分布 p ( x ) p(x) p(x) 中抽取。为了简洁,让我们将所有样本标记为 X = { x i } i = 1 N X = \{x_i\}_{i=1}^N X={xi}i=1N,其中只有一个 x pos x_{\text{pos}} xpos 是正样本。我们正确检测到正样本的概率为:

p ( C = pos ∣ X , c ) = p ( x pos ∣ c ) ∏ i = 1 , … , N ; i ≠ pos p ( x i ) ∑ j = 1 N [ p ( x j ∣ c ) ∏ i = 1 , … , N ; i ≠ j p ( x i ) ] = p ( x pos ∣ c ) p ( x pos ) ∑ j = 1 N p ( x j ∣ c ) p ( x j ) = f ( x pos , c ) ∑ j = 1 N f ( x j , c ) p(C = \text{pos} | X, c) = \frac{p(x_{\text{pos}}|c) \prod_{i=1, \dots, N; i \neq \text{pos}} p(x_i)}{\sum_{j=1}^N \left[ p(x_j|c) \prod_{i=1, \dots, N; i \neq j} p(x_i) \right]} =\frac{\frac{p(x_{\text{pos}} | c)}{p(x_{\text{pos}})}}{\sum_{j=1}^N \frac{p(x_j | c)}{p(x_j)}}= \frac{f(x_{\text{pos}}, c)}{\sum_{j=1}^N f(x_j, c)} p(C=posX,c)=j=1N[p(xjc)i=1,,N;i=jp(xi)]p(xposc)i=1,,N;i=posp(xi)=j=1Np(xj)p(xjc)p(xpos)p(xposc)=j=1Nf(xj,c)f(xpos,c)

其中,得分函数 f ( x , c ) ∝ p ( x ∣ c ) p ( x ) f(x, c) \propto \frac{p(x|c)}{p(x)} f(x,c)p(x)p(xc)

InfoNCE 损失函数优化了正确分类正样本的负对数概率:

L InfoNCE = − E [ log ⁡ f ( x , c ) ∑ x ′ ∈ X f ( x ′ , c ) ] \mathcal{L}_{\text{InfoNCE}} = -\mathbb{E}\left[\log \frac{f(x, c)}{\sum_{x'\in X} f(x', c)}\right] LInfoNCE=E[logxXf(x,c)f(x,c)]

事实上, f ( x , c ) f(x, c) f(x,c) 估计的密度比 p ( x ∣ c ) p ( x ) \frac{p(x|c)}{p(x)} p(x)p(xc) 与互通信息优化有关。为了最大化输入 x x x 和上下文向量 c c c 之间的互通信息,我们有:

I ( x ; c ) = ∑ x , c p ( x , c ) log ⁡ p ( x ∣ c ) p ( x ) p ( c ) = ∑ x , c p ( x , c ) log ⁡ p ( x ∣ c ) p ( x ) I(x; c) = \sum_{x,c} p(x, c) \log \frac{p(x|c)}{p(x)p(c)} = \sum_{x,c} p(x, c) \log \frac{p(x|c)}{p(x)} I(x;c)=x,cp(x,c)logp(x)p(c)p(xc)=x,cp(x,c)logp(x)p(xc)

其中, log ⁡ p ( x ∣ c ) p ( x ) \log \frac{p(x|c)}{p(x)} logp(x)p(xc) 的对数项由 f f f 估计。

对于序列预测任务,CPC(Contrastive Predictive Coding)模型并不直接建模未来的观测 p k ( X t + k ∣ C t ) p_k(X_{t+k} | C_t) pk(Xt+kCt)(这可能相当昂贵),而是模型一个密度函数以保留 X t + k X_{t+k} Xt+k C t C_t Ct 之间的互信息:

f k ( X t + k , c t ) = exp ⁡ ( z t + k T W k c t ) ∝ p ( X t + k ∣ c t ) p ( X t + k ) f_k(X_{t+k}, c_t) = \exp(z_{t+k}^T W_k c_t) \propto \frac{p(X_{t+k}|c_t)}{p(X_{t+k})} fk(Xt+k,ct)=exp(zt+kTWkct)p(Xt+k)p(Xt+kct)

其中 z t + k z_{t+k} zt+k 是编码后的输入, W k W_k Wk 是一个可训练的权重矩阵。

Soft-Nearest Neighbors Loss

Soft-Nearest Neighbors Loss被Salakhutdinov & Hinton 和Frosst et.进一步扩展,使其可以包含多个正样本。

给定一批样本 { x i , y i } i = 1 B \{x_i, y_i\}_{i=1}^B {xi,yi}i=1B,其中 y i y_i yi x i x_i xi 的类别标签,以及一个用于测量两个输入相似性的函数 f ( ⋅ , ⋅ ) f(\cdot, \cdot) f(,),在温度 τ \tau τ 下定义的软最近邻损失为:

L s n n = − 1 B ∑ i = 1 B log ⁡ ∑ j ≠ i , y j = y i exp ⁡ ( − f ( x i , x j ) τ ) ∑ k ≠ i exp ⁡ ( − f ( x i , x k ) τ ) \mathcal{L}_{snn} = -\frac{1}{B} \sum_{i=1}^B \log \frac{\sum_{j \neq i, y_j = y_i} \exp(-\frac{f(x_i, x_j)}{\tau})}{\sum_{k \neq i} \exp(-\frac{f(x_i, x_k)}{\tau})} Lsnn=B1i=1Blogk=iexp(τf(xi,xk))j=i,yj=yiexp(τf(xi,xj))

温度参数 τ \tau τ 用于调整特征在表示空间中的集中程度。例如,当温度较低时,损失主要由小距离主导,而广泛分散的表征无法产生很大的贡献,因此变得无关紧要。

这篇关于对比表征学习(一)Contrastive Representation Learning的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1007919

相关文章

锐捷和腾达哪个好? 两个品牌路由器对比分析

《锐捷和腾达哪个好?两个品牌路由器对比分析》在选择路由器时,Tenda和锐捷都是备受关注的品牌,各自有独特的产品特点和市场定位,选择哪个品牌的路由器更合适,实际上取决于你的具体需求和使用场景,我们从... 在选购路由器时,锐捷和腾达都是市场上备受关注的品牌,但它们的定位和特点却有所不同。锐捷更偏向企业级和专

什么是 Ubuntu LTS?Ubuntu LTS和普通版本区别对比

《什么是UbuntuLTS?UbuntuLTS和普通版本区别对比》UbuntuLTS是Ubuntu操作系统的一个特殊版本,旨在提供更长时间的支持和稳定性,与常规的Ubuntu版本相比,LTS版... 如果你正打算安装 Ubuntu 系统,可能会被「LTS 版本」和「普通版本」给搞得一头雾水吧?尤其是对于刚入

TP-LINK/水星和hasivo交换机怎么选? 三款网管交换机系统功能对比

《TP-LINK/水星和hasivo交换机怎么选?三款网管交换机系统功能对比》今天选了三款都是”8+1″的2.5G网管交换机,分别是TP-LINK水星和hasivo交换机,该怎么选呢?这些交换机功... TP-LINK、水星和hasivo这三台交换机都是”8+1″的2.5G网管交换机,我手里的China编程has

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学