softmax(二):softmax交叉熵不是真正的目标函数

2023-11-04

最近一直在消化、吸收大神的输出,在这里主要把思路捋顺,试着增加自己的理解和扩展。
首先,上链接,还有我的膝盖,拜王峰大神,可以直接看大神的文字!
从最优化的角度看待Softmax损失函数
Softmax理解之Smooth程度控制

一、优化的目标函数

做分类的都知道,softmax交叉熵,是常用的分类损失函数,那么,它是怎么来的呢?
用CNN提取n维特征之后,我们想要拿这个n维特征,去预测,是狗,是猫,还是人?怎么预测呢,总不能直接拿n维特征吧,我们想要只想知道,是狗,是猫,还是人。为了解决这个问题,我们将n维特征经过一个线性变换,让cnn网络输出3分数,论文里面常叫做logit,来告诉我们,是猫多少分,是狗多少分,是人多少分。如果真实类别是狗,那么我们的目标函数希望,狗的分数,要比猫和人的分数都高,可以这么说,输出C个分数,时目标分数比最大的非目标分数更大:
l o s s = max ⁡ ( max ⁡ i ≠ y z i − z y , 0 ) (1) loss = \max(\max_{i \neq y}{z_i} - z_y, 0)\tag{1} loss=max(i=ymaxzizy,0)(1)
其中, z y z_y zy是我们的目标分数,即是狗的分数。当然,这个目标函数之前,还有一些其他的,可自己去看王峰大神的博客。
注意看,公式(1),每次都从非目标中挑出一个最大值参与目标函数,那么,也就是说,每次,最多只有一个正梯度(因为只有一个非目标分数)和一个负梯度(只有一个目标分数),那这优化起来也太慢了吧,于是,max的smooth版本就出来了。

二、目标函数的第一次smooth:LogSumExp

LogSumExp函数如下:
L S E = l o g ∑ i n e x p ( x i ) LSE = log \sum_{i}^nexp(x_i) LSE=loginexp(xi)
二者的关系是:
L S E > = m a x LSE >= max LSE>=max
至于为啥,这个真的是非常数学的东西了,感兴趣的,可以自行去google,这里再次膜拜一下数学,学好数学,称霸天下!
用上LSE,就会发现,非目标分数的最大值,不管选择了谁,都和其他非目标分数扯上了关系,这样,其他非目标分数的分支,也会有梯度了。
smooth之后的目标函数如下:
l o s s l s e = max ⁡ ( l o g ∑ i = 1 , i ≠ y C e z i − z y , 0 ) loss_{lse} = \max(log \sum_{i=1,i \neq y}^Ce^{z_i} - z_y,0) losslse=max(logi=1,i=yCezizy,0)

不懂之处:峰神说,使用LogSumExp函数相当于变相地加了一定的m???

三、目标函数的第二次smooth:softmax交叉熵

峰神说了,接着smooth,Relu函数 max ⁡ ( x , 0 ) \max(x,0) max(x,0)也有一个smooth版本,即softplus函数, l o g ( 1 + e x ) log(1+e^x) log(1+ex),那么用这个函数,接着smooth
L s o f t m a x = l o g ( 1 + e l o g ( ∑ i = 1 , i ≠ y C e z i ) − z y ) = l o g ( 1 + ∑ i = 1 , i ≠ y C e z i e z y ) = l o g ∑ i = 1 C e z i e z y = − l o g e z y ∑ i = 1 C e z i \begin{aligned} L_{softmax} & = log(1 + e^{log (\sum_{i=1,i \neq y}^Ce^{z_i}) - z_y}) \\ &=log(1+ \frac{\sum_{i=1,i \neq y}^Ce^{z_i}}{e^{z_y}}) \\ &= log{\frac{\sum_{i=1}^Ce^{z_i}}{e^{z_y}}} \\ &= -log{\frac{e^{z_y}}{\sum_{i=1}^Ce^{z_i}}} \end{aligned} Lsoftmax=log(1+elog(i=1,i=yCezi)zy)=log(1+ezyi=1,i=yCezi)=logezyi=1Cezi=logi=1Ceziezy
这个就是我们熟知的softmax交叉熵。

所以我们常用的softmax,其实不是max的smooth版本,max函数输出的是一个最大值,而softmax更倾向的是argmax,类似[1,0,0]。

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

softmax(二):softmax交叉熵不是真正的目标函数 的相关文章

随机推荐

  • JavaWeb项目导致Linux服务器CPU过高的解决方案

    最近我部署在centos7上的一个项目出现了CPU达到了100 的状态 导致项目崩溃 起初没重视 直接重启项目解决 后面项目运行了几天服务器又报警100 了 这个时候我才意识到项目问题的严重性 然后开始查找原因 查看数据库连接池 发现数据库
  • 关于class.getResourceAsStream() 与class.getClassLoader().getResourceAsStream()区别

    首先用类加载资源文件的方式可以有以下三种 包结构图 1 InputStreaminStream DaoFactory class getResourceAsStream dao properties 2 inStream DaoFactor
  • ES6模块化及webpack配置

    前端使用的一个模块打包工具 https webpack js org webpack安装 安装 node npm 因为webpack是基于node开发的 通过 npm yarn 的方式来安装 webpack 安装方式 全局安装 npm in
  • Linux C++ 网络编程基础(2) : TCP多线程一个server对应多个client

    目录 一 linux posix线程相关函数介绍 二 tcp server基础版本 三 tpc服务端多线程版本 四 tpc客户端代码 tcp编程时 一个server可以对应多个client server端用多线程可以实现 linux下多线程
  • bash_profile和.bashrc的区别

    1 etc profile 此文件为系统的每个用户设置环境信息 当用户第一次登录时 该文件被执行 并从 etc profile d目录的配置文件中搜集shell的设置 2 etc bashrc 为每一个运行bash shell的用户执行此文
  • Java中关于thread的停止问题

    stop Deprecated public final void stop Throwable obj 已过时 该方法具有固有的不安全性 请参阅 stop 以获得详细信息 该方法的附加危险是它可用于生成目标线程未准备处理的异常 包括若没有
  • DES加密Delphi、C#互通(CBC加密模式)

    Delphi 目录 https blog csdn net dkbnull article details 87935698 unit Unit1 interface uses Windows Classes SysUtils Dialog
  • Docker实战-编写Dockerfile

    一 编译镜像 1 编译镜像 Dockerfile类似于Makfile 用户使用docker build就可以编译镜像 使用该命令可以设置编译镜像时使用的CPU数量 内存大小 文件路径等 语法 docker build OPTIONS PAT
  • 初学Spring框架

    Spring 是一个java 项目开发的框架技术 所谓框架可以看成一个项目的半成品 已经具备了一个项目项目的基本骨架部分 需要自己实现一些具体的内容 Spring官网 初学Spring框架 Spring Framework 简介 IoC 入
  • Unity实战篇:讨论动画过程和计算伤害之间的关系

    在开发游戏的时候 我们会遇到这样的需求 当人物的攻击落到敌人身上时 播放特效 声效 产生伤害 等等一系列要求 那么我们要怎么实现呢 先了解一下怎么添加动画帧事件 https blog csdn net qq 15020543 article
  • Matlab学习5-图像处理之图像乘法、除法、边缘检测

    Matlab学习5 图像处理之逻辑运算 图像乘法 除法 边缘检测 1 图像乘法 效果 代码 图像相乘 img1 imread img rice png img2 imread img F4 11b MASK bmp img3 immulti
  • 【Getting Started with LLVM Core Libraries】P30 3.4 实验 使用独立工具

    LLVM学习笔记 Getting Started with LLVM Core Libraries P30 3 4 实验 使用独立工具 我们来看一个由分散在多个源文件中的函数组成的简单的C程序 但是 我们使用独立工具也可以获得相同的结果 为
  • 重定向爬虫和多线程爬虫

    前言 重定向爬虫是指在抓取网页时 如果目标网站内部存在重定向机制 即当你访问一个网页时 服务器会把你重定向到另一个目标网页 重定向爬虫可以帮助我们发现这种重定向链接 从而更有效地抓取目标网站的内容 要实现重定向爬虫 你需要在爬虫代码中添加重
  • 【云原生进阶之PaaS中间件】第一章Redis-1.2数据类型

    1 Redis 数据类型 Redis支持五种数据类型 string 字符串 hash 哈希 list 列表 set 集合 及zset sorted set 有序集合 1 1 String 字符串 string是redis最基本的类型 你可以
  • GridView横向滚动

    GridView和ListView都是android比较重要的控件 但是横滚的控件不是太多 这里介绍怎么把GridView横向滚动起来 看到其他网友也有相应的解决方法 自己只是把这些知识总结一下 供大家参考 首先让GridView横向滚动需
  • MySQL慢查询优化

    目录 优化方式 sql语句优化 索引优化 explain分析执行计划 show profile分析SQL trace分析优化器执行计划 通过慢查询日志定位那些执行效率低的SQL语句 MySQL大分页查询问题 一文详解MySQL各种锁及MVC
  • Android获取assets子目录注意事项

    获取assets子目录方法 span style font size 14px String subList getAssets list subdir span 返回当前目录下的所有文件 夹名 但不包含当前目录下子目录的文件 夹名 如果需
  • react源码中的hooks

    今天 让我们一起深入探究 React Hook 的实现方法 以便更好的理解它 但是 它的各种神奇特性的不足是 一旦出现问题 调试非常困难 这是由于它的背后是由复杂的堆栈追踪 stack trace 支持的 因此 通过深入学习 React 的
  • nacos的使用(借鉴淘宝Diamond配置中心)

    nacos常见的使用方法无非就是将获取到的配置文件放入propertise文件中 再从propertise中获取内容 如果配置过多 每增加一个nacos配置就得加一个propertise文件 文件多了 不便于维护 像一些需要经常改动的配置
  • softmax(二):softmax交叉熵不是真正的目标函数

    最近一直在消化 吸收大神的输出 在这里主要把思路捋顺 试着增加自己的理解和扩展 首先 上链接 还有我的膝盖 拜王峰大神 可以直接看大神的文字 从最优化的角度看待Softmax损失函数 Softmax理解之Smooth程度控制 一 优化的目标