Contrastive Learning 对比学习 | InfoNCE loss 与互信息的数学关联


参考博客:优快云 | 【理论推导】互信息与 InfoNCE 损失:从公式推导理解对比学习的本质 ,感觉是讲的最清楚的一个博客。


目录
  • 1 InfoNCE loss 和互信息的数学形式
    • 1.1 互信息的数学形式
    • 1.2 InfoNCE loss 的数学形式
    • 1.3 为什么我们希望最大化 \((X,Y)\) 的互信息
  • 2 InfoNCE loss 与互信息的数学关联
  • 3 证明过程
    • 3.1 第一步:证明使 InfoNCE loss 取值最小的 \(f(x,y)\),满足 \(f(x, y) = \log [p(y|x) / p(y)]\)
    • 3.2 第二步:将以上 \(f(x,y)\) 代入,推导互信息下界


1 InfoNCE loss 和互信息的数学形式

1.1 互信息的数学形式

互信息 \(I(X,Y)\) 是信息论中的核心概念,用于衡量两个随机变量 \(X,Y\) 之间的依赖程度。

从直观上理解,互信息回答了这样一个问题:知道一个变量 Y 后,我们对另一个变量 X 的不确定性减少了多少?如果 X 的不确定性减少较多,则代表 XY 之间的互信息较大(为正);如果 X 的不确定性没有减少,则 XY 是相互独立的,即 \(P(X)P(Y) = P(X,Y)\),XY 之间的互信息为 0。

数学上,互信息有三种等价的定义方式:

① 基于联合分布 \(p(x,y)\) 和边缘分布 \(p(x)p(y)\) 的 KL 散度的形式

\[I(X;Y) = D_{KL}\big(p(x,y) ~\|~ p(x)p(y)\big) = \mathbb{E}_{p(x,y)}\left[\log\frac{p(x,y)}{p(x)p(y)}\right] \]

这个形式直接体现了互信息的本质:它衡量的是联合分布 \(p(x,y)\) 与假设 X 和 Y 独立时的分布 \(p(x)p(y)\) 之间的差异。如果 X 和 Y 独立,这个差异为 0,否则为正数,差异越大说明两个变量关联越强。

② 基于熵的形式

\[I(X;Y) = H(X) - H(X|Y) = H(Y) - H(Y|X) \]

这里 \(H(X)=\int p(x)\log p(x)\) 是 X 的熵(不确定性),\(H(X|Y)\) 是已知 Y 时 X 的条件熵,互信息则是不确定性的减少量。

③ 基于条件概率的形式

\[I(X;Y) = \mathbb{E}_{p(x,y)}\left[\log\frac{p(y|x)}{p(y)}\right] \]

这个形式在对比学习中特别有用,因为它直接表达了“在给定 x 的情况下,y 的概率相对于其先验概率的变化”。

1.2 InfoNCE loss 的数学形式

InfoNCE loss 是现代对比学习(Contrastive Learning)的核心。它的设计灵感来自一个简单的直觉:从一堆样本中,找出与给定样本 x 匹配的正样本 y。

具体的,假设我们有一个正样本对 \((x, y)\),比如同一张图片的两种不同数据增强结果,同时从数据集中随机采样 \(N-1\) 个负样本 \(y_2, y_3, ..., y_N\)。我们定义一个评分函数 \(f(x, y)\)(通常是神经网络)来衡量 x 和 y 的相似度。InfoNCE loss 的形式为:

\[L = -\mathbb{E}\left[\log\frac{e^{f(x,y)}}{\sum_{j=1}^{N} e^{f(x,y_j)}}\right] \]

其中,分子 \(e^{f(x,y)}\) 是正样本的得分,而分母 \(\sum_{j=1}^{N} e^{f(x,y_j)}\) 是所有样本(1 个正样本 + N-1 个负样本)得分的总和。整个分式表示:给定 x 和 N 个候选 y,我们正确选出正样本 y 的概率。

也可将其视为交叉熵损失(cross-entropy loss)的一个变种。交叉熵损失的形式如下:

\[L_\text{CE} = \sum p(a)\log \hat p(a) \]

其中,\(p(a)\) 为真是概率,而 \(\hat p(a)\) 是我们估计的概率。在 InfoNCE loss 的 setting 中,真概率 \(p(x,y) = 1\),而 \(p(x,y_j) = 0\)

1.3 为什么我们希望最大化 \((X,Y)\) 的互信息

在对比学习中,我们希望最大化正样本对的互信息,同时最小化正负样本之间的互信息。这迫使编码器提取出两个不同视图(view)的共享信息(比如同一张图片的不同数据增强版本、语言 / 视觉等不同的模态),这些信息通常对应于数据的内在语义,例如物体的类别、场景等,而忽略无关的噪声或增强引入的变化。

在 skill discovery(强化学习的一个子领域)中,我们希望最大化 skill z 和 state s 之间的互信息。从信息理论的角度,最大化 \(I(S;Z)\) 意味着,我们希望从状态 \(s\) 中尽可能多地获取关于技能 \(z\) 的信息。这确保了技能是“有区分度的”:看到智能体的行为,我们就能推断出它使用了哪个技能。

2 InfoNCE loss 与互信息的数学关联

核心结论:最小化 InfoNCE loss,等价于最大化互信息的一个下界。

(互信息下界的含义是,互信息的取值将会大于这个值。从这个角度来说,下界的值越大,互信息的值就随之变大,所以,我们最小化 InfoNCE loss,相当于在推动互信息最大化。)

具体来说,对于任意评分函数 \(f\),有以下不等式成立:

\[I(X;Y) \geq \log N - L \]

其中,\(L\) 是我们模型的 InfoNCE loss,这个差值就是互信息的下界。

3 证明过程

证明过程可以分为两步:

3.1 第一步:证明使 InfoNCE loss 取值最小的 \(f(x,y)\),满足 \(f(x, y) = \log [p(y|x) / p(y)]\)

我们要证明:使 InfoNCE loss 最小的 \(f(x,y)\) 满足:

\[f(x,y) = \log\frac{p(y|x)}{p(y)} \]

我们考虑 InfoNCE loss 的期望形式:

\[L = -\mathbb{E}_{p(x,y)} \left[\log\frac{e^{f(x,y)}}{\sum_{j=1}^{N} e^{f(x,y_j)}}\right] \]

我们可以将这个损失看作一个分类问题:给定 x 和 N 个样本 \({y_1, y_2, \cdots, y_N}\),其中只有 \(y_1=y\) 是正样本,其余是负样本。模型的任务是选出正样本。

对于固定的 x,最优的分类器应该给出真实的后验概率,即给定 x 后,y 为这个 x 的正样本的概率。那么,真实的后验概率是多少呢?

根据贝叶斯定理,在给定 x 和 y 样本集合的情况下,第 k 个样本是正样本的概率为(这个没完全看懂):

\[p(\text{第 k 个是正样本} | x, {y_{1\cdots N}}) = \frac{p(y_k|x) \prod_{i\neq k} p(y_i) }{ \sum_{j=1}^{N} p(y_j|x) \prod_{i\neq j} p(y_i)} \]

化简后得到:

\[= \frac{p(y_k|x)/p(y_k)}{\sum_{j=1}^{N} p(y_j|x)/p(y_j)} \]

关键观察:如果我们取 \(f(x,y) = \log\frac{p(y|x)}{p(y)} + c(x)\),其中 \(c(x)\) 是只依赖于 x 的任意函数,那么:

\[\frac{e^{f(x,y_k)}}{\sum_{j=1}^{N} e^{f(x,y_j)}} = \frac{p(y_k|x)/p(y_k)}{\sum_{j=1}^{N} p(y_j|x)/p(y_j)} \]

这正是真实的后验分布。因此,这个 \(f(x,y)\) 取值使得模型的输出分布与真实分布完全一致,从而最小化 InfoNCE loss。

为简便起见,我们通常取 \(c(x)=0\),得到最优 \(f(x,y)\)

\[f^*(x,y) = \log\frac{p(y|x)}{p(y)} \]

3.2 第二步:将以上 \(f(x,y)\) 代入,推导互信息下界

现在我们将最优 \(f^*(x,y)\) 代入 InfoNCE loss:

\[L_{\text{min}} = -\mathbb{E}\left[\log\frac{e^{f^*(x,y)}}{\sum_{j=1}^{N} e^{f^*(x,y_j)}}\right] = -\mathbb{E}\left[\log\frac{\frac{p(y|x)}{p(y)}}{\sum_{j=1}^{N} \frac{p(y_j|x)}{p(y_j)}}\right] \]

考虑互信息 \(I(X;Y)\) 的以下形式:

\[I(X;Y) = \mathbb{E}\left[\log\frac{p(y|x)}{p(y)}\right] \]

现在,我们想建立 \(I(X;Y)\)\(L_{\text{min}}\) 的关系。通过巧妙的代数变换,把互信息拆开:

\[I(X;Y) = \mathbb{E}\left[\log\frac{p(y|x)}{p(y)}\right] = \mathbb{E}\left[\log\frac{\frac{p(y|x)}{p(y)}}{\frac{1}{N}\sum_{j=1}^{N} \frac{p(y_j|x)}{p(y_j)}}\right] + \mathbb{E}\left[\log\left(\frac{1}{N}\sum_{j=1}^{N} \frac{p(y_j|x)}{p(y_j)}\right)\right] \]

第一项就是 \(-L_{\text{min}}\) 吗?不完全是。实际上,\(-L_{\text{min}}\) = 第一项 - log N:

\[-L_{\text{min}} = \mathbb{E}\left[\log\frac{\frac{p(y|x)}{p(y)}}{\sum_{j=1}^{N} \frac{p(y_j|x)}{p(y_j)}}\right] = \mathbb{E}\left[\log\frac{\frac{p(y|x)}{p(y)}}{\frac{1}{N}\sum_{j=1}^{N} \frac{p(y_j|x)}{p(y_j)}}\right] - \log N \]

所以:

\[I(X;Y) = (-L_{\text{min}} + \log N) + \mathbb{E}\left[\log\left(\frac{1}{N}\sum_{j=1}^{N} \frac{p(y_j|x)}{p(y_j)}\right)\right] \]

现在看最后一项:\(\mathbb{E}\left[\log\left(\frac{1}{N}\sum_{j=1}^{N} \frac{p(y_j|x)}{p(y_j)}\right)\right]\)

由于对数函数是凹函数,根据琴生不等式(Jensen's Inequality):

\[\mathbb{E}[\log(Z)] \leq \log(\mathbb{E}[Z]) \]

因此:

\[\mathbb{E}\left[\log\left(\frac{1}{N}\sum_{j=1}^{N} \frac{p(y_j|x)}{p(y_j)}\right)\right] \leq \log\left(\mathbb{E}\left[\frac{1}{N}\sum_{j=1}^{N} \frac{p(y_j|x)}{p(y_j)}\right]\right) \]

我们计算这个 log 里面的期望:

\[\mathbb{E}\left[\frac{p(y_j|x)}{p(y_j)}\right] = \int p(y_j) \cdot \frac{p(y_j|x)}{p(y_j)} dy_j = \int p(y_j|x) dy_j = 1 \]

期望 = 1。所以:

\[\log\left(\mathbb{E}\left[\frac{1}{N}\sum_{j=1}^{N} \frac{p(y_j|x)}{p(y_j)}\right]\right) = \log(1) = 0 \]

代入上式 = 0,使用琴生不等式,因此:

\[\mathbb{E}\left[\log\left(\frac{1}{N}\sum_{j=1}^{N} \frac{p(y_j|x)}{p(y_j)}\right)\right] \leq 0 \]

将上式 ≤ 0 代回原式:

\[I(X;Y) \geq \log N - L_{\text{min}} \]

由于 \(f^*\) 是最优的,所以对于任意评分函数 \(f\),有 \(L(f) \geq L_{\text{min}}\),得到:

\[I(X;Y) \geq \log N - L_{\text{min}} \geq \log N - L(f) \]

证毕:对于任意评分函数 \(f\)\(\log N - L(f)\) 是互信息 \(I(X;Y)\) 的一个下界。



下载方式:https://pan.quark.cn/s/a4b39357ea24 布线问题(分支限界算法)是计算机科学和电子工程领域中一个广为人知的议题,它主要探讨如何在印刷电路板上定位两个节点间最短的连接路径。 在这一议题中,电路板被构建为一个包含 n×m 个方格的矩阵,每个方格能够被界定为可通行或不可通行,其核心任务是定位从初始点到最终点的最短路径。 分支限界算法是处理布线问题的一种常用策略。 该算法回溯法有相似之处,但存在差异,分支限界法仅需获取满足约束条件的一个最优路径,并按照广度优先或最小成本优先的原则来探索解空间树。 树 T 被构建为子集树或排列树,在探索过程中,每个节点仅被赋予一次成为扩展节点的机会,且会一次性生成其全部子节点。 针对布线问题的解决,队列式分支限界法可以被采用。 从起始位置 a 出发,将其设定为首个扩展节点,并将该扩展节点相邻且可通行的方格加入至活跃节点队列中,将这些方格标记为 1,即从起始方格 a 到这些方格的距离为 1。 随后,从活跃节点队列中提取队首节点作为下一个扩展节点,并将当前扩展节点相邻且未标记的方格标记为 2,随后将这些方格存入活跃节点队列。 这一过程将持续进行,直至算法探测到目标方格 b 或活跃节点队列为空。 在实现上述算法时,必须定义一个类 Position 来表征电路板上方格的位置,其成员 row 和 col 分别指示方格所在的行和列。 在方格位置上,布线能够沿右、下、左、上四个方向展开。 这四个方向的移动分别被记为 0、1、2、3。 下述表格中,offset[i].row 和 offset[i].col(i=0,1,2,3)分别提供了沿这四个方向前进 1 步相对于当前方格的相对位移。 在 Java 编程语言中,可以使用二维数组...
源码来自:https://pan.quark.cn/s/a4b39357ea24 在VC++开发过程中,对话框(CDialog)作为典型的用户界面组件,承担着用户进行信息交互的重要角色。 在VS2008SP1的开发环境中,常常需要满足为对话框配置个性化背景图片的需求,以此来优化用户的操作体验。 本案例将系统性地阐述在CDialog框架下如何达成这一功能。 首先,需要在资源设计工具中构建一个新的对话框资源。 具体操作是在Visual Studio平台中,进入资源视图(Resource View)界面,定位到对话框(Dialog)分支,通过右键选择“插入对话框”(Insert Dialog)选项。 完成对话框内控件的布局设计后,对对话框资源进行保存。 随后,将着手进行背景图片的载入工作。 通常有两种主要的技术路径:1. **运用位图控件(CStatic)**:在对话框界面中嵌入一个CStatic控件,并将其属性设置为BST_OWNERDRAW,从而具备自主控制绘制过程的权限。 在对话框的类定义中,需要重写OnPaint()函数,负责调用图片资源并借助CDC对象将其渲染到对话框表面。 此外,必须合理处理WM_CTLCOLORSTATIC消息,确保背景图片的展示不会受到其他界面元素的干扰。 ```cppvoid CMyDialog::OnPaint(){ CPaintDC dc(this); // 生成设备上下文对象 CBitmap bitmap; bitmap.LoadBitmap(IDC_BITMAP_BACKGROUND); // 获取背景图片资源 CDC memDC; memDC.CreateCompatibleDC(&dc); CBitmap* pOldBitmap = m...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值