首页 > 其他分享 >噪声标签学习-噪声转移矩阵估计

噪声标签学习-噪声转移矩阵估计

时间:2024-10-24 16:22:51浏览次数:6  
标签:mathbf 噪声 self torch 矩阵 num 标签 classes

基本原理

样本的干净标签后验概率\(P(\mathbf{Y}|X=\mathbf{x})\),
可通过噪声标签的后验概率\(P(\bar{\mathbf{Y}}|X = \mathbf{x})\)和噪声转移矩阵\(T(\mathbf{x})\)得到,即:

\[P(\bar{\mathbf{Y}}|X=\mathbf{x})=T(\mathbf{x})P(\mathbf{Y}|X=\mathbf{x}) \]

其中\(T_{ij}(\mathbf{x}) = P(\bar{Y} = j|Y = i,X = \mathbf{x})\)。

通常,转移矩阵\(T\)是不可识别的,并且在没有额外假设的情况下很难学习。因此实际上,噪声标签问题下,使用
噪声转移矩阵估计的方式特别少,本文只讨论最简单的噪声转移矩阵估计的形式。

代码层面上

转移矩阵由一个 \(C\times C\)的矩阵表示,其中\(C\)是类别数目。转移矩阵的参数随着模型训练更新。

import torch
import torch.nn as nn
import torch.nn.functional as F


class TransitionMatrix(nn.Module):
    def __init__(self, num_classes, device='cpu'):
        super().__init__()
        if num_classes == 10:
            init = -2
        else:
            init = -4.5
        
        w = torch.ones([num_classes, num_classes]) * init
        self.register_parameter(name="w", param=nn.parameter.Parameter(w))
        self.w.to(device)

        self.identity = torch.eye(num_classes).to(device)

        self.coeff = torch.ones([num_classes, num_classes]) - torch.eye(num_classes)
        self.coeff = self.coeff.to(device)

    def forward(self):
        sig = torch.sigmoid(self.w)
        T = self.identity.detach() + sig * self.coeff.detach()
        T = F.normalize(T, p=1, dim=1)
        return T

在训练过程中,使用噪声转移矩阵对模型输出调整,然后计算损失。注意,此处model输出为类别概率分布,也就是经过softmax后的logits

...
transition_matrix = TransitionMatrix(num_classes=num_classes, device=device)
for epoch in range(EPOCH):
    transition_matrix.train()
    ...
    for index, (batch_x, batch_y) in loop:
        ...
        clean = model(batch_x)
        t_hat = transition_matrix()
        y_tilde = torch.mm(clean, t_hat)
        vol_loss = torch.abs(t_hat.slogdet().logabsdet)
        ce_loss = loss_func_ce(y_tilde.log(), batch_y.long())
        loss = ce_loss + opt.lam * vol_loss
        ...
...

依赖:

torch                     2.4.1

参考文献

  1. noise-transition-matrix

标签:mathbf,噪声,self,torch,矩阵,num,标签,classes
From: https://www.cnblogs.com/zh-jp/p/18499832

相关文章

  • ECharts饼图-富文本标签,附视频讲解与代码下载
    引言: 在数据可视化的世界里,ECharts凭借其丰富的图表类型和强大的配置能力,成为了众多开发者的首选。今天,我将带大家一起实现一个饼图图表,通过该图表我们可以直观地展示和分析数据。此外,我还将提供详细的视频讲解和代码下载链接,帮助大家快速上手。一、图表效果预览 二、视......
  • 聊一聊Spring中的AOP【XML】【标签解析】
    [!NOTE]**Spring版本:**5.3.27**AspectJ版本:**1.9.22**JDK版本:**1.81、前置说明[!TIP]概念性的东西理解起来都会比较抽象,下面的一些概念可以一扫而过,有个大致印象就行。先学会使用,再分析原理,回过头来再看这些概念就会一一对应上。1.1前置概念1.1.1基础概念AOP(......
  • 矩阵运算
    矩阵与矩阵加减只有同型矩阵能相加减矩阵的数乘矩阵的乘法多矩阵相乘计算从右往左依次计算。如ABC,先算BC,再算A与BC的结果。矩阵相乘的前提M[mn]mulO[ij];n必须等于i;如:M5×4与O4×2能相乘。......
  • 矩阵
    在数学中,矩阵是一个按照长方阵排列的复数或实数的集合。在一个m×n的矩阵A中,有m×n个数,这些数称为矩阵A的元素。数aij位于矩阵的第i行,第j列,称为矩阵A的(i,j)元素。运算矩阵和标量的乘法矩阵和矩阵的加/减法矩阵和矩阵的乘法矩阵乘法不满足交换律为了将向量从原坐标系......
  • Android之Manifest.xml文件的标签+属性
    Manifest.xml文件结构目录<?xmlversion="1.0"encoding="utf-8"?><manifest><uses-permission/><permission/><permission-tree/><permission-group/><instrumentation/>&......
  • git命令推送github标签
    如果你在修改了代码后想要在GitHub上创建新标签,你可以遵循以下步骤。这些步骤结合了代码的提交、标签的创建以及将标签推送到GitHub远程仓库的过程。步骤一:提交修改后的代码添加修改到暂存区:使用gitadd命令将你修改过的文件添加到Git的暂存区。例如,如果你修改了所有文件,可以......
  • HTML布局常用标签——div和span
    HTML布局常用标签——div和span在HTML的世界里,div和span是两位不可或缺的老朋友,它们虽然看似简单,却在网页布局和样式设计中发挥着举足轻重的作用。今天,我们就来聊聊这两位“无意义”却极其实用的标签——div和span。一、div:块级元素的大块头1.定义与特点div,全称“division”,......
  • HTML标签-form表单
    HTML标签-form表单在Web开发中,HTML表单(form)是不可或缺的一部分,它承担着用户与Web服务器之间交互的重任。今天,我们就来详细探讨一下HTML中的form表单标签。一、form表单的基本结构form表单是一个块级标签,用于创建一个包含各种表单元素的区域,这些元素允许用户输入数据。一个完整......
  • 矩阵的等价
    矩阵等价是线性代数中的一个重要概念,它描述了两个矩阵之间的一种特殊关系,这种关系蕴含着矩阵的本质属性,而不依赖于具体的表示形式。让我们详细探讨矩阵等价的定义、性质以及与其他矩阵关系的区别。1.定义两个m......
  • 矩阵对角化
    一个方阵是否可对角化,取决于它是否拥有足够的线性无关的特征向量。让我们详细分解这个条件:1.特征值和特征向量:特征值(Eigenvalue):对于一个方阵A(nxn),一个标量λ被称为A的特征值,如果存在非零向量x使得:......