介绍交叉熵损失(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 “更改目…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
全面解析数据库:从基础概念到前沿应用
在数字化时代,数据已成为企业和社会发展的核心资产,而数据库作为存储、管理和处理数据的关键工具,在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理,到社交网络的用户数据存储,再到金融行业的交易记录处理&a…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...
虚幻基础:角色旋转
能帮到你的话,就给个赞吧 😘 文章目录 移动组件使用控制器所需旋转:组件 使用 控制器旋转将旋转朝向运动:组件 使用 移动方向旋转 控制器旋转和移动旋转 缺点移动旋转:必须移动才能旋转,不移动不旋转控制器…...
