谈谈softmax中常出现的温度系数 T (τ)

2023-11-07

2022-4-1, 今天再回首来看这篇文章,发现自己写的非常局限,并且基本是在拾人牙慧,缺乏自己的思考与提炼。在阅读了更多文章和做实验进行一些思考之后,重写了这篇博客,主要从对比学习、知识蒸馏、分类训练来谈谈自己对于温度系数的理解。


前因

许多计算机视觉任务中,我们都看到作者会在原始的softmax损失基础上额外增加一个温度系数T,但很少做相关的解释,并且任务不同,取值的范围也不同。这篇博客,浅谈一下我遇到过的应用温度系数T的情况与原理。

实操

首先直接从softmax本身出发,温度系数T主要是用来调整logits-softmax曲线的平滑程度。假设目前有一个3分类任务,网络输出的logits为[1,2,3],groundtruth为[0,0,1]也就是类别2。

① 如果不使用τ,或者说τ=1,那么softmax的结果为:

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

criterion = nn.CrossEntropyLoss()

x = torch.Tensor([[1,2,3]])
y = torch.Tensor([2]).type(torch.long)

t = 1
out = F.softmax(x/t, dim=1)
print(out)


loss = criterion(x,y)
print(loss)

# 输出
tensor([[0.0900, 0.2447, 0.6652]])
tensor(0.4076)

那么此时计算出来的softmax概率为[0.0900, 0.2447, 0.6652],loss为0.4076 (-log(0.6652))。

② 而τ=0.5时:

# 输出
tensor([[0.0159, 0.1173, 0.8668]])	# softmax概率
tensor(0.1429)	# loss

③ τ=0.1:

# 输出
tensor([[2.0611e-09, 4.5398e-05, 9.9995e-01]])	# softmax概率
tensor(4.5418e-05)	# loss

观察:随着T的减小,softmax输出各类别之间的概率差距越大(陡峭),从而导致loss变小;同样,当增大T,softmax输出的各类别概率差距会越来越小(平滑),导致loss变大。

理解

在不同任务场景中,温度系数往往起着不同的作用。

先谈谈知识蒸馏,在进行知识蒸馏时,会对teacher网络的softmax输出除以一个T得到soft target,然后student网络的softmax输出同样会除以一个T得到logits,计算交叉熵,而这个T的取值通常大于1。为什么需要除以一个温度系数T呢?

在这里插入图片描述
当然,这么做肯定是在实验上取得了更好的性能,但其背后的原因怎么理解呢?首先,蒸馏的本质是让学生网络去学习教师网络的泛化能力(通过soft target传递),由于训练好的模型本身会出现过度自信的问题(softmax输出的概率分布熵很小),所以除以一个大于1的T,让分布变得平滑,来放大这种类别相似信息

具体可以参考这篇文章:https://zhuanlan.zhihu.com/p/102038521

接下来,我们再谈谈对比学习(用于自监督学习)中的温度系数,对比学习中最常用的一个loss莫过于NCE损失(跟softmax损失很像):
在这里插入图片描述
简单地理解,就是 s i , i s_{i,i} si,i就是anchor与正样本之间的相似度, s i , k s_{i,k} si,k就是anchor与负样本之间的相似度,优化目标就是让正样本之间的相似度越大越好,负样本之间的相似度越小越好(拉近正样本,推远负样本)。相似度最后都会除以一个温度系数T,这个T通常小于1。

为什么在这里T又要小于1呢?首先对比学习应用这种损失形式本身就可以挖掘hard负样本,因为经过一个softmax操作后,会给距离更近的负样本更多的惩罚(可以从梯度分析)。而T可以控制对困难样本的惩罚程度,如下图所示:当T越小,softmax输出差异被放得越大,对困难负样本的惩罚更大(loss更大)。
在这里插入图片描述
但属于无监督学习的对比学习本身会遇到一种Uniformity-Tolerance Dilemma均匀性-容忍性困境,我们既希望得到一个分布均匀的表征空间(有文献说明这是对比学习效果好的关键),这期望我们将困难负样本推离地更远一些(T变小);但这些困难样本本身又可能属于潜在的"正样本"(拥有同样的前景),过度推远会起到反作用(T不能太小)。
在这里插入图片描述
所以在对比学习中,需要折中地选择温度系数的取值,这是一个非常重要的超参数。

来自Understanding the Behaviour of Contrastive Loss(CVPR21),
知乎解读:https://zhuanlan.zhihu.com/p/357071960

最后,我再谈谈我在实践过程中遇到的一些问题,比如我现在得到了一些伪标签或者一些噪声标签去进行一个分类任务。我对这批标签的信心不是很高,但又想通过它去学习一些知识 / 训练一个模型,这样也可以用到温度系数T。比如我把温度系数调低(T<1),拉大softmax的输出分布,降低loss,不过度优化模型。当然,相反的情况下,比如我们想增加模型的判别能力,也把温度系数提高(T>1)。

但是这些情况都可以通过其他更显示的策略来完成,所以这里也是仅供参考。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

谈谈softmax中常出现的温度系数 T (τ) 的相关文章

随机推荐

  • Win7中出错:无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-

    安装完 Python 后 配置好 Python 目录于 Path 然后 CMD 命令下输入 python 验证是否配置成功 但是竟然出现结果跳出对话框 出错 无法启动此程序 因为计算机中丢失api ms win crt runtime 1
  • HashMap底层实现原理及面试问题

    一 HashMap的工作原理 HashMap基于hashing原理 我们通过put 和get 方法储存和获取对象 当我们将键值对传递给put 方法时 它调用键对象的hashCode 方法来计算hashcode 让后找到bucket位置来储存
  • 查看linux主机启动时间(转载)

    1 查看 proc uptime root master1565 cat proc uptime 673 83 1327 68 root master1565 date d cut f1 d proc uptime seconds ago
  • 抖音直播录制工具

    抖音无法监测开播 抖音采集工具 软件出现未响应 闪退 并且会出现一个无名主播文件夹 以前都是主播名字 再打开软件就提示 Failed to execute script main 删除无名主播文件夹 软件又可以正常打开 新添主播 又出现未响
  • 常用的软件测试工具大全

    开源测试管理工具 Bugfree Bugzilla TestLink mantis 开源功能自动化测试工具 Watir Selenium MaxQ WebInject 开源性能自动化测试工具 Jmeter OpenSTA DBMonster
  • 在unity中如何实现视频播放暂停停止重播功能

    在Unity中实现视频播放 暂停 停止和重播功能 可以通过以下步骤实现 将视频文件导入Unity项目中 并将其设置为资源 创建一个新的Unity游戏对象 并将Video Player组件添加到该对象上 将视频文件设置为Video Playe
  • vue动态修改标签页的icon、系统名称

    一 修改icon 1 修改初始化的 icon 只需要把 public favicon ico 改成我们所需要的图片即可 2 动态改变icon document querySelector link rel icon setAttribute
  • python中如何统计文本中的单词个数_python统计文本文件内单词数量的方法

    本文实例讲述了python统计文本文件内单词数量的方法 分享给大家供大家参考 具体实现方法如下 count lines sentences and words of a text file set all the counters to z
  • 大数据课程I1——Kafka的概述

    文章作者邮箱 yugongshiye sina cn 地址 广东惠州 本章节目的 了解Kafka的概念 掌握Kafka的配置与启动 一 简介 1 基本概念 Apache kafka 是一个分布式数据流平台 可以从如下几个层面来理解 1 我们
  • 安装office2010失败,提示因为安装了office2010早期试用版本或在安装过程中出错

    昨天下午 一个同学说他要考全国计算机二级考试 需要安装office2010进行做操作题目 但是怎么弄也不能安装上 就连上课老师也安装不了 还告诉他需要换一个系统才能够进行安装 后来她找到了我 请我帮他解决一下 我毫不犹豫的答应了 我拿到电脑
  • [H5] Canvas画布的使用详解:

    Canvas 序言 在渲染复杂的动效 把数据可视化图形显示 游戏场景等需求 都会用canvas技术 比dom操作性能更高 特点 H5新增的图形标签 通过提供的JavaScript函数绘制各种图表或利用算法实际非常华丽的动效 在以前是用Fla
  • 解决AttributeError: 'set' object has no attribute 'items'错误

    出现这个问题 原因可能是定义的header有问题 header key value 如果是直接在请求数据中复制 很有可能会忽略键和值的冒号
  • 计算机二级换c语言,09年计算机二级C语言辅导:C技巧(内存分配:更换策略,不要为难内存)...

    09年计算机二级C语言辅导 C技巧 内存分配 更换策略 不要为难内存 分类 计算机等级 更新时间 2008 11 21 来源 教育联展网 在32位机上 64位也是一样的 但是空间大很多 一个进程可以分配到4GB的虚拟内存 当然 其中2G给了
  • 应用 Valgrind 定位 Linux 程序的内存问题

    参考文章 Valgrind学习总结 应用 Valgrind 发现 Linux 程序的内存问题 Valgrind介绍 Valgrind是一套Linux下 开放源代码 GPL V2 的仿真调试工具的集合 Valgrind由内核 core 以及基
  • [Typescript]基础篇之 String 对象

    基础篇之 String 对象 String 对象简介 与 string 区别 String 定义 属性 方法 属性的使用 方法的使用 lastIndexOf localeCompare replace search slice split
  • matlab学习笔记1

    1 常见用法 1 创建匿名函数 返回该函数句柄 输入参数 表达式 fun x 100 x 2 x 1 2 2 1 x 1 2 定义了一个函数 2 给函数名取别名 函数名 还有其他用法 可参考 https blog csdn net kaev
  • Altium Designer 20中创建网络类、隐藏网络连线

    我们平时在PCB布局的时候不需要电源和地的连线 我们只需要信号的流向 所以我们需要添加一个电源类 来隐藏电源和地的连线 那么 我们如何创建一个类呢 Step 01 使用快捷键DC 调出对象类浏览器 Step 02 Net Classes右击
  • 3W字长文总结PyTorch中常用的函数

    quad quad PyTorch基本函数更新 quad q
  • 程序开发性能调优之如何降低CPU使用率。

    单核的CUP就100 双核的就60 这谁受的了 咋调都不行 我把所有的效果都关了 还不行 连声音都关了 就剩个窗口模式了 他照样100 咋整啊 改用静态的方式的确是能够大大降低数据库的存取频率 进而降低CPU的使用率 依你所表述的情况来看
  • 谈谈softmax中常出现的温度系数 T (τ)

    2022 4 1 今天再回首来看这篇文章 发现自己写的非常局限 并且基本是在拾人牙慧 缺乏自己的思考与提炼 在阅读了更多文章和做实验进行一些思考之后 重写了这篇博客 主要从对比学习 知识蒸馏 分类训练来谈谈自己对于温度系数的理解 前因 许多