当前位置: 首页 > news >正文

log_softmax比softmax更好?

多类别分类的一个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.lryc.cn/news/116200.html

相关文章:

  • [LeetCode - Python]344.反转字符串(Easy);345. 反转字符串中的元音字母(Easy);977. 有序数组的平方(Easy)
  • 【SOP】最佳实践之 TiDB 业务写变慢分析
  • 带有参数的 PL/SQL 过程/函数从选择查询返回表
  • 文件的权限
  • vue3集成echarts最佳实践
  • 一位年薪40W的测试被开除,回怼的一番话,令人沉思
  • 网络适配器和MAC地址
  • react-player静音不能自动播放问题
  • 培训Java技术要多久才能学会?答案都在这里啦
  • Java中使用HttpPost发送form格式的请求
  • C语言----字节对齐
  • Next.js入门介绍(服务端渲染)
  • 模板Plus
  • spring事务和数据库事务是怎么实现
  • el-date-picker设置默认当前日期
  • vue中使用this.$refs获取不到子组件的方法,属性方法都为undefined的解决方法
  • Linux命令200例:df用于显示文件系统的磁盘空间使用情况
  • Service not registered 异常导致手机重启分析
  • 深度解读|一站式ABI平台 Smartbi Insight V11 能力再升级
  • vConsole手机调试模式uniapp和原生h5
  • Flutter Dart语言(05)异步
  • 滇医通微信小程序分析笔记
  • IoTDB在springboot2中的(二) 查询
  • SpringBoot 底层机制分析【Tomcat 启动+Spring 容器初始化+Tomcat 如何关联Spring 容器】【下】
  • NLP(六十五)LangChain中的重连(retry)机制
  • C字符串与C++ string 类:用法万字详解(上)
  • async/await函数需要trycatch吗?
  • Jenkins集成appium自动化测试(Windows篇)
  • MongoDB:切换log日志文件
  • 代码随想录第三十五天