log_softmax比softmax更好?

news/2025/3/14 18:20:28/

多类别分类的一个trick

探讨一下在多类别分类场景,如翻译、生成、目标检测等场景下,使用log_softmax的效果优于softmax的原因。
假设词典大小为10,一个词的ID为9(即词典的最后一个词),使用交叉熵作为损失函数,我们给出两组向量:

a = [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
b = [0.1, 0.1, 0.1, 0.1, 0.1, 0.05, 0.05, 0.1, 0.2, 0.1]

已知交叉熵损失函数定义如下:
l o s s = ∑ i = 0 k y i l o g ( p i ) loss = \sum^{k}_{i=0}y_ilog(p_i) loss=i=0kyilog(pi)
则根据公式,可分别计算得到:

CE(softmax(a), 9) = 2.3026
CE(log_softmax(a), 9) = 2.3026CE(softmax(b), 9)  = 2.3027
CE(log_softmax(b), 9) = 2.3033

则使用softmax操作的a,b向量在损失上相差-1e-4,而使用log_softmax在损失上相差-7e-4。
发现1:当类别概率预测错误时,CE(log_softmax(),)会加大错误类别惩罚。
这还不明显,我们现在假设

b = [0, 0, 0, 0, 0, 0.05, 0.05, 0, 0.1, 0.8]

CE(softmax(b), 9)  = 2.2084
CE(log_softmax(b), 9) =  1.6365

此时,对比一下softmax操作之后损失之差为9.42e-2,log_softmax损失之差为0.6661。
发现2:使用CE(softmax(),)即便预测概率分布很接近真实概率分布,在损失上下降也不是很明显(9.42e-2),但使用CE(log_softmax(),)会有非常显著的损失下降(0.6661,约为softmax的7倍)。


http://www.ppmy.cn/news/1018646.html

相关文章

【工程优化问题】基于多种智能优化算法的压力容器设计问题研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

基于星火和Gradio的聊天机器人

星火大模型官网:https://xinghuo.xfyun.cn/ 1 创建虚拟环境(windows) conda create -n Gradio python3.8 pip install gradio 中间遇到os报错,解决方案: pip install aiofiles23.2.1 2 代码 SparkDesk.py&#xff1a…

Spring整合web环境

目录 1.添加pom 2.配置web.xml spring.xml 4.配置在创建一个类实现ServletContextListener 5.配置servlet 1.添加pom <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.…

界面控件DevExpress WPF Chart组件——拥有超快的数据可视化库!

DevExpress WPF Chart组件拥有超大的可视化数据集&#xff0c;并提供交互式仪表板与高性能WPF图表库。DevExpress Charts提供了全面的2D / 3D图形集合&#xff0c;包括数十个UI定制和数据分析/数据挖掘选项。 PS&#xff1a;DevExpress WPF拥有120个控件和库&#xff0c;将帮助…

一种水文水利行业满管非满管双声道流量计安装调试

供电电源 用户应该特别注意&#xff1a;若是交流&#xff08;AC220V&#xff09;供电的主机插入直流电源&#xff0c;或者直流&#xff08;DC24V&#xff09;供电的主机接入AC220V电源&#xff0c;就会把流量计烧毁。 普通主机&#xff08;包括固定式主机、盘装式主机&#x…

【剑指 Offer 40】最小的k个数

题目&#xff1a; 输入整数数组 arr &#xff0c;找出其中最小的 k 个数。例如&#xff0c;输入 4、5、1、6、2、7、3、8 这 8 个数字&#xff0c;则最小的 4 个数字是 1、2、3、4。 示例&#xff1a; 输入&#xff1a;arr [3,2,1], k 2 输出&#xff1a;[1,2] 或者 [2,1] …

【Django】招聘面试管理01 创建项目运行项目

文章目录 前言一、创建项目二、运行项目三、访问后台管理页面四、配置项总结 前言 跟着视频学一学&#xff0c;记录一下。 一、创建项目 照着步骤创建虚拟环境&#xff0c;安装Django等依赖包&#xff0c;创建项目&#xff1a;【Django学习】01 项目创建、结构及命令 > d…

String 类的运用

目录 1.字符串构造 2.String对象的比较 2.1比较是否引用同一个对象 2. 2boolean equals(Object anObject) 2.3int compareTo(String s) 方法: 按照字典序进行比较 2.4int compareToIgnoreCase(String str) 3.字符串查找 4.2大小写转换 4.3字符串转数组 4.4 格式化 5.字…