专栏名称: 小白学视觉
本公众号主要介绍机器视觉基础知识和新闻,以及在学习机器视觉时遇到的各种纠结和坑的心路历程。
目录
相关文章推荐
半导体行业联盟  ·  美国副总统:确保最强AI芯片 美国制造! ·  昨天  
半导体行业联盟  ·  何小鹏与任正非会面 ·  昨天  
半导体行业联盟  ·  中芯国际CEO赵海军:2025年我们担心2件事 ·  15 小时前  
半导体行业联盟  ·  拒供在华客户:美国威胁泛林集团(Lam)! ·  15 小时前  
半导体行业联盟  ·  读懂张忠谋,就读懂了世界半导体 ·  4 天前  
51好读  ›  专栏  ›  小白学视觉

分类问题的label为啥必须是 one hot 形式?

小白学视觉  · 公众号  ·  · 2024-07-03 10:05

正文

点击上方 小白学视觉 ”,选择加" 星标 "或“ 置顶

重磅干货,第一时间送达
作者:TniL(知乎)
专业:复旦大学 计算机科学技术硕士在读
链接: https://www.zhihu.com/question/359742335/answer/1835609656
学术分享,侵删~
这个一年多前的问题居然被推给我了,简单回答一下。
首先看问题评论中提到是面试题,那首先排除一下label smoothing这种技巧。只探讨在一般nn框架内分类问题的标签如何表示的问题。
正好前不久看到 @冷比特er(悬 铃) 的一篇文章有涉及到类似的问题,讨论了对率回归中损失函数的两种形式: 逻辑回归损失函数的 两种形式 在二分类 中,标签可以表示为{0,1},有时也表示为{-1, 1}。 因此损失函数可以写成两种形式,
标签 时,损失写为
标签 时,损失写为
但实际上你将两种情况分类展开时就会发现二者是一模一样的:
这个例子告诉我们, 只要背后的理论是相同的,标签的表示对结果并不会产生任何影响 。把视角切换回多分类的问题中,为了贴合交叉熵的诠释,你常常看到使用一个one-hot向量表示一个标签代表的ground truth概率分布 ,然后使用交叉熵来衡量nn模型输出的概率 与ground truth的差距:
假设第i个样本的类别对应的是第k个类,那这个交叉熵损失展开实际上变成一个很简单的形式
实际上可以 解读为最大化真实类别的对数似然 。看到这里你发现,
为什么非得one-hot编码呢?直接找出下标对应的预测值求负对数作为loss不香吗?这时你随手打开PyTorch的源码,看到 cross_entropy 的函数docstring如下:
Args:        input (Tensor) : :math:`(N, C)` where `C = number of classes` or :math:`(N, C, H, W)`in case of 2D Loss, or :math:`(N, C, d_1, d_2, ..., d_K)` where :math:`K \geq 1`in the case of K-dimensional loss.        target (Tensor) : :math:`(N)` where each value is :math:`0 \leq \text{targets}[i] \leq C-1`,or :math:`(N, d_1, d_2, ..., d_K)` where :math:`K \geq 1` for            K-dimensional loss.
你才发现原来在主流深度学习框架里面,one-hot编码很可能压根就是个伪命题,例如PyTorch里面 target 是ground truth的下标而不是one-hot编码。而你的面试官还在考虑用二进制码表示标签来节省内存...
P.S. 即使需要one-hot标签表示,这种省内存的技巧多数时候都没有必要,标签存储基本不可能成为一个瓶颈,完全可以通过批处理节省内存。

下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲
小白学视觉公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。







请到「今天看啥」查看全文