005、Softmax损失

之——softmax与交叉熵

杂谈

        我们常用到softmax函数与交叉熵的结合作为损失函数以监督学习,这里做一个小小的总结。


正文

1.softmax的基本改进

        所谓softmax就是在对接全连接层输出时候把输出概率归一化,最基础的就是这样:

        效果就是这样:

        数值上达到的效果就是使得最后输出总和为1,范围0~1.

a = np.array([38,20,40,39])
softmax_a = np.exp(a) / np.sum(np.exp(a))
print(softmax_a)
#[9.00305730e-02 1.37116380e-09 6.65240955e-01 2.44728471e-01]

        但是这个是存在数值不稳定的,极小或极大的差异将会溢出,x很小的都会被归为0,大的又会溢出,所以我们通常做了一定的改进。 

改进一:减去最大防止溢出

        C一般是我们的数值最大值,这个操作使得我们可以防止x过大的情况出现,减小指数函数输入差异。这只是对运算过程中做一下数值稳定性的规约,不会影响输出结果。

a = np.array([38,20,40,39])
a_max = np.max(a)
softmax_a = np.exp(a-a_max) / np.sum(np.exp(a-a_max))
print(softmax_a)
#[9.00305730e-02 1.37116380e-09 6.65240955e-01 2.44728471e-01]

改进二:Log

        为了一定程度上消除求幂指数和除法,通常会对以上的softmax取log,这样可以除法转化为减法,,并减少一次幂指数的计算,也提高了梯度的计算能力,甚至跟香农信息熵的形式一定程度地联系了起来。

a = np.array([38,20,40,39])
a_max = np.max(a)
time1 = time.time()
for i in range(100000):softmax_a = np.exp(a-a_max) / np.sum(np.exp(a-a_max))softmax_a = np.log(softmax_a)
time2 = time.time()
print("未优化时间:",time2-time1)
print("softmax_a:",softmax_a)time3 = time.time()
for i in range(100000):softmax_a = a-a_max - np.log(np.sum(np.exp(a-a_max)))
time4 = time.time()
print("优化时间:",time4-time3)
print("softmax_a:",softmax_a)未优化时间: 0.8376865386962891
softmax_a: [ -2.40760597 -20.40760597  -0.40760597  -1.40760597]
优化时间: 0.7791688442230225
softmax_a: [ -2.40760597 -20.40760597  -0.40760597  -1.40760597]

         十万次计算下的速度优化。

改进三:Softmax Temperature

        softmax可能存在对于一些数值上相近的向量数值,概率却相差很大,比如上面接受的输入是[38,20,40,39],不加log输出就是[0.09, 0.00, 0.6, 0.24],加log的输出就是[ -2.41 -20.41  -0.41  -1.41],可见相差实在是太大了,所以引入一个对于输入范围的缩小,希望输入都在平滑合理的区间内:

a = np.array([38,20,40,39])
a_max = np.max(a)
tao=100
softmax_a = np.exp((a-a_max)/tao) / np.sum(np.exp((a-a_max)/tao))
print("softmax_a:",softmax_a)softmax_a: [0.25869729 0.21608214 0.26392332 0.26129724]

        设置tao为100,可见输出变得更为很合理。

改进四:FC + Softmax——Modified Softmax

        在很多时候,Softmax接在一个全连接层(或者某个能够统一维度的层)之后,所以形式上改进为:注意,由于这里是矩阵形式的x,所以xi、xj表示的都是那个展平的x,由W的标号决定对应的输出yj:

        消除向量表达全部变为标量那就是modified softmax:

        如果能将 W=1,b=0,就得到了一个比较规范化的modified softmax:


2.softmax的演变

        数据科学家想要在softmax上面做一些特定性的改变来显式得体现出改进。

演变一:Large-Margin Softmax(L-Softmax)

        思路是想要在分类任务中,使得类内距离尽可能小,类间距离尽可能大。于是L-Softmax提出基于Modified Softmax增加一个超参数来控制。想要将特征与参数分解为振幅和具有余弦相似度的角:

        如果是个二分类,上文中提到的modified softmax的分类为1类依据是(分母相同,忽略偏差):

        而 L-Softmax则类似于间隔化的思想,想要分类更严格并扩大决策范围:(m>=1,0 ≤ θ1 ≤ π/m )

        那么我们的学习目标就变成了后式,也就是要更严格的θ,也就是相比没有引入m时更小的θ。                                                                      

        因为 m是正整数,cos 函数在 0 到 π 范围是单调递减的,所以 cos(mθ) 要小于 cos(θ)则m要>=1 。 m 值越大则表示我想要的间隔越大,因此通过这种方式调大m定义损失会逼得模型学到类间距离更大的,类内距离更小的特征。 我如果增大m,则表示我要你的θ1更小,意思是最后寻找到的特征空间的类间距离更大的,类内距离更小。当然为了满足学习目标,θ2也会被压小。

        最终定义为:

        为了满足分段函数的连续,原文构造了一个函数:

演变二: Angular Softmax(A-Softmax)

        A-Softmax的改进思路和L-Softmax相似,都是对于在分类任务中,使得类内距离尽可能小,类间距离尽可能大,只不多A-Softmax与L-Softmaxd区别主要是A-Softmax多了一个权重归一化,和Modified Softmax里面的权重归一化一样:

演变三: Additive Margin Softmax(AM-Softmax)

        将L-Softmax & A-Softmax的 改造为新函数:,然后把W和x都归一化,而我们又知道:,分母归一化为1了,这样原来的式子就变成了:

        直接跟正则化扣上了,我增大m,那模型训练时候为了让softmax大那其Wx就得大,那肯定只能训练出越靠近x的W才会越大啦。这样的好处是求导极其简单。

演变n:还有一堆

Softmax与其变种 - 知乎 (zhihu.com)


3.交叉熵

        交叉熵的引入就是通过独热编码将注意力集中在分类正确的softmax上,用分类正确的softmax的梯度更新权重,因为只有分类正确的-log p*log(q)的p才会是1。

        而至于说log则达到了我们之前所做的log_softmax的效果,取-就直接表示要最小化损失,最大化softmax输出。


感谢:1  2  3  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/216851.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Android嵌入式开发及实训课程实验】【项目1】 图形界面——计算器项目

【项目1】 图形界面——计算器项目 需求分析界面设计实施1、创建项目2、 界面实现实现代码1.activity_main.xml2.Java代码 - MainActivity.java 3、运行测试 注意点结束~ 需求分析 开发一个简单的计算器项目,该程序只能进行加减乘除运算。要求界面美观,…

【异常解决】SpringBoot + Maven 在 idea 下启动报错 Unable to start embedded Tomcat(已解决)

Unable to start embedded Tomcat(已解决) 一、背景介绍二、原因分析2.1 网络上整理2.2 其他原因 三、解决方案 一、背景介绍 spring boot(v2.5.14) maven idea 启动项目 之前项目一直启动的好好的,都能正常运行。重启的时候突然就不能启…

汽车服务行业分析:预计2028年将达到38亿元

在推进加快检验机构建设同时,综合评估检验机构数量、分布和检测能力,探索试点汽车 4S 店开展检验,提供维修、保养、车检一体化服务。汽车服务主要是指围绕汽车展开的一系列服务活动,包括维修、美容、金融等,除具有一般…

Wireshark中的http协议包分析

Wireshark可以跟踪网络协议的通讯过程,本节通过http协议,在了解Wireshark使用的基础上,重温http协议的通讯过程。 TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于 字节流…

【C++】类与对象(下)

本文目录 1. 再谈构造函数1.1 构造函数体赋值1.2 初始化列表1.3 explicit关键字 2. static成员2.1 概念2.2 特性 3. 友元3.1 友元函数3.2 友元类 4. 内部类5. 匿名对象6. 拷贝对象时的一些编译器优化7. 再次理解类和对象 1. 再谈构造函数 1.1 构造函数体赋值 在创建对象时&am…

山西电力市场日前价格预测【2023-12-09】

1.日前价格预测 预测说明: 如上图所示,预测明日(2023-12-09)山西电力市场全天平均日前电价为366.40元/MWh。其中,最高日前电价为629.26元/MWh,预计出现在08:00。最低日前电价为216.58元/MWh,预…

Tomcat部署及优化

1. Tomcat 简介 Tomcat 是 Java 语言开发的,Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,是 Apache 软件基金会的 Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他一些公司及个人共同开发而成。 Tomcat 属于轻量级应用服务器…

【数据结构】堆的模拟实现

前言:前面我们学习了顺序表、单链表、栈、队列,今天我们就开始新的学习吧,今天我们将进入堆的学习!(最近博主处于低谷期)一起加油吧各位。 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:数据结构 &…

【代码随想录】刷题笔记Day34

前言 考过概率论,发过一场烧,兜兜转转又一月,轻舟已撞万重山,赶紧刷题 贪心算法理论基础 贪心的本质:局部最优→全局最优无套路,常识性推导 举反例 455. 分发饼干 - 力扣(LeetCode&#xf…

小黑独自去逛城墙和夫子庙,夜泊秦淮被雨淋,南京马拉松323刷新自己最好成绩,开始参加部里公务员培训的leetcode之旅:12. 整数转罗马数字

小黑代码 class Solution:def intToRoman(self, num: int) -> str:# 定义字符数组和数字数组chars [M, CM, D, CD, C, XC, L, XL, X, IX, V, IV,I]nums [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]total numres # 遍历每个符号for i in range(13):# 依次进…

自炫锁2-b

1. 自旋锁 自旋锁也是为实现保护共享资源而提出一种锁机制。其实,自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。 无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,也就说&…

进程(IPC)_D3(2023-12-12)

XMind(分图版)

三层交换原理

三层交换机出现的背景 早期的网络中一般使用二层交换机来搭建局域网,而不同局域网之间的网络互通由路由器来完成。那时的网络流量,局域网内部的流量占了绝大部分,而网络间的通信访问量比较少,使用少量路由器已经足够应付了。 但…

js 根据指定日期格式化输出( 刚刚,几分钟前,几小时前,今天,标准日期)

代码如下: function getDateStr(stringTime) {let str stringTime;//将字符串转换成时间格式let timePublish new Date(str);let timeNow new Date();let minute 1000 * 60;let hour minute * 60;let day hour * 24;let month day * 30;let year month * 1…

智能优化算法应用:基于闪电搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于闪电搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于闪电搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.闪电搜索算法4.实验参数设定5.算法结果6.…

QML WebEngineView 全屏和退出

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 在使用浏览器时,我们经常会用到全屏模式,最常见的场景有:观看视频、阅读文章、在线演示等。全屏模式的优点在于,它可以让用户充分地利用有限的屏幕空间,更好地专注于内容本身,从而提供丰富的沉浸式视觉…

渲染农场对工业产品渲染带来的意义与优势?

随着科技的进步,利用精细渲染图来呈现和推广工业设计的创新已成为行业标准。这些图像在产品研发、设计评审和营销阶段起着关键作用,同时对产品最终的成功也产生深远影响。然而,由于产品设计日渐复杂,制作渲染图的任务变得极具挑战…

Qt开发 之 Qt5各版本情况分析

文章目录 1、简介2、Qt5 版本归纳3、下载地址3.1、典型版本3.1.1、Qt5.0.03.1.2、Qt5.9.93.1.3、Qt5.12.12 3.2、当前Qt5最新版本 1、简介 Qt6 出生刚刚好一年的时间,已经出到6.6版本,带来了许多的新特性和改进。今天刚刚好抽空总结下陪伴 我工作这么长…

单元测试技术

文章目录 一、单元测试快速入门二、单元测试断言三、Junit框架的常用注解 一、单元测试快速入门 所谓单元测试,就是针对最小的功能单元,编写测试代码对其进行正确性测试。 常规的例如如果在main中测试,比如说我们写了一个学生管理系统&…

【C语言】数据结构——小堆实例探究

💗个人主页💗 ⭐个人专栏——数据结构学习⭐ 💫点击关注🤩一起学习C语言💯💫 导读: 我们在前面学习了单链表和顺序表,以及栈和队列。 今天我们来学习小堆。 关注博主或是订阅专栏&a…