⌈ 传知代码 ⌋ 将一致性正则化用于弱监督学习

💛前情提要💛

本文是传知代码平台中的相关前沿知识与技术的分享~

接下来我们即将进入一个全新的空间,对技术有一个全新的视角~

本文所涉及所有资源均在传知代码平台可获取

以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦!!!

以下内容干货满满,跟上步伐吧~


📌导航小助手📌

  • 💡本章重点
  • 🍞一. 论文概述
  • 🍞二. 算法原理
  • 🍞三.核心逻辑
  • 🍞四.效果演示
  • 🫓总结


💡本章重点

  • 一致性正则化用于弱监督学习

🍞一. 论文概述

本文复现论文 Revisiting Consistency Regularization for Deep Partial Label Learning[1] 提出的偏标记学习方法。程序基于Pytorch,会保存完整的训练日志,并生成损失变化图和准确度变化图。

偏标记学习(Partial Label Learning)是一个经典的弱监督问题。在偏标记学习中,每个样例的监督信息为一个包含多个标签的候选标签集合。目前的偏标记方法大多基于自监督或者对比学习范式,或多或少地会遇到低性能或低效率的问题。该论文基于一致性正则化的思想,改进基于自监督的偏标记学习方法。具体地,该论文所提出的方法设计了两个训练目标。其中第一个训练目标为最小化非候选标签的预测输出,第二个目标最大化不同视图的预测输出之间的一致性。

在这里插入图片描述
总的来说,该论文所提出的方法着眼于将模型对同一图像不同增强视图的预测输出对齐,以提升模型输出的可靠性和对标签的消歧能力,这一方法同样能给其他弱监督学习任务带来提升。


🍞二. 算法原理

首先,论文所提出方法的第一项损失(监督损失)如下:

在这里插入图片描述

其中,当事件 A 为真时,I(A)= 1 否则 I(A)= 0,f(.)表示模型的输出概率。

然后,论文所提出方法的第二项损失(一致性损失)如下:

在这里插入图片描述
其在训练过程中通过所有增强视图预测结果的几何平均来更新标签分布:

在这里插入图片描述
由于数据增强的不稳定性,该论文通过叠加 K 个不同的增强视图的一致性损失来提升方法性能。

最后,考虑到训练初期模型的预测准确率较低,一致性损失的权重被设置为从零开始随着训练轮数的增加逐渐提高:

在这里插入图片描述

综上所述,模型的总损失函数如下:

在这里插入图片描述


🍞三.核心逻辑

具体的核心逻辑如下所示:

def dpll_sup_loss(probs, partial_labels):loss = -torch.sum(torch.log(1 + 1e-6 - probs) * (1 - partial_labels), dim=-1)loss_avg = torch.mean(loss)return loss_avgdef dpll_cont_loss(logits, targets):logits_log = torch.log_softmax(logits, dim=-1)loss = F.kl_div(logits_log, targets, reduction='batchmean')return lossdef train():# main loopsfor epoch_id in range(total_epochs):# trainmodel.train()for batch in train_dataloader:optimizer.zero_grad()ids = batch['ids']data1 = batch['data1'].to(device)data2 = batch['data2'].to(device)data3 = batch['data3'].to(device)partial_labels = batch['partial_labels'].to(device)targets = train_targets[ids].to(device)logits1 = model(data1)logits2 = model(data2)logits3 = model(data3)probs1 = F.softmax(logits1, dim=-1)# update targetswith torch.no_grad():probs2 = F.softmax(logits2.detach(), dim=-1)probs3 = F.softmax(logits3.detach(), dim=-1)new_targets = torch.pow(probs1.detach() * probs2 * probs3, 1 / 3)new_targets = F.normalize(new_targets * partial_labels, p=1, dim=-1)train_targets[ids] = new_targets.cpu()# dynamic weightbalancing_weight = max_weight * (epoch_id + 1) / max_weight_epochbalancing_weight = min(max_weight, balancing_weight)# supervised lossloss_sup = dpll_sup_loss(probs1, partial_labels)# consistency regularization lossloss_cont1 = dpll_cont_loss(logits1, targets)loss_cont2 = dpll_cont_loss(logits2, targets)loss_cont3 = dpll_cont_loss(logits3, targets)# all lossloss = loss_sup + balancing_weight * (loss_cont1 + loss_cont2 + loss_cont3)loss.backward()optimizer.step()if epoch_id in lr_decay_epochs:lr_scheduler.step()

🍞四.效果演示

本文基于网络 Wide-ResNet[2] 和数据集 CIFAR-10[3] 进行实验,偏标记的随机翻转概率为0.1。当然,本文所提供的程序不仅仅提供了上述的实验设置,同时也可以直接基于CIFAR-100(100类图像分类数据集),SVHN(数字号牌识别数据集),Fashion-MNIST(时装识别数据集),Kuzushiji-MNIST(日本古草体识别数据集)进行实验。仅仅需要替换运行命令的对应部分即可(使用说明见下文)

  • 损失曲线:

在这里插入图片描述

  • 准确率曲线:

在这里插入图片描述


🫓总结

综上,我们基本了解了“一项全新的技术啦” 🍭 ~~

恭喜你的内功又双叒叕得到了提高!!!

感谢你们的阅读😆

后续还会继续更新💓,欢迎持续关注📌哟~

💫如果有错误❌,欢迎指正呀💫

✨如果觉得收获满满,可以点点赞👍支持一下哟~✨

【传知科技 – 了解更多新知识】

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

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

相关文章

2款.NET开源且免费的Git可视化管理工具

Git是什么? Git是一种分布式版本控制系统,它可以记录文件的修改历史和版本变化,并可以支持多人协同开发。Git最初是由Linux开发者Linus Torvalds创建的,它具有高效、灵活、稳定等优点,如今已成为软件开发领域中最流行…

如何使用EventChannel

文章目录 1 知识回顾2 示例代码3 经验总结我们在上一章回中介绍了MethodChannel的使用方法,本章回中将介绍EventChannel的使用方法.闲话休提,让我们一起Talk Flutter吧。 1 知识回顾 我们在前面章回中介绍了通道的概念和作用,并且提到了通道有不同的类型,本章回将其中一种…

使用Apifox创建接口文档,部署第一个简单的基于Vue+Axios的前端项目

前言 在当今软件开发的过程中,接口文档的创建至关重要,它不仅能够帮助开发人员更好地理解系统架构,还能确保前后端开发的有效协同。Apifox作为一款集API文档管理、接口调试、Mock数据模拟为一体的工具,能够大幅度提高开发效率。在…

我为什么决定关闭ChatGPT的记忆功能?

你好,我是三桥君 几个月前,ChatGPT宣布即将推出一项名为“记忆功能”的新特性,英文名叫memory。 这个功能听起来相当吸引人,宣传口号是让GPT更加了解用户,仿佛是要为我们每个人量身打造一个专属的AI助手。 在记忆功…

用Arduino单片机读取PCF8591模数转换器的模拟量并转化为数字输出

PCF8591是一款单芯片,单电源和低功耗8位CMOS数据采集设备。博文[1]对该产品已有介绍,此处不再赘述。但该博文是使用NVIDIA Jetson nano运行python读取输入PCF8591的模拟量的,读取的结果显示在屏幕上,或输出模拟量点亮灯。NVIDIA J…

Ubuntu下Kafka安装及使用

Kafka是由Apache软件基金会开发的一个开源流处理平台,同时也是一个高吞吐量的分布式发布订阅消息系统。它由Scala和Java编写,具有多种特性和广泛的应用场景。 Kafka是一个分布式消息系统,它允许生产者(Producer)发布消…

docker 部署nacos

目录 一、拉取镜像 二、部署 三、访问(默认是用内嵌数据库) 四、配置 五、重启容器 一、拉取镜像 docker pull nacos/nacos-server 二、部署 docker run --name nacos -d -p 8848:8848 -p 9848:9848 -p 9849:9849 --restartalways --privilegedt…

软考鸭微信小程序:助力软考备考的便捷工具

一、软考鸭微信小程序的功能 “软考鸭”微信小程序是一款针对软考考生的备考辅助工具,提供了丰富的备考资源和功能,帮助考生提高备考效率,顺利通过考试。其主要功能包括: 历年试题库:小程序内集成了历年软考试题&…

加油站智能视频监控预警系统(AI识别烟火打电话抽烟) Python 和 OpenCV 库

加油站作为存储和销售易燃易爆油品的场所,是重大危险源之一,随着科技的不断发展,智能视频监控预警系统在加油站的安全保障方面发挥着日益关键的作用,尤其是其中基于AI的烟火识别、抽烟识别和打电话识别功能,以及其独特…

云服务架构与华为云架构

目录 1.云服务架构是什么? 1.1 云服务模型 1.2 云部署模型 1.3 云服务架构的组件 1.4 云服务架构模式 1.5 关键设计考虑 1.6 优势 1.7 常见的云服务架构实践 2.华为云架构 2.1 华为云服务模型 2.2 华为云部署模型 2.3 华为云服务架构的核心组件 2.4 华…

实时语音交互,打造更加智能便捷的应用

随着人工智能和自然语言处理技术的进步,用户对智能化和便捷化应用的需求不断增加。语音交互技术以其直观的语音指令,革新了传统的手动输入方式,简化了用户操作,让应用变得更加易用和高效。 通过语音交互,用户可以在不…

Label-Studio ML利用yolov8模型实现自动标注

引言 Label Studio ML 后端是一个 SDK,用于包装您的机器学习代码并将其转换为 Web 服务器。Web 服务器可以连接到正在运行的 Label Studio 实例,以自动执行标记任务。我们提供了一个示例模型库,您可以在自己的工作流程中使用这些模型&#x…

基于SpringCloud的微服务架构下安全开发运维准则

为什么要进行安全设计 微服务架构进行安全设计的原因主要包括以下几点: 提高数据保护:微服务架构中,服务间通信频繁,涉及到大量敏感数据的交换。安全设计可以确保数据在传输和存储过程中的安全性,防止数据泄露和篡改。…

手机改IP地址怎么弄?全面解析与操作指南

在当今数字化时代,IP地址作为设备在网络中的唯一标识,其重要性不言而喻。有时候,出于隐私保护、网络访问需求或其他特定原因,我们可能需要更改手机的IP地址。然而,对于大多数普通用户来说,如何操作可能还是…

电梯,建模的常见话题

以下是最近一则"女婿开电梯门导致岳父惨死"的新闻,可惜生命的同时,也引发了一系列联想。 不少人不了解或者了解但经常下意识忽略:电梯的门和轿厢是分离的部件。部件之间的协作如果有失误,系统就会出问题。电梯可以看作是…

【Android 14源码分析】WMS-窗口显示-第二步:relayoutWindow -1

忽然有一天,我想要做一件事:去代码中去验证那些曾经被“灌输”的理论。                                                                                  – 服装…

kafka基本概念以及用法

kafka基本概念以及用法目录 文章目录 kafka基本概念以及用法目录一、什么是kafka?二、为什么要使用kafka?三、kafka的基本概念四、安装kafka(windows版本)五、命令行控制kafka生产消费数据,创建 删除topic六、java操作kafka消费生产 提示:以…

开源AI智能名片链动2+1模式S2B2C商城小程序源码与工业4.0的融合发展:机遇与挑战

摘要:本文探讨了工业4.0的三大主题,即智能工厂、智能生产和智能物流,分析在各主题下开源AI智能名片链动21模式S2B2C商城小程序源码与之融合的可能性、带来的机遇以及面临的挑战,旨在为相关产业的协同发展提供理论参考。 一、引言 …

Linux系统安装教程

Linux安装流程 一、前置准备工作二、开始安装Linux 一、前置准备工作 安装好VMWare虚拟机,并下载Linux系统的安装包; Linux安装包路径为:安装包链接 , 提取码为:4tiM 二、开始安装Linux

Vue2如何在网页实现文字的逐个显现

目录 Blue留言: 效果图: 实现思路: 代码: 1、空字符串与需渲染的字符串的定义 2、vue的插值表达式 3、函数 4、mounted()函数调用 结语: Blue留言: 在国庆前夕,突发奇想,我想…