【2023/图对比/无负样本】基于无负样本损失和自适应增强的图对比学习

news2024/11/16 9:21:34

如果觉得我的分享有一定帮助,欢迎关注我的微信公众号 “码农的科研笔记”,了解更多我的算法和代码学习总结记录。或者点击链接扫码关注【2023/图对比/无负样本】基于无负样本损失和自适应增强的图对比学习

周天琪,杨艳,张继杰等.基于无负样本损失和自适应增强的图对比学习[J/OL].浙江大学学报(工学版):1-8[2023-02-27]

1 动机

图对比学习方法中对输入图进行随机增强和须利用负样本构造损失的问题,提出基于无负样本损失自适应增强的图对比学习框架。现实世界中获得有标签的图信息的代价是昂贵的,针对这一问题,自监督学习(self-supervised learning, SSL)范式为图表示学习提供了一种可行的解决方法。最典型的是对比学习. 对比学习通过最大化正样本对之间的一致性和负样本对之间的不一致性来学习特征编码器。目前,CV领域已经有相关工作解决了需要负样本的问题,例如BGRL、Bar-low Twings、孪生网络架构等。作者直接提出无负样本损失和自适应增强对比学习,典型将自适应数据增强域Barlow Twins损失函数结合。

2 方法

该框架计算一个图的 2 个变体视图的嵌入互相关矩阵,所采用的网络结构是完全对称的。

算法框图

2.1【生成视图进行自适应增强】

本研究设计的增强方案是量化节点间重要性,即保存重要性高的结构和属性不变,对重要性低的边和特征信息进行扰动。之前很多是随机进行,这样会对数据增强产生不利的影响。作者利用数据增强生成2个增强视图,包括改变图的结构和属性2个方面。

  • 结构方面:利用节点度中心性计算边的中心性,根据得到的边的重要性,以一定概率删除不重要的边。
  • 属性方面:在属性方面,通过将属性向量中不重要的维度替换为 0,掩盖节点属性信息

2.2 【无负样本对比loss】

组会-当下热门的深度自监督学习(基于正则化) https://www.bilibili.com/video/BV1t3411M7eT/

代码:https://github.com/facebookresearch/barlowtwins

Barlow Twins 损失函数是一种用于自监督学习的损失函数,由 Google Brain 团队的 Jure Zbontar 和 Li Jing 在 2021 年提出。该损失函数的主要目的是学习图像的特征表示,其关键思想是通过学习两个不同但相关的特征映射之间的相关性来优化网络参数。具体而言,Barlow Twins 损失函数利用了两个特征映射的 Gram 矩阵之间的相关性来衡量它们之间的相似度。Gram 矩阵是指由特征映射中的各个通道之间的内积组成的矩阵,可以看作是一种度量特征之间相关性的方式。因此,Barlow Twins 损失函数的核心思想是最小化两个特征映射的 Gram 矩阵之间的差异。Barlow Twins损失函数不依赖非对称神经网络架构。

具体而言,Barlow Twins 损失函数可以表示为:
L B T ≜ ∑ i ( 1 − C i i ) 2 ⏟ invariance term  + λ ∑ i ∑ j ≠ i C i j 2 ⏟ redundancy redustition terinps  \mathcal{L}_{\mathcal{B} \mathcal{T}} \triangleq \underbrace{\sum_{i}\left(1-\mathcal{C}_{i i}\right)^{2}}_{\text {invariance term }}+\lambda \underbrace{\sum_{i} \sum_{j \neq i} \mathcal{C}_{i j}^{2}}_{\text {redundancy redustition terinps }} LBTinvariance term  i(1Cii)2+λredundancy redustition terinps  ij=iCij2
其中 λ \lambda λ 是一个正常数,用来权衡两项之间的重要性, C C C 是两个相同网络输出embeedings之间计算得到的互相关矩阵:

C i j ≜ ∑ b z b , i A z b , j B ∑ b ( z b , i A ) 2 ∑ b ( z b , j B ) 2 \mathcal{C}_{i j} \triangleq \frac{\sum_{b} z_{b, i}^{A} z_{b, j}^{B}}{\sqrt{\sum_{b}\left(z_{b, i}^{A}\right)^{2}} \sqrt{\sum_{b}\left(z_{b, j}^{B}\right)^{2}}} Cijb(zb,iA)2 b(zb,jB)2 bzb,iAzb,jB
互相关矩阵其中, b b b 索引batch内样本, i , j i,j ij 索引网络输出的向量维度。 C C C 是一个方阵,大小为网络输出的维数,他的值介于-1 (完全负相关) 和 1 (完全相关) 之间。

实践代码如下所示:

  • 假设sizes[-1]等于128,batch size等于64,每个输入图像的大小为3x32x32,我们可以用一个4层卷积神经网络作为backbone,并将其输出嵌入到128维空间中。这将得到两个形状为(64, 128)的矩阵z1和z2。
  • 现在,我们将这两个矩阵传递给BatchNorm1d层,该层将对它们进行标准化处理。具体来说,对于每个特征通道,它会减去均值并除以方差。这将产生两个标准化的形状为(64, 128)的矩阵。
  • 然后,我们将z1的转置和z2相乘,得到一个(128, 128)的交叉相关矩阵c。
    我们将这个交叉相关矩阵除以batch size,然后使用all_reduce函数将它们在多个GPU之间求和。
  • 接下来,我们计算对角线元素和非对角线元素的损失值。其中,对角线元素代表两个输入中相同的特征之间的相似度,而非对角线元素代表不同的特征之间的相似度。通过计算对角线元素减1的平方和来强制鼓励同类之间的相似度。通过计算非对角线元素的平方和来强制鼓励异类之间的不同。
  • 最后,将这两个损失相加以得到最终的损失值。
# normalization layer for the representations z1 and z2
self.bn = nn.BatchNorm1d(sizes[-1], affine=False)
def off_diagonal(x):
    # return a flattened view of the off-diagonal elements of a square matrix
    n, m = x.shape
    assert n == m
    return x.flatten()[:-1].view(n - 1, n + 1)[:, 1:].flatten()
def forward(self, y1, y2):
        z1 = self.projector(self.backbone(y1))
        z2 = self.projector(self.backbone(y2))

        # empirical cross-correlation matrix
        c = self.bn(z1).T @ self.bn(z2)

        # sum the cross-correlation matrix between all gpus
        c.div_(self.args.batch_size)#将张量 c 中的所有元素都除以 self.args.batch_size,并将结果存回到张量 c 中。
        torch.distributed.all_reduce(c) #在分布式深度学习中,所有计算节点需要对梯度进行聚合操作以更新模型权重。all_reduce 操作可以将梯度从所有节点中收集并相加,以便在所有节点上计算相同的梯度更新。这有助于确保在所有节点上训练的模型参数保持同步。

        on_diag = torch.diagonal(c).add_(-1).pow_(2).sum()
        off_diag = off_diagonal(c).pow_(2).sum()
        loss = on_diag + self.args.lambd * off_diag
        return loss

3 总结

移花接木idea有了

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

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

相关文章

CCNP350-401学习笔记(601-650题)

601、What is a characteristic of Cisco StackWise technology? A. It supports devices that are geographically separated. B. It is supported on the Cisco 4500 series. C. It combines exactly two devices.D. It uses proprietary cabling 602、Refer to the exhibi…

低代码开发平台真的靠谱吗?

低代码开发平台真的靠谱吗?这么跟你说吧: 你想用美图秀秀实现PS的修图效果但失败了,转头就说美图秀秀垃圾,是不是无理取闹你想用剪映实现PR的视频剪辑效果但失败了,转头就说剪映啥也不是,是不是在无理取闹…

操作指南:如何高效使用Facebook Messenger销售(一)

在销售方面, Facebook Messenger 是许多各种规模的企业的首选渠道。这篇文章将向您介绍使用 Messenger 作为销售渠道。我们还将指导您完成用智能客服工具SaleSmartly(ss客服)将您的 Facebook Messenger 销售更上一层楼。配图来源:SaleSmartly&#xff08…

JS#2 对象

一. Array对象定义var 变量名 new Array(元素列表);var 变量名 [元素列表];访问arr[索引] 值;注意JS数组类似于Java的集合, 长度, 类型都可变常用的属性和方法属性: length 数组元素的个数方法: push( ) 添加元素splice( ) 删除元素代码: <!DOCTYPE html> <html la…

day55-day56【代码随想录】二刷数组

文章目录前言一、字符串的排列&#xff08;力扣567&#xff09;【滑动窗口】二、找到字符串中所有字母异位词&#xff08;力扣438&#xff09;【滑动窗口】三、串联所有单词的子串&#xff08;力扣30&#xff09;【滑动窗口】****【hard】每日一题day55&#xff1a;合并相似的物…

面试题HTML篇(一)

目录 一、meta 标签可以做什么 四、行内元素、块级元素、空元素 元素之间的转换问题&#xff1a; 五、px,em,rem,vw,vh,rpx等单位的特性 六、替换元素和非替换元素 七、first-of-type和first-child有什么区别 八、doctype标签的作用 九、link标签和import标签的区别 十…

import “cv2“ could not be resolved pylance(reportMissingImports)

openCV系列文章目录 文章目录openCV系列文章目录前言一、错误原因二、解决方法1.在vscode&#xff1a;Python:Select Interpreter2.依然报错&#xff1a;cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\highgui\src\window.cpp:1272: error: (-2:U…

InstructGPT论文精读

论文链接&#xff1a;https://arxiv.org/pdf/2203.02155.pdf 1 摘要 做的事&#xff1a; 1、标注了数据&#xff0c;问题和答案写出来&#xff0c;然后训练模型 2、收集数据集&#xff0c;排序模型的输出&#xff0c;使用强化学习训练这个排序的过程 效果层面来说&#xff1…

vant-list使用,请求接口之后会多几次load加页面(详细解释,动图演示)

页面实现效果&#xff1a;在页面中使用了van-tabs组件和van-list组件来实现页面布局和功能。问题描述&#xff1a;在第一个标签下&#xff0c;向下滚动page超过了2页之后&#xff0c;有点击tab切换标签&#xff0c;接口调用了多回。解决问题关键&#xff1a;loading和finished在…

爆文制造机!小红书热榜3个方向,告诉你选题诀窍!

我们知道&#xff0c;不论是达人创作内容&#xff0c;还是品牌制定Brief&#xff0c;都需要提前调研筛选海量信息&#xff0c;这时候如果有一个自己的内容素材库&#xff0c;就省事多啦。按照内容需求&#xff0c;我们可以按3个角度划分小红书内容素材&#xff1a;笔记类型、竞…

MyBatis的简单使用

MyBatis是一个优秀的持久型框架用于简化JDBC开发&#xff0c;JDBC的原生写法普遍都很麻烦&#xff0c;还要写原汁原味的sql语句&#xff0c;mybatis将很多东西都放到了配置文件里面然后用少量代码简化了免除了几乎所有的JDBC代码以及设定参数和获取结果集的工作。MyBatis 可以通…

使用D3绘制力导向图遇到的坑

目录1. 不同D3版本差异2. D3 V4版本绘制力导向图基本流程3. 跨域问题现象原因解决办法4. 异步赋值现象原因解决办法1. 不同D3版本差异 V3&#xff1a;通过d3.layout.force()将节点、连接线的数据转换成d3力导向图能够使用的数据结构 var force d3.layout.force().nodes(node…

哪些工具可以实现在线ps的需求

在线Photoshop有哪些工具可以选择&#xff1f;在 Adobe 的官网上就能够实现&#xff0c;很惊讶吧&#xff0c;其实 Adobe 官方推出了在线版本的 Photoshop 的&#xff0c;尽管目前还是 Beta版本&#xff0c;但其实也开放了蛮久了。编辑切换为居中添加图片注释&#xff0c;不超过…

安卓手机用WIFI无线调试adb

1、准备连接 1、首先将电脑和手机连接同一个WIFI&#xff0c;并插上数据线 2、打开电脑CMD,输入命令adb start-server开启adb服务 3、输入adb devices 查询已连接的设备 List of devices attached 505e894 device 这样代表已连接成功&#xff0c; 505e894 。 505e894是udid&…

蓝桥杯真题(JAVA)--分巧克力

题目描述儿童节那天有 K 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有 NN 块巧克力&#xff0c;其中第 i块是HiWi 的方格组成的长方形。为了公平起见&#xff0c;小明需要从这 NN 块巧克力中切出 K 块巧克力分给小朋友们。切出的巧克力需要满足&…

SiC MOSFET驱动电压的分析

SiC MOSFET驱动电压的分析 tips:资料来自富昌电子&#xff0c;及各个模块数据手册。 1.常见的Vgs与Vgs(th)&#xff0c;以及对SiC MOSFET应用的影响 驱动电压Vgs和栅极电压阈值Vgs(th)关系到SiC MOSFET在应用过程中的可靠性&#xff0c;功率损耗(导通电阻)&#xff0c;以及驱…

极光笔记 | 极光PUSH服务助力企业提升抢单速度

随着硬件、软件、网络等不断发展、完善&#xff0c;互联网已经渗透到了日常生活中的方方面面&#xff0c;在直接赋能原有行业服务的同时也带来了很多新的服务模式&#xff0c;给人们日常生活带来了极大便利。例如&#xff1a;外卖、快递、跑腿等相关业务更是在我们日常生活中随…

CHAPTER 2 Web HA集群部署 - Heartbeat

Web HA集群部署 - Heartbeat1. Heartbeat 概述1.1 Heartbeat主要组成部分2. 环境依赖2.1 环境及组件软件2.2 关闭firewalld & selinux2.3 配置双机互信&#xff0c;SSH密钥登录​​2.4 同步时间&#xff08;以主节点时间为准&#xff09;2.5 配置域名解析3 安装软件3.1 安装…

你有“ChatGPT综合征”吗:想搞钱,或是失业焦虑?

最近互联网圈里有一个“顶流”&#xff0c;ChatGPT上线仅5天&#xff0c;注册用户数就突破100万&#xff0c;今年2月的月活跃用户已经突破了1亿。ChatGPT的热度有增无减&#xff0c;过不了多久&#xff0c;ChatGPT这个词就会从一线城市的写字楼席卷到农村老家的饭桌上。 互联网…

自动化测试难点案例分析,其实自动化你用错方向还不如不用

随着国内企业软件开发及测试水平的提升&#xff0c;许多企业开始尝试开展自动化测试的应用&#xff0c;以提高测试效率和测试质量。虽然在国外自动化测试工具应用已经很普遍&#xff0c;但国内许多企业对于软件自动化测试的理解还停留在表面上&#xff0c;没有深入的理解到企业…