AI学习指南深度学习篇-对比学习的数学原理

AI学习指南深度学习篇——对比学习的数学原理

引言

在深度学习的领域中,对比学习作为一种无监督学习方法,逐渐引起了学术界和工业界的广泛关注。对比学习通过对样本间的相似性度量,来提升模型的特征表示能力,成为近年来研究的热点之一。本文将探讨对比学习的数学原理,包括对比损失函数的数学推导、样本相似性度量的数学表达,并解释对比学习的训练过程及其数学推导。

一、对比学习的背景

对比学习旨在通过成对样本之间的比较来学习特征表示。在传统的监督学习中,我们依赖标记数据指导模型的学习,而对比学习则可以利用未标记数据进行特征学习。其基本思想是,将相似样本的表示在嵌入空间中拉近,而将不同样本的表示推远。

1.1 对比学习的动机

对比学习的日益流行,源于其在视觉任务、自然语言处理等领域中优越的表现。通过利用相似性的信息,不仅可以降低对标记数据的依赖,还能在小数据集上获得更好的性能。

二、对比损失函数

对比学习的核心在于对比损失函数,它是衡量正负样本对间相似性的重要指标。通常我们使用的对比损失函数包括:对比损失(Contrastive Loss)和三元组损失(Triplet Loss)。

2.1 对比损失函数的数学推导

对比损失函数通常定义为:

L contrastive = 1 2 N ∑ i = 1 N ( y i D i 2 + ( 1 − y i ) max ⁡ ( 0 , m − D i ) 2 ) L_{\text{contrastive}} = \frac{1}{2N} \sum_{i=1}^{N} (y_i D_i^2 + (1-y_i) \max(0, m - D_i)^2) Lcontrastive=2N1i=1N(yiDi2+(1yi)max(0,mDi)2)

其中, D i D_i Di 是第 i i i 对样本的距离, y i y_i yi 是样本对的标签(1表相似,0表不相似), m m m 是一个预设的边界, N N N 是样本对总数。

数学推导:

  1. 样本距离的定义:
    在对比学习中,我们通常使用欧几里得距离或余弦相似度来计算样本之间的距离。欧几里得距离定义为:

    D i = ∣ ∣ f ( x i ) − f ( x j ) ∣ ∣ 2 2 D_i = ||\mathbf{f}(x_i) - \mathbf{f}(x_j)||_2^2 Di=∣∣f(xi)f(xj)22

    其中, f ( x ) \mathbf{f}(x) f(x) 表示样本 x x x 的特征表示。

  2. 损失函数的两个部分:

    • 当样本对相似( y i = 1 y_i = 1 yi=1)时,损失函数的第一部分 y i D i 2 y_i D_i^2 yiDi2促使相似样本对的距离趋近于0。
    • 当样本对不相似( y i = 0 y_i = 0 yi=0)时,损失函数的第二部分促使不同样本对的距离大于边界 m m m

2.2 示例

假设我们有如下数据对:

样本对标签
( x 1 , x 2 ) (x_1, x_2) (x1,x2)1
( x 3 , x 4 ) (x_3, x_4) (x3,x4)0

运用对比损失函数计算:

[ D 1 = ∣ ∣ f ( x 1 ) − f ( x 2 ) ∣ ∣ 2 2 , D 2 = ∣ ∣ f ( x 3 ) − f ( x 4 ) ∣ ∣ 2 2 ] [ D_1 = ||\mathbf{f}(x_1) - \mathbf{f}(x_2)||_2^2, \quad D_2 = ||\mathbf{f}(x_3) - \mathbf{f}(x_4)||_2^2 ] [D1=∣∣f(x1)f(x2)22,D2=∣∣f(x3)f(x4)22]

假设 D 1 = 0.5 , D 2 = 1.5 D_1 = 0.5, D_2 = 1.5 D1=0.5,D2=1.5,并设定边界 m = 1 m = 1 m=1,则损失为:

L contrastive = 1 2 ( 1 ⋅ 0.5 + 1 ⋅ max ⁡ ( 0 , 1 − 1.5 ) 2 ) = 1 2 ⋅ 0.5 = 0.25 L_{\text{contrastive}} = \frac{1}{2} \left( 1 \cdot 0.5 + 1 \cdot \max(0, 1 - 1.5)^2 \right) = \frac{1}{2} \cdot 0.5 = 0.25 Lcontrastive=21(10.5+1max(0,11.5)2)=210.5=0.25

三、样本相似性度量

在对比学习中,样本的相似性度量是重要的一环,主要通过计算样本间的距离来实现。常用的相似性度量包括欧几里得距离和余弦相似度。

3.1 欧几里得距离

欧几里得距离是最常用的距离度量之一,定义为:

D ( a , b ) = ∣ ∣ a − b ∣ ∣ 2 = ∑ i = 1 n ( a i − b i ) 2 D(\mathbf{a}, \mathbf{b}) = ||\mathbf{a} - \mathbf{b}||_2 = \sqrt{\sum_{i=1}^{n} (a_i - b_i)^2} D(a,b)=∣∣ab2=i=1n(aibi)2

其中, a \mathbf{a} a b \mathbf{b} b 为样本的特征向量。

3.2 余弦相似度

余弦相似度更适合高维稀疏数据,定义为:

cosine_similarity ( a , b ) = a ⋅ b ∣ ∣ a ∣ ∣ 2 ∣ ∣ b ∣ ∣ 2 \text{cosine\_similarity}(\mathbf{a}, \mathbf{b}) = \frac{\mathbf{a} \cdot \mathbf{b}}{||\mathbf{a}||_2 ||\mathbf{b}||_2} cosine_similarity(a,b)=∣∣a2∣∣b2ab

3.3 示例

假设我们有如下两个样本的特征向量:

a = [ 1 , 2 , 3 ] , b = [ 4 , 5 , 6 ] \mathbf{a} = [1, 2, 3], \quad \mathbf{b} = [4, 5, 6] a=[1,2,3],b=[4,5,6]

  1. 计算欧几里得距离

D ( a , b ) = ( 1 − 4 ) 2 + ( 2 − 5 ) 2 + ( 3 − 6 ) 2 = 9 + 9 + 9 = 27 ≈ 5.196 D(\mathbf{a}, \mathbf{b}) = \sqrt{(1-4)^2 + (2-5)^2 + (3-6)^2} = \sqrt{9 + 9 + 9} = \sqrt{27} \approx 5.196 D(a,b)=(14)2+(25)2+(36)2 =9+9+9 =27 5.196

  1. 计算余弦相似度

a ⋅ b = 1 ⋅ 4 + 2 ⋅ 5 + 3 ⋅ 6 = 4 + 10 + 18 = 32 \mathbf{a} \cdot \mathbf{b} = 1 \cdot 4 + 2 \cdot 5 + 3 \cdot 6 = 4 + 10 + 18 = 32 ab=14+25+36=4+10+18=32

∣ ∣ a ∣ ∣ 2 = 1 2 + 2 2 + 3 2 = 14 , ∣ ∣ b ∣ ∣ 2 = 4 2 + 5 2 + 6 2 = 77 ||\mathbf{a}||_2 = \sqrt{1^2 + 2^2 + 3^2} = \sqrt{14}, \quad ||\mathbf{b}||_2 = \sqrt{4^2 + 5^2 + 6^2} = \sqrt{77} ∣∣a2=12+22+32 =14 ,∣∣b2=42+52+62 =77

cosine_similarity ( a , b ) = 32 14 ⋅ 77 \text{cosine\_similarity}(\mathbf{a}, \mathbf{b}) = \frac{32}{\sqrt{14} \cdot \sqrt{77}} cosine_similarity(a,b)=14 77 32

四、对比学习的训练过程

对比学习的训练过程主要包括以下几个步骤:

  1. 数据准备:选择原始数据并生成正负样本对,如通过数据增强生成相似样本。
  2. 特征提取:使用神经网络提取样本的特征表示。
  3. 计算损失:根据シ重对计算对比损失函数,更新网络权重。
  4. 模型评估:使用验证集评估模型特征表示的有效性。

4.1 训练过程示例

假设我们正在训练一个图像分类的对比学习模型,初步步骤如下:

  1. 数据准备

    假设我们有10张图片,通过旋转、反转和缩放等操作生成正样本。

  2. 特征提取

    使用卷积神经网络(CNN)提取特征,例如ResNet。

  3. 损失计算

    对生成的正负样本对使用对比损失函数计算损失。
    设定超参数,例如学习率和训练周期。

  4. 模型评估

    选择一些相关任务(如分类任务)进行评估,测试模型在下游任务中的表现。

结论

对比学习是一种具有广泛适应性的无监督学习方法,通过相似性比较学习样本的特征表示。本文详细探讨了对比学习的数学原理,包括对比损失函数的推导、样本之间的相似性度量,以及对比学习的训练过程。随着对比学习的不断深入,应用场景也将更加广泛,期待未来的研究能带来更多的创新和成果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/57440.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言 | Leetcode C语言题解之第502题IPO

题目&#xff1a; 题解&#xff1a; #define MIN(a, b) ((a) < (b) ? (a) : (b)) #define MAX_INT_NUMBER 0x7FFFFFFEtypedef struct {int capital;int profit; } ProNode;int CompareProfit(const ProNode *a, const ProNode *b) { /* 从大到小排序 */return b->pr…

根据发生异常的汇编指令以及函数调用堆栈,从内存的角度出发,估计出问题的可能原因,确定排查方向,快速定位C++软件问题

目录 1、前言 2、初步分析dump文件 3、加载更多模块的pdb文件&#xff0c;可能能看到更多行的函数调用堆栈 4、从内存的角度去看&#xff0c;估计是访问了野指针导致的&#xff0c;沿着这个怀疑的方向快速地定位了问题 5、最后 C软件异常排查从入门到精通系列教程&#xf…

力扣OJ算法题:合并两个有序链表

—————————————————————————————————————————— 正文开始 OJ算法题&#xff1a;合并两个有序链表 思路 创建一个新的空链表&#xff08;可以用malloc优化&#xff09;和两个指针L1、L2分别指向两个链表&#xff0c;遍历两个链表&am…

taro底部导航,Tabbar

没有特别的幸运&#xff0c;那么就特别的努力&#xff01;&#xff01;&#xff01; 配置信息 官方给出&#xff1a; 在 app.config 中按正常填写 tabBar 项的相关配置&#xff08;为了向下兼容&#xff09;&#xff0c;并把 tabBar 项的 custom 字段设置为 true。但我试过 c…

Chromium 中chrome.contextMenus扩展接口实现分析c++

一、chrome.contextMenus 使用 chrome.contextMenus API 向 Google Chrome 的上下文菜单中添加项。您可以选择从右键菜单中添加的对象类型&#xff0c;例如图片、超链接和页面。 权限 contextMenus 您必须在扩展程序的清单中声明 "contextMenus" 权限&#xff0c…

R语言机器学习算法实战系列(十二)线性判别分析分类算法 (Linear Discriminant Analysis)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍LDA的原理LDA的步骤教程下载数据加载R包导入数据数据预处理数据描述数据切割构建模型预测测试数据评估模型模型准确性混淆矩阵模型评估指标ROC CurvePRC Curve保存模型总结优点:缺…

Ubuntu(22.04)本地部署Appsmith

Ubuntu&#xff08;22.04&#xff09;安装Appsmith 简要介绍 Appsmith 是一个开源的低代码开发平台&#xff0c;旨在帮助开发者和非开发者快速构建定制化的内部应用程序和管理工具。通过直观的拖拽界面和丰富的预配置组件&#xff0c;Appsmith 让用户无需编写大量代码即可创建…

Postman使用-基础篇

前言 本教程将结合业界广为推崇和使用的RestAPI设计典范Github API&#xff0c;详细介绍Postman接口测试工具的使用方法和实战技巧。 在开始这个教程之前&#xff0c;先聊一下为什么接口测试在现软件行业如此重要&#xff1f; 为什么我们要学习Postman&#xff1f; 现代软件…

数据轻松上云——Mbox边缘计算网关

随着工业4.0时代的到来&#xff0c;工厂数字化转型已成为提升生产效率、优化资源配置、增强企业竞争力的关键。我们凭借其先进的边缘计算网关与云平台技术&#xff0c;为工厂提供了高效、稳定的数据采集与上云解决方案。本文将为您介绍Mbox边缘计算网关如何配合明达云平台&…

React 基础阶段学习计划

React 基础阶段学习计划 目标 能够创建和使用React组件。理解并使用State和Props。掌握事件处理和表单处理。 学习内容 环境搭建 安装Node.js和npm 访问 Node.js官网 下载并安装最新版本的Node.js。打开终端或命令行工具&#xff0c;输入 node -v 和 npm -v 检查是否安装…

【Python】爬虫

Python爬虫是一种自动化下载网页内容的程序。以下是一个简单的Python爬虫示例&#xff0c;使用requests库获取网页&#xff0c;并用BeautifulSoup解析网页。 首先&#xff0c;你需要安装必要的库&#xff1a; pip install requests pip install beautifulsoup4 以下是一个简…

基于SpringBoot微信小程序的书院预约系统【附源码】

基于SpringBoot微信小程序的书院预约系统 效果如下&#xff1a; 微信小程序首页界面 用户登录界面 书院信息界面 会议室界面 管理员登录界面 管理员主界面 用户界面 书院信息界面 会议室界面 会议室预约界面 研究背景 随着社会的快速发展&#xff0c;计算机技术的影响是全面…

SpringBoot 单元测试 - 登录认证在 Spring Boot 上的标准单元测试写法。

&#x1f449; 请投票支持这款 全新设计的脚手架 &#xff0c;让 Java 再次伟大&#xff01; 不要使用 SpringBootTest 使用 SpringBootTest 进行单元测试会启动整个 Spring Boot 容器&#xff0c;并引入整个项目的 development&test 依赖。缺点是速度慢、体积大、测试目标…

HarmonyOS Next应用开发——图像PixelMap变换

【高心星出品】 图像变换 图片处理指对PixelMap进行相关的操作&#xff0c;如获取图片信息、裁剪、缩放、偏移、旋转、翻转、设置透明度、读写像素数据等。图片处理主要包括图像变换、位图操作&#xff0c;本文介绍图像变换。 图形裁剪 // 裁剪图片 x&#xff0c;y为裁剪的起…

【element-tiptap】如何把分隔线改造成下拉框的形式?

当前的分隔线只有细横线这一种形式 但是咱们可以看一下wps中的分隔线&#xff0c;花里胡哨的 这些在wps里都需要使用快捷键打出来&#xff0c;真没找到菜单在哪里 那么这篇文章咱们就来看一下如何改造分隔线组件&#xff0c;改造成下拉框的形式&#xff0c;并且把咱们想要的分…

如何调试浏览器中的内存泄漏?

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介⭐ 如何调试浏览器中的内存泄漏&#xff1f;1. 什么是内存泄漏&#xff1f;2. 调试内存泄漏的工具3. 如何使用 Memory 面板进行内存调试3.1 获取内存快照&#xff08;Heap Snapshot&#xff09;获取内存快照的步骤&#xff1a;快照…

【ShuQiHere】深入解析数字电路中的锁存器与触发器

深入解析数字电路中的锁存器与触发器 &#x1f916;&#x1f50c; 在数字电路设计中&#xff0c;**锁存器&#xff08;Latch&#xff09;和触发器&#xff08;Flip-Flop&#xff09;**是实现时序逻辑的基本元件。它们能够存储状态&#xff0c;是构建复杂数字系统的关键。本文将…

Dockerfile 中关于 RUN 的奇怪写法 -- 以 | 开头

在一个大型的官方镜像中 &#xff0c;我通过 docker history --no-trunc <image_id> 看到&#xff0c;该镜像某一步的构建过程是&#xff1a; RUN |3 CUDA_VERSION12.4.1.003 CUDA_DRIVER_VERSION550.54.15 JETPACK_HOST_MOUNTS /bin/sh -c if [ -n "${JETPACK_HOS…

如何自定义一个自己的 Spring Boot Starter 组件(从入门到实践)

文章目录 一、什么是 Spring Boot Starter&#xff1f;二、为什么要自定义 Starter&#xff1f;三、自定义 Starter 的基本步骤1. 创建 Maven 项目2. 配置 pom.xml3. 创建自动配置类4. 创建业务逻辑类5. 创建 spring.factories 四、使用自定义 Starter五、总结推荐阅读文章 在使…

Android广播限制Background execution not allowed: receiving Intent { act=

“Background execution not allowed: receiving Intent”这个错误信息通常出现在Android应用开发中&#xff0c;特别是在处理后台任务或接收广播&#xff08;Broadcast&#xff09;时。这个错误表明应用试图在后台执行某些操作&#xff0c;但Android系统出于电池优化和用户体验…