softmax(softmax_layer的实现)

本文目录
- softmax_layer的实现
- 机器学习中softmax函数到底干嘛用的比如LR中和神经网络中,求大神赐教,越详细越好,谢谢了
- softmax函数与交叉熵函数详解
- 初探softmax
- 分层softmax
- softmax标曲算浓度
- 为什么需要softmax函数
- softmax函数和softmax层区别
- softmax怎么绘制roc曲线
softmax_layer的实现
Softmax是将神经网络得到的多个值,进行归一化处理,使得到的值在之间,让结果变得可解释。Softmax可以将结果看作是概率,某个类别概率越大,将样本归为该类别的可能性也就越高,因此通常用于多分类。
下图参考李宏毅老师课件中的Softmax的计算图。图中 是神经元的输出也可以作为第 个类别预测的概率结果, 是第 个类别的真实值,只能取0或者1,且 。
在神经网络后面添加Softmax,真实的标签(或者是类别)就相当于真实的分布,经过Softmax计算出的值就是预测的结果,因此可以使用交叉熵函数来作为损失函数。Softmax的损失函数为
反向传播的过程其实就是计算 的过程,根据导数的链式法则:
根据前向计算过程得出:
当 的时候
当 的时候
根据 求导得出:
综合两项偏导数,推出:
注:因为如果给定一个样本 ,那么他对应的真实标签只有一个值为 ,其余为 ,故 。
前向计算实现
先调用softmax_cpu实现前向计算,再调用softmax_x_ent_cpu计算整个网络的损失函数值和当前层的sensitivity即l.delta的值。
这个实现很简单,就是一步步按照前面的公式,计算指数值,再求和,最后归一化。
下面的实现计算delta的值的时候是真实值减去预测值,而上面推导的结果是预测值减去真实值。为什么也可以???
反向传播实现
softmax的敏感梯度图在softmax前向inference的时候已经计算完成,所以在反向的时候,这里只要调用axpy_cpu将对应位置的值传回去就行了。
***隐藏网址***
【2】 图示Softmax及交叉熵损失函数
【3】 Softmax函数与交叉熵
机器学习中softmax函数到底干嘛用的比如LR中和神经网络中,求大神赐教,越详细越好,谢谢了
首先你要知道softmax函数是干嘛的。softmax是一个可以把连续的数输出成一个在0到1之间的数。它的输出,表征了不同类别间的相对概率。
比如你的网络输出是。是不是就变成你想要的结果了。
当然,softmax函数也可以被当做激活函数,不止用在输出的处理。
softmax函数与交叉熵函数详解
一、二分类以上的任务与二分类任务在网络结构上的区别:
在逻辑回归模型中,模型最终输出的是样本属于正例的概率p,用1-p表示反例的概率,该模型在输出端具有单个输出结点。那么,对于多分类任务,输出端可以有多个结点,每个结点代表属于某一类的概率,满足约束条件:所有结点的概率和为1。这个约束条件将输出结点的输出值变成一个概率分布。【概率分布用于表述随机变量取值的概率规律,随机事件的所有可能值(随机变量)+对应的概率值,称为该事件的概率分布】
二、 softmax函数的使用
由一可知,多结点完成多分类任务需要满足的约束条件是:每个结点输出值范围是 & 所有结点输出值的和等于1。
能够满足这个约束要求的函数就是softmax函数。softmax常作为最后一层的激活函数使用。
softmax包含两部分:soft和max(求数据的最大值),与soft相对的就是hard,hardmax的作用就是直接计算出数据的最大值(唯一性)。softmax会为每个类别计算出一个概率值
softmax的计算原理:
softmax函数表达式:
对softmax的求导:( 对每个输出结点求偏导)
分两种情况:i=j 与 i≠j ,求偏导推导过程如下:
交叉熵损失函数与softmax之间的关系
在执行多分类任务中,经常是使用softmax激活函数和交叉熵损失函数的搭配方式。因为交叉熵描述了两个概率分布的差异,然而神经网络输出的是向量,所以需要softmax激活函数先将一个向量进行’归一化‘成概率分布的形式,然后再采用交叉熵损失函数对计算最终的loss。
softmax损失函数 重点:假设此时第i个输出节点为正确类别对应的输出节点,则 是正确类别对应输出节点的概率值,对 添加log运算,不影响函数的单调性,我们期望 的值越大越好(小于1),通常情况下使用梯度下降法来迭代求解,因此只需要为 添加一个负号就变成损失函数。现在,希望该损失函数越小越好。所以,softmax的损失函数式子为:
交叉熵损失函数与softmax损失函数的转换关系:
softmax损失函数是只针对正确类别对应的输出节点,将这个节点的softmax值最大化;而交叉熵损失函数是直接衡量真实分布和实际输出的分布之间的距离。
交叉熵式子: , 代表真实样本的标签值。 (2)
在分类任务中,样本的真实标签通常表示为one-hot形式,比如三分类,第三个类别表示为代入式子(2),最终结果为 。再对照式子(1),可以愉快的发现,(1)和(2)最终表达形式是一样的,那么,接下来计算损失函数的导数使用大家常见的式子(2),接下来将推导这个最终损失函数L对网络输出变量 的偏导数:
模拟一个三分类使用softmax与交叉熵的结果:
softmax+交叉熵损失函数对参数的更新规则,可以分为两步来记,第一步:每个节点的值减去对应的softmax结果;第二步,将真正类别的输出节点处的值加一。
参考以下文章:
多分类问题的交叉熵 一文详解softmax函数
初探softmax
冒泡~又是新的一周鸭!经历了昨天的多次地震,要更珍惜生命,努力鸭!
首先,我们要先了解一下,什么是Softmax?
Softmax是用于分类过程,用来实现多分类的,简单来说, 它把一些输出的神经元映射到(0-1)之间的实数,并且归一化保证和为1,从而使得多分类的概率之和也刚好为1 。
这是一种较为通俗的解释,当然我们也可以直接从这个名字入手去解释, Softmax可以分为soft和max,max也就是最大值,假设有两个变量a,b。如果a》b,则max为a,反之为b。那么在分类问题里面,如果只有max,输出的分类结果只有a或者b,是个非黑即白的结果。但是在现实情况下,我们希望输出的是取到某个分类的概率,或者说,我们希望分值大的那一项被经常取到,而分值较小的那一项也有一定的概率偶尔被取到,所以我们就应用到了soft的概念,即最后的输出是每个分类被取到的概率 。
函数定义如下:
在多分类问题中,我们经常使用交叉熵作为损失函数。
接下来进入对这个损失函数的求导:
通过上面的求导结果,可以发现结果恰好为 通过softmax函数求出了概率减1 ,那么我们就可以得到反向更新的梯度了。
举个例子 :
通过若干层的计算,最后得到的某个训练样本的向量的分数是,
那么经过softmax函数作用后概率分别就是 ,
如果这个样本正确的分类是第二个的话,
那么计算出来的偏导就是 (划重点) ,
然后再根据这个进行back propagation就可以了。
***隐藏网址***
***隐藏网址***
Ending~还是那句话理解更重要!
分层softmax
中文名叫霍夫曼树/霍夫曼编码,是个二叉树(注意 不是 二叉搜索树),这部分内容比较简单, 维基百科 上也说的非常清楚, 下面搬运一下维基百科上的例子 :
示例:
霍夫曼树常处理符号编写工作。根据整组数据中符号出现的频率高低,决定如何给符号编码。 如果符号出现的频率越高,则给符号的码越短,相反符号的号码越长 。假设我们要给一个英文单字"F O R G E T"进行霍夫曼编码,而每个英文字母出现的频率分别列在Fig.1。
演算过程:
(一)进行霍夫曼编码前,我们先创建一个霍夫曼树。
最后产生的树状图就是霍夫曼树,参考Fig.2。
(二)进行编码
word2vec Parameter Learning Explained这篇论文中介绍了 Continuous Bag-of-Word Model(连续词袋模型)和skip-gram model(跳字模型),分别对应了词向量的两种训练方法:利用context预测中心词以及利用中心词去预测context。对于连续词袋模型(CBOW)来说,一般的做法(如下图所示)是先对每个单词进行one-of-N编码(one-hot encoded),作为训练网络的输入,接着构建一层hidden layer,最后构建输出层,这一层是一个softmax层,每个context单词到中心单词的事件都被认为是 独立的 ,所以将这些事件发生的 概率相乘 ,最后构建损失函数,即:将输出概率分布和实际选中的词概率分布进行Corss Entropy计算,接下来使用SGD对参数进行更新。这里,hidden layer的训练结果就是最终的 word vector 了。
上述方法看起来是没毛病的,问题是计算量有点大,尤其是进行反向传播更新参数的时候:
式(1)说明,参数更新的时候,对于每一个单词每一次迭代都 至少 有 的计算量,如此大的计算量是由于softmax引用了词典中的所有单词。
在skip-gram模型中也是一样的:
为了减少计算量,作者提出了两种近似计算方法,第一种叫做 Negative Sampling (负采样),该方法就是对词典中的特定属性的单词进行特定分布的采样,将计算的数据量降低了(详见论文);第二种就是 Hierarchical Softmax (分层softmax/层次softmax),该方法将 softmax层 替换成了 分层softmax层 。
分层softmax 的计算过程如下图所示:
图片来自 这里
从图中可以看出,hidden layer到output layer的连接原本是一个简单的softmax,有 V个神经元 和所有的hidden layer两两连接,现在变成了一个树,有 V-1个神经元 和所有的hidden layer两两连接。计算概率的方法也发生了变化:
其中,当 时,中括号内为1,否则为-1,这是用到了一个sigmoid函数的小trick: 。所以式(2)的意思就是从根节点到目标单词,有且仅有一条路径可以到达,在这条路径上往左走的概率是 ,往右走的概论自然就是 , 逻辑回归 那篇也介绍过,sigmoid函数是用来做二分类的,在这里正好合适;当路径上的所有二分类的概率都连乘后,得到的就是预测单词的概率,可以证明,词典中所有单词被预测到的概率和为1。这也是这个方法被叫做分层softmax的原因了。
如此一来,计算某个单词被预测的概率就仅仅和该单词到hidden layer的神经元连接的唯一路径相关了,更新参数的时候计算量一下子降到了O(log(n))。
关于这方面的源码编写可以参考 这个美国老哥的博客 。
softmax标曲算浓度
softmax定义:首先给一个图,这个图比较清晰地告诉大家softmax是怎么计算的。
高浓度范围标曲可以浓度从1 ng/mL制备到1 μg/mL,低浓度范围标曲可以从25 pg/mL制备到25 ng/mL。对于高浓度范围标曲,按Table 2中稀释方案稀释;对于低浓度范围标曲,40倍稀释2μg/mL溶液制备50 ng/mL溶液,参考Table 3中的稀释方案。 注意:此篇应用文档,使用了浓度从1 μg/mL到50pg/mL的一系列标曲。
- 用移液器将100 μL每孔标准品转移到一个黑色 96-孔微孔板中,最好3个重复。确保向孔中加TE(无DNA)来作为空白孔。
- 加100 μL每孔Quant-iT PicoGreen试剂水相工作液。通过涡旋或震板机室温避光混合2到5分钟
为什么需要softmax函数
能不能将全连接层的输出作为分类的结果?
从上图单层网络中我们能够计算出O1, O2, O3:
比较O1, O2, O3的结果,可以得到绝对大小,根据哪个最大被判为该类别,这种判别方法为 硬分类 。
但是我们也想得到 软分类 :即属于该类别的概率,原因是希望分值大的那一项经常取到,分值小的那一项也偶尔可以取到。如果用概率的方式判别多分类,要求是所有的值都是大于等于0且和加起来是1, 但是上面的O1, O2, O3就不能满足了 ,显然O1, O2, O3加起来不等于1, 且输出值O由可能为负数,我们知道概率的值是不能为负的。
那么我们怎么保证在任何数据上的输出都是非负且总和为1? 社会科学家邓肯.鲁斯发明了softmax函数,能够证在任何数据上的输出都是非负且总和为1;softmax运算不会改变O1, O2, O3之间的顺序,只会给每个类别分配概率。
那么在softmax函数中为什么需要指数呢?根据下图所示,三个输入值z1为3,z2为1,z3为-3, 经过指数运算后分别为20, 2.7, 0.05,因为 指数比较陡 ,其 指数值之间的间距就会拉得很大 。接着每个值都除以 相同的分母 ,那么得到的值(概率) 仍是中间能够拉开很大 。这样就 很容易进行软分类 。
softmax函数和softmax层区别
区别在于类型不同。
1、Softmax函数是一种数学函数,用于将一组实数转换为范围在0到1之间的概率分布,用于多分类问题中,将原始的类别分数(或称为logits)转化为各个类别的概率。
2、Softmax层是深度学习神经网络中的一种层类型,通常用于多分类任务的输出层,将前一层的输出转换为一组类别的概率分布。
softmax怎么绘制roc曲线
softmax绘制roc曲线方法如下。对于普通数值型输入,模型测试时在输出部分增加softmax函数,取阳性概率值即可。

更多文章:
怎样在手机上开通证券账户?安信证券开户后怎么登陆交易 安信证券开户后怎么操作
2025年12月17日 16:15
最近中国韩国日本视频(曾经报道过一个有关中国人冒充韩国人还是日本人,正巧因为那个国家与别国有矛盾,就被打的事情是怎么回事)
2026年8月11日 06:00
文泰刻绘2010(文泰刻绘2010无法刻绘输出,怎么回事怎么回事)
2025年12月14日 13:45
造梦西游2ce修改器教程(怎么用CE6.1修改造梦西游2那蛋疼的爆率实在是让人无语.能该灵魂和攻击血量就好.求你们)
2026年6月2日 20:00


















