美文网首页
softmax函数

softmax函数

作者: 爱昕昕的猫先生 | 来源:发表于2018-06-06 17:47 被阅读0次

这几天学习了一下softmax激活函数,以及它的梯度求导过程,整理一下便于分享和交流!

一、softmax函数
softmax用于多分类过程中,它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类!

假设我们有一个数组[a1, a2, a3 ... an],则
Si= e^ai / sum(e^a1 + e^a2 + ... +e^an)
如下图:


image.png

softmax直白来说就是将原来输出是3,1,-3通过softmax函数一作用,就映射成为(0,1)的值,而这些值的累和为1(满足概率的性质),那么我们就可以将它理解成概率,在最后选取输出结点的时候,我们就可以选取概率最大(也就是值对应最大的)结点,作为我们的预测目标!

二、softmax相关求导
当我们对分类的Loss进行改进的时候,我们要通过梯度下降,每次优化一个step大小的梯度,这个时候我们就要求Loss对每个权重矩阵的偏导,然后应用链式法则。那么这个过程的第一步,就是对softmax求导传回去,不用着急,我后面会举例子非常详细的说明。在这个过程中,你会发现用了softmax函数之后,梯度求导过程非常非常方便!


image.png

我们能得到下面公式:

z4 = w41o1+w42o2+w43*o3

z5 = w51o1+w52o2+w53*o3

z6 = w61o1+w62o2+w63*o3

z4,z5,z6分别代表结点4,5,6的输出,01,02,03代表是结点1,2,3往后传的输入.

那么我们可以经过softmax函数得到
a4= e^z4 / sum(e^z4 + e^z5 + e^z6)
a5= e^z5 / sum(e^z4 + e^z5 + e^z6)
a6= e^z6 / sum(e^z4 + e^z5 + e^z6)
好了,我们的重头戏来了,怎么根据求梯度,然后利用梯度下降方法更新梯度!**

要使用梯度下降,肯定需要一个损失函数,这里我们使用交叉熵作为我们的损失函数,为什么使用交叉熵损失函数,不是这篇文章重点,后面有时间会单独写一下为什么要用到交叉熵函数(这里我们默认选取它作为损失函数)

交叉熵函数形式如下:
loss = -∑yi * log ai

其中y代表我们的真实值,a代表我们softmax求出的值。i代表的是输出结点的标号!在上面例子,i就可以取值为4,5,6三个结点(当然我这里只是为了简单,真实应用中可能有很多结点
现在看起来是不是感觉复杂了,居然还有累和,然后还要求导,每一个a都是softmax之后的形式!

但是实际上不是这样的,我们往往在真实中,如果只预测一个结果,那么在目标中只有一个结点的值为1,比如我认为在该状态下,我想要输出的是第四个动作(第四个结点),那么训练数据的输出就是a4 = 1,a5=0,a6=0,哎呀,这太好了,除了一个为1,其它都是0,那么所谓的求和符合,就是一个幌子,我可以去掉啦!

为了形式化说明,我这里认为训练数据的真实输出为第j个为1,其它均为0!
那么Loss就变成了loss = -yi * log ai,累和已经去掉了,太好了。现在我们要开始求导数了!
我们在整理一下上面公式,为了更加明白的看出相关变量的关系:yj = 1, loss = - log ai
那么形式越来越简单了,求导分析如下:
参数的形式在该例子中,总共分为w41,w42,w43,w51,w52,w53,w61,w62,w63.这些,那么比如我要求出w41,w42,w43的偏导,就需要将Loss函数求偏导传到结点4,然后再利用链式法则继续求导即可,举个例子此时求w41的偏导为:


image.png

w51.....w63等参数的偏导同理可以求出,那么我们的关键就在于Loss函数对于结点4,5,6的偏导怎么求,如下:
这里分为俩种情况:


image.png
image.png
image.png
image.png

三、softmax实现(python)


image.png
image.png

相关文章

  • softmax函数详解

    softmax函数详解softmax的log似然代价函数(公式求导)

  • Softmax

    Softmax 我们令 , 定义 softmax 函数为 这样, Softmax Regression 算法是 L...

  • Logistic Regression

    推导 sigmoid 推导LR损失函数 推导LR梯度下降 Softmax原理 softmax 损失函数 softm...

  • Softmax函数 Logistic函数

    Softmax函数:https://en.wikipedia.org/wiki/Softmax_function ...

  • softmax函数的求导学习

    今天学习了softmax函数的求导,和其他函数求导不同,softmax函数中的参数不是常量,而是向量。 对于陌生的...

  • 12- 深度学习之神经网络核心原理与算法-Softmax

    softmax 输出层的激励函数softmax 前面我们已经接触了一种激励函数,sigmoid函数。含义: 似然度...

  • 神经网络[输出层]激活函数的选择

    目录 1.输出层激活函数的选择 2.Softmax激活函数的特征 3.Softmax激活函数的实现以及优化 对于机...

  • 损失函数和优化-损失函数(2)

    引言 这一节的笔记,主要讲解除了SVM以外的另一种损失函数——softmax损失函数。 softmax损失函数 如...

  • softmax函数

    这几天学习了一下softmax激活函数,以及它的梯度求导过程,整理一下便于分享和交流! 一、softmax函数so...

  • softmax函数

    softmax用于多分类过程中,它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类...

网友评论

      本文标题:softmax函数

      本文链接:https://www.haomeiwen.com/subject/gwqisftx.html