介绍交叉熵损失(Cross-Entropy Loss)以及交叉熵在对比学习中的应用:中英双语
中文版
本文解释 交叉熵损失(Cross-Entropy Loss),并结合对比学习的应用说明它如何工作,以及如何让正样本对更近、负样本对更远。
什么是交叉熵损失?
交叉熵损失是机器学习中常用的一种损失函数,主要用于分类任务,用来衡量模型预测的概率分布和真实分布之间的差异。
其公式为:
L = − ∑ i = 1 C y i log ( y ^ i ) L = -\sum_{i=1}^C y_i \log(\hat{y}_i) L=−i=1∑Cyilog(y^i)
- ( C C C ):类别数。
- ( y i y_i yi ):真实类别分布(通常是独热编码,只有真实类别对应位置为 1)。
- ( y ^ i \hat{y}_i y^i ):模型预测的概率分布(通常是通过 softmax 得到的概率值)。
如果只考虑单一样本,交叉熵公式可以简化为:
L = − log ( y ^ j ) L = -\log(\hat{y}_j) L=−log(y^j)
- ( j j j ) 是真实类别的索引。
- ( y ^ j \hat{y}_j y^j ) 是模型预测的真实类别概率。
交叉熵损失如何工作?
-
惩罚错误预测:
- 如果模型预测的真实类别概率 ( y ^ j \hat{y}_j y^j ) 较小,则损失 ( − log ( y ^ j ) -\log(\hat{y}_j) −log(y^j) ) 很大,从而对模型施加较大的惩罚,迫使模型学习更高的真实类别概率。
- 例如,若 ( y ^ j = 0.1 \hat{y}_j = 0.1 y^j=0.1 ),损失 ( − log ( 0.1 ) = 2.3 -\log(0.1) = 2.3 −log(0.1)=2.3 )。
-
奖励正确预测:
- 如果模型预测的真实类别概率 ( y ^ j \hat{y}_j y^j ) 较大(接近 1),损失很小,表示模型在这一样本上的预测接近理想。
- 例如,若 ( y ^ j = 0.9 \hat{y}_j = 0.9 y^j=0.9 ),损失 ( − log ( 0.9 ) = 0.11 -\log(0.9) = 0.11 −log(0.9)=0.11 )。
-
鼓励模型信心:
- 模型预测越接近 1 或 0(置信度更高),交叉熵的结果会更低,模型学习的效果越好。
Softmax 与交叉熵的关系
交叉熵损失通常和 Softmax 一起使用,Softmax 是将原始的 logits 转换为概率分布的函数:
y ^ i = exp ( z i ) ∑ k = 1 C exp ( z k ) \hat{y}_i = \frac{\exp(z_i)}{\sum_{k=1}^C \exp(z_k)} y^i=∑k=1Cexp(zk)exp(zi)
其中:
- ( z i z_i zi ):模型输出的 logits 值(未归一化的分数)。
- ( y ^ i \hat{y}_i y^i ):Softmax 输出的归一化概率。
Softmax 确保输出概率总和为 1,使得它适合作为概率分布与真实标签进行比较。
交叉熵在对比学习中的应用
在对比学习任务(如 CLIP)中,交叉熵损失被用来拉近正样本对的相似度,同时拉远负样本对的相似度。
例如,在 CLIP 模型中:
-
输入:
- 一批图像和对应的文本描述。
- 模型通过编码器生成图像和文本的嵌入向量 ( z_image , z_text \text{z\_image}, \text{z\_text} z_image,z_text )。
-
计算 logits(相似度矩阵):
- 两个向量的相似度通常用点积或余弦相似度计算:
logits_per_image [ i ] [ j ] = sim ( z_image i , z_text j ) \text{logits\_per\_image}[i][j] = \text{sim}(\text{z\_image}_i, \text{z\_text}_j) logits_per_image[i][j]=sim(z_imagei,z_textj)
- 两个向量的相似度通常用点积或余弦相似度计算:
-
计算概率分布:
- 使用 softmax 将相似度矩阵的每一行归一化为概率分布,表示图像 ( i i i ) 对应文本 ( j j j ) 的匹配概率。
-
交叉熵损失:
- 对于每个图像 ( i i i ),真实匹配文本的索引为 ( j j j ),交叉熵损失是:
L = − log ( P ( positive ) ) L = -\log(P(\text{positive})) L=−log(P(positive)) - ( P ( positive ) P(\text{positive}) P(positive) ) 是正样本的 softmax 概率值。
- 对于每个图像 ( i i i ),真实匹配文本的索引为 ( j j j ),交叉熵损失是:
举例说明交叉熵如何拉近正样本,拉远负样本
假设例子:
-
批量大小 = 3,logits(相似度矩阵):
logits_per_image = [ 2.0 0.5 − 1.0 0.3 1.8 0.2 − 0.5 0.4 1.5 ] \text{logits\_per\_image} = \begin{bmatrix} 2.0 & 0.5 & -1.0 \\ 0.3 & 1.8 & 0.2 \\ -0.5 & 0.4 & 1.5 \end{bmatrix} logits_per_image= 2.00.3−0.50.51.80.4−1.00.21.5 -
Softmax 概率:
- 第一行(图像 1 的概率分布):
P ( positive ) = exp ( 2.0 ) exp ( 2.0 ) + exp ( 0.5 ) + exp ( − 1.0 ) ≈ 0.71 P(\text{positive}) = \frac{\exp(2.0)}{\exp(2.0) + \exp(0.5) + \exp(-1.0)} \approx 0.71 P(positive)=exp(2.0)+exp(0.5)+exp(−1.0)exp(2.0)≈0.71
P ( negative , j = 2 ) ≈ 0.23 , P ( negative , j = 3 ) ≈ 0.06 P(\text{negative}, j=2) \approx 0.23, \quad P(\text{negative}, j=3) \approx 0.06 P(negative,j=2)≈0.23,P(negative,j=3)≈0.06
- 第一行(图像 1 的概率分布):
-
交叉熵损失:
- 如果图像 1 和文本 1 是正样本对:
L = − log ( P ( positive ) ) ≈ − log ( 0.71 ) = 0.34 L = -\log(P(\text{positive})) \approx -\log(0.71) = 0.34 L=−log(P(positive))≈−log(0.71)=0.34
- 如果图像 1 和文本 1 是正样本对:
-
优化目标:
- 提高正样本概率: 例如将 logits 中的 ( 2.0 ) 调高。
- 降低负样本概率: 例如将 logits 中的 ( 0.5, -1.0 ) 调低。
梯度更新
通过反向传播,交叉熵损失会对 logits 施加以下影响:
- 正样本对: 提升其 logits 值,让正样本的相似度更高。
- 负样本对: 降低其 logits 值,让负样本的相似度更低。
具体过程请参考笔者的另一篇博客:通过模拟对CLIP进行解释:如何通过梯度提升正样本的相似度?
总结
在对比学习中,交叉熵损失结合 softmax 通过最大化正样本对的概率 ( P ( positive ) P(\text{positive}) P(positive) ) 和最小化负样本对的概率,从而学习到一个区分度更高的嵌入空间。这种方法被广泛应用于大模型(如 CLIP、SimCLR)中,用于学习视觉与文本、不同视角图像等的语义匹配。
英文版
What is Cross-Entropy Loss?
Cross-entropy loss measures the difference between two probability distributions:
- The true labels’ distribution (ground truth).
- The predicted probability distribution (from the model, e.g., softmax output).
The formula for cross-entropy loss is:
L = − ∑ i = 1 C y i log ( y ^ i ) L = -\sum_{i=1}^C y_i \log(\hat{y}_i) L=−i=1∑Cyilog(y^i)
Where:
- ( C C C ): The number of classes.
- ( y i y_i yi ): The true label for class ( i i i ) (1 if true, 0 otherwise, in one-hot encoding).
- ( y ^ i \hat{y}_i y^i ): The predicted probability for class ( i i i ) (output of the softmax).
For a single example, if the ground truth class is ( j j j ), the loss simplifies to:
L = − log ( y ^ j ) L = -\log(\hat{y}_j) L=−log(y^j)
How Does Cross-Entropy Work?
-
Penalizes incorrect predictions:
- If the model predicts a probability far from the true class (( y ^ j \hat{y}_j y^j ) is small), the loss is high because ( − log ( y ^ j ) -\log(\hat{y}_j) −log(y^j) ) is large.
- Example: If ( y ^ j = 0.1 \hat{y}_j = 0.1 y^j=0.1 ), then ( − log ( 0.1 ) = 2.3 -\log(0.1) = 2.3 −log(0.1)=2.3 ).
-
Rewards correct predictions:
- If the model predicts a high probability for the true class (( y ^ j \hat{y}_j y^j ) close to 1), the loss is small.
- Example: If ( y ^ j = 0.9 \hat{y}_j = 0.9 y^j=0.9 ), then ( − log ( 0.9 ) = 0.11 -\log(0.9) = 0.11 −log(0.9)=0.11 ).
-
Encourages probabilistic confidence:
- Predictions close to 0 or 1 result in higher confidence and a lower loss.
Connection to Softmax
Cross-entropy loss is typically used after a softmax activation function, which normalizes raw logits into probabilities:
y ^ i = exp ( z i ) ∑ k = 1 C exp ( z k ) \hat{y}_i = \frac{\exp(z_i)}{\sum_{k=1}^C \exp(z_k)} y^i=∑k=1Cexp(zk)exp(zi)
Where:
- ( z i z_i zi ): The raw score (logit) for class ( i i i ).
- ( y ^ i \hat{y}_i y^i ): The predicted probability for class ( i i i ).
The softmax ensures that the output probabilities sum to 1, making them suitable for comparing to one-hot encoded true labels.
How It Maximizes Positive Class Similarity (Contrastive Setting)
In contrastive learning (e.g., CLIP), cross-entropy loss is used to pull positive pairs closer together while pushing negative pairs apart. Here’s how it works:
-
Positive Pair Similarity:
- If the predicted similarity for the positive pair (e.g., ( y ^ positive \hat{y}_{\text{positive}} y^positive )) is high, ( − log ( y ^ positive ) -\log(\hat{y}_{\text{positive}}) −log(y^positive) ) is small, reducing the loss. This encourages the model to further increase the similarity.
-
Negative Pair Similarity:
- For negative pairs, their probabilities are part of the denominator in the softmax:
P ( positive ) = exp ( sim ( pos ) ) exp ( sim ( pos ) ) + ∑ exp ( sim ( neg ) ) P(\text{positive}) = \frac{\exp(\text{sim}(\text{pos}))}{\exp(\text{sim}(\text{pos})) + \sum \exp(\text{sim}(\text{neg}))} P(positive)=exp(sim(pos))+∑exp(sim(neg))exp(sim(pos)) - Increasing ( exp ( sim ( neg ) ) \exp(\text{sim}(\text{neg})) exp(sim(neg)) ) reduces ( P ( positive ) P(\text{positive}) P(positive) ), increasing the loss. Therefore, the model learns to lower the similarity for negative pairs.
- For negative pairs, their probabilities are part of the denominator in the softmax:
By optimizing the cross-entropy loss, the model dynamically adjusts logits to maximize the positive pair similarity while minimizing the negative pair similarity.
后记
2024年12月13日22点11分于上海,在GPT4o大模型辅助下完成。
相关文章:
介绍交叉熵损失(Cross-Entropy Loss)以及交叉熵在对比学习中的应用:中英双语
中文版 本文解释 交叉熵损失(Cross-Entropy Loss),并结合对比学习的应用说明它如何工作,以及如何让正样本对更近、负样本对更远。 什么是交叉熵损失? 交叉熵损失是机器学习中常用的一种损失函数,主要用于…...
RabbitMQ的几个概念
注:这篇文章会随时添加新的内容,就是将RabbtiMQ中的概念添加到这里。助力大家的学习 自动ACK和手动ACK的区别 自动ACK和手动ACK是消息队列中两种不同的消息确认机制,它们在消息处理的可靠性和灵活性方面存在显著差异。 自动ACK(…...
Ollama部署大模型并安装WebUi
Ollama用于在本地运行和部署大型语言模型(LLMs)的工具,可以非常方便的部署本地大模型 安装 Linux curl -fsSL https://ollama.com/install.sh | sh我是ubuntu系统安装,其他系统可以看项目的开源地址有写 GitHub - ollama/ollama: Get up and running with Llama 3, Mist…...
Debedium如何忽略Oracle的purge命令
报错 截至目前3.0版本,Debezium的Oracle Connector并不支持purge table这个指令。 所以,在使用Debezium解析Oracle变更的时候,如果在源端执行了类似 purge table "$BIN… 的语句,就会导致Debezium罢工,日志里显…...
PlantUML 语言
PlantUML 是一种开源工具,用于通过简单的文本描述生成 UML 图。它支持多种 UML 图类型,如类图、序列图、用例图、活动图、组件图、状态图等。PlantUML 语言非常简洁,采用类似编程语言的语法,允许用户使用文本定义模型,…...
linux的 .so和.ko文件分别是什么?主要区别是什么?
前言: .so和.ko文件的主要区别在于它们的应用层次和功能不同。 应用层次 .so文件:这是用户层的动态链接库(Shared Object),主要用于用户态的程序中。 它用于动态链接,多个程序可以共享同一个库文件&…...
XX服务器上的npm不知道咋突然坏了
收到同事的V,说是:182上的npm不知道咋突然坏了,查到这里了,不敢动了。 咱一定要抓重点:突然坏了。这里的突然肯定不是瞬间(大概率是上次可用,这次不可用,中间间隔了多长时间&#x…...
数据结构(优先级队列 :Priority Queue)
前言: 在计算机科学中,队列是一种非常常见的数据结构,它遵循先进先出(FIFO)的原则,也就是说,先进入队列的元素会先被处理。然而,在许多实际应用中,我们不仅仅需要按顺序…...
nginx.conf 请求时间部分参数说明新手教程
下面来说下nginx.conf 的部分参数,配置如下: http {include mime.types;default_type application/octet-stream;client_max_body_size 1000M;#log_format main $remote_addr - $remote_user [$time_local] "$request" # …...
【Linux-ubuntu通过USB传输程序点亮LED灯】
Linux-ubuntu通过USB传输程序点亮LED灯 一,初始化GPIO配置1.使能时钟2.其他寄存器配置 二,程序编译三,USB传输程序 一,初始化GPIO配置 1.使能时钟 使能就是一个控制信号,用于决定时钟信号是否能够有效的传递或者被使用,就像一个…...
《开源时间序列数据:探索与应用》
《开源时间序列数据:探索与应用》 一、开源时间序列数据概述二、热门的开源时间序列数据库1. InfluxDB2. TimescaleDB3. Prometheus4. OpenTSDB5. Graphite6. Druid 三、开源时间序列数据的应用场景1. 物联网领域2. 金融领域3. 运维监控领域4. 能源领域 四、开源时间…...
三相异步电动机跳闸的原因是什么?
三相异步电动机是现代工业生产和日常生活中广泛应用的一种电动机,因其结构简单、维护方便和功率范围广泛而受到广泛青睐。然而,在实际使用过程中,电动机的跳闸现象时有发生,这不仅影响了设备的正常运行,甚至可能导致经…...
连续思维链Coconut ,打开LLM推理新范式
语言与推理之间有着什么样内涵上的联系与本质上的差别? 系统二的长链复杂分步推理与系统一分别在训练时与推理时的正/反向传播链路、模型神经网络内部的潜在机制(虽然是黑盒)以及网络链路对应的模型训练过程中“压缩”的数据(认知)流形所映射出的隐含碎片化泛化分布…...
阿里云数据库MongoDB版助力极致游戏高效开发
客户简介 成立于2010年的厦门极致互动网络技术股份有限公司(以下简称“公司”或“极致游戏”),是一家集网络游戏产品研发与运营为一体的重点软件企业,公司专注于面向全球用户的网络游戏研发与运营。在整个产业链中,公…...
ESP32-S3模组上跑通ES8388(29)
接前一篇文章:ESP32-S3模组上跑通ES8388(28) 二、利用ESP-ADF操作ES8388 2. 详细解析 上一回解析到了es8388_init函数中的第11段也是最后一段代码,没有解析完,本回继续解析。为了便于理解和回顾,再次贴出该片段,在components\audio_hal\driver\es8388\es8388.c中,如下…...
使用ElasticSearch实现全文检索
文章目录 全文检索任务描述技术难点任务目标实现过程1. java读取Json文件,并导入MySQL数据库中2. 利用Logstah完成MySQL到ES的数据同步3. 开始编写功能接口3.1 全文检索接口3.2 查询详情 4. 前端调用 全文检索 任务描述 在获取到数据之后如何在ES中进行数据建模&a…...
通过k-means对相似度较高的语句进行分类
本文介绍了如何使用K-Means算法对相似度较高的语句进行分类,并附上java案例代码 import java.util.ArrayList; import java.util.List; import java.util.Random;public class KMeansTextClustering {public static void main(String[] args) {// 初始化语句数据集…...
国信华源科技赋能长江蓄滞洪区水闸管护项目验收成果报道
“碧水悠悠绕古城,闸启长江万象新。”近日,由北京国信华源科技有限公司倾力打造的万里长江蓄滞洪区水闸管护项目,圆满通过验收,为这片鱼米之乡的防洪安全注入了新的科技活力。 长江之畔,水闸挺立,犹如干堤上…...
HTML:表格重点
用表格就用table caption为该表上部信息,用来说明表的作用 thead为表头主要信息,效果加粗 tbody为表格中的主体内容 tr是 table row 表格的行 td是table data th是table heading表格标题 ,一般表格第一行的数据都是table heading...
wine的使用方法
wine版本 所有分支,新的主要版本: wine-x.0 All branches, release candidates:各分支、候选版本: wine-x.0-rcn Stable branch updates: 稳定分支更新: wine-x.0.z Development branch updates: wine-x.y wine *.exe “更改目…...
Linux服务器离线安装unzip包
Linux服务器离线安装unzip包 1. 安装unzip包的目的 解压Docker部署包和服务部署包。 2. 查看当前环境是否已经安装unzip rpm -qa | grep --color unzip3. 下载对应的离线包 地址:http://www.rpmfind.net/linux/rpm2html/search.php?query&submitSearch 例…...
Excel拆分脚本
Excel拆分 工作表按行拆分为工作薄 工作表按行拆分为工作薄 打开要拆分的Excel文件,使用快捷键(AltF11)打开脚本界面,选择要拆分的sheet,打开Module,在Module中输入脚本代码,然后运行脚本 Su…...
Mybatis---事务
目录 引入 一、事务存在的意义 1.事务是什么? 2.Mybatis关于事务的管理 程序员自己控制处理的提交和回滚 引入 一、事务存在的意义 1.事务是什么? 多个操作同时进行,那么同时成功,那么同时失败。这就是事务。 事务有四个特性…...
企业直播间媒体分发新闻转播拉流推广名单(金融财经科技类)
【本篇由 言同数字媒体直播分发 原创】随着直播与短视频成为各大企业营销的重要手段,如何选择合适的视频平台进行内容分发与拉流成为了企业关注的焦点。对于财经和科技类企业而言,选择具有专业受众群体和广泛传播能力的平台尤为重要。下面是一些可以帮助…...
华为FreeBuds Pro 4丢了如何找回?(附查找功能使用方法)
华为FreeBuds Pro 4查找到底怎么用?华为FreeBuds Pro 4有星闪精确查找和离线查找,离线查找功能涵盖播放铃声、导航定位、星闪精确查找、上线通知、丢失模式、遗落提醒等。星闪精确查找是离线查找的子功能,当前仅华为FreeBuds Pro 4充电盒支持…...
若依微服务登录密码加密传输解决方案
文章目录 一、需求提出二、应用场景三、解决思路四、注意事项五、完整代码第一步:前端对密码进行加密第二步:后端工具类实现 RSA 加解密功能第三步:登录接口中添加解密逻辑 六、运行结果总结 一、需求提出 在默认情况下,RuoYi 微…...
NVR小程序接入平台/设备EasyNVR深度解析H.265与H.264编码视频接入的区别
随着科技的飞速发展和社会的不断进步,视频压缩编码技术已经成为视频传输和存储中不可或缺的一部分。在众多编码标准中,H.265和H.264是最为重要的两种。今天我们来将深入分析H.265与H.264编码的区别。 一、H.265与H.264编码的区别 1、比特率与分辨率 H.…...
Redisson常用方法
Redisson 参考: 原文链接 定义:Redisson 是一个用于与 Redis 进行交互的 Java 客户端库 优点:很多 1. 入门 1.1 安装 <!--redission--> <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifa…...
html自带的input年月日(date) /时间(datetime-local)/星期(week)/月份(month)/时间(time)控件
年月日期控件 type"date" <input type"date" id"StartDate" valueDateTime.Now.ToString("yyyy-MM-dd") /> //设置值 $("#StartDate").val("2024-12-12"); //获取值 var StartDate$("#StartDate&quo…...
CSS系列(12)-- 响应式设计详解
前端技术探索系列:CSS 响应式设计详解 📱 致读者:掌握响应式设计的艺术 👋 前端开发者们, 今天我们将深入探讨 CSS 响应式设计,学习如何创建适应各种设备的网页布局。 响应式基础 🚀 视口设…...
如何做美食的视频网站/南京市网站seo整站优化
2019独角兽企业重金招聘Python工程师标准>>> 周五,耶,OSC 明天终于要上班啦!明天终于还是要上班啦!系不系很开森呢?duang ~ duang ~ duang~ 上班第一天,红包在哪里? 开源中国首席撸管…...
个人网站备案描述/今天的三个新闻
线程Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元。更多方法:start 线程准备就绪,等待CPU调度setName 为线程设置名称getName 获取线程名称setDaemon 设置为后台线程或前台线程(默认&…...
网站的建设费用分为/武汉网络营销公司排名
目录 1 数据库的设计 1.1 多表之间的关系 1.2 数据库设计的范式 2 数据库的备份与还原 1 数据库的设计 数据库中存放很多表,设计数据库就是设计表,而表就是对现实事物的抽象,设计数据库,需要明白表的关系,也要知道…...
wordpress 主题域名授权/阿里云域名查询
一.标识符 如类名,数字不能作为标识符的首字母(以字母或者下划线或者$开头且不能有空格) 注意和Python的区别,Python中标识符由字母、下划线和数字组成,且数字不能开头,也是严格区分大小写(但是…...
给我做网站的人老是给我留点尾巴/百度人工服务热线24小时
python常用模块-配置文档模块(configparser) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 ConfigParser模块用于生成和修改常见配置文档,当前模块的名称在 python 3.x 版本中变更为 configparser。类…...
企业建设门户网站有哪些/成都外贸seo
2019独角兽企业重金招聘Python工程师标准>>> 设CPU初始状态: CS2000H IP0000H 内存中存放的机器码和对应的汇编指令如图: 上图对应的指令执行过程如下: (1)mov ax,6622(2)jmp 1000:3(3)mov ax,0000(4)mov bx,ax(5)jmp bx(6)mov ax…...