softmax函数–softmax layer

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

假设我们有一个数组z=(z1,z2,...zm)z=(z_1,z_2,...z_m),则其softmax函数定义如下:

σi(z)=exp(zi)∑mj=1exp(zj),i=1,2..,m

\sigma_i(z)=\frac{exp(z_i)}{\sum_{j=1}^mexp(z_j)} ,i=1,2..,m
也就是softmax是个函数映射,将 z=(z1,z2,...zm)z=(z_1,z_2,...z_m)映射到 (σ1,σ2,...σm)(\sigma_1,\sigma_2,...\sigma_m).
其中, ∑σi=1.\sum\sigma_i=1.

如下图,可以更清楚地表明。

在logistic回归中,假设zi=wTix+biz_i=w_i^Tx+b_i是第i个类别的线性预测结果,带入softmax中就可以得到oi=σi(z)o_i=\sigma_i(z)可以解释成观察得到的数据x属于类别i的概率,或者称为似然(Likehood)。

logistic regression

Logistic Regression 的目标函数是根据最大似然原则来建立的,假设数据x所对应的类别为 y,则根据x我们刚才的计算最大似然就是要最大化oyo_y的值

通常是使用 negative log-likelihood 而不是likelihood,也就是说最小化−log(oy)-log(o_y)的值,这两者结果在数学上是等价的。即min−log(oy)<=>max oymin -log(o_y) max~o_y

后面这个操作就是 caffe 文档里说的 Multinomial Logistic Loss,具体写出来是这个样子:

l(y,o)=−log(oy)

l(y,o)=-log(o_y)
从上面可以看出,计算似然损失,其实是和label一起的。这也是情理之中的,既然我们知道label是某一个,自然我们我希望对应的预测概率尽可能大一点。这就归结于上面的log损失。

softmax logistic loss

softmax logistic loss就是将softmax与上述的log损失结合到一起,只要把oyo_y的定义展开即可。

l^(y,z)=−log(ezy∑mj=1ezj)

\hat{l}(y,z)=-log(\frac{e^{z_y}}{\sum_{j=1}^{m}e^{z_j}})
其实label(这里指y)的作用就是指定了softmax的序号,也就是告诉是哪一些最小化。

反向传播

反向传播,要求根据loss更新weights,需要计算loss对于weight的偏导数。
我们参考了网上的一个例子,来简单介绍一下如何计算偏导。

a4=ez4ez4+ez5+ez6,a5=ez5ez4+ez5+ez6,a6=ez6ez4+ez5+ez6

a_4=\frac{e^{z4}}{e^{z4}+e^{z5}+e^{z6}}, a_5=\frac{e^{z5}}{e^{z4}+e^{z5}+e^{z6}}, a_6=\frac{e^{z6}}{e^{z4}+e^{z5}+e^{z6}}
好了,我们的重头戏来了,怎么根据求梯度,然后利用梯度下降方法更新梯度!

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

其中y代表我们的真实值,a代表我们softmax求出的值。i代表的是输出结点的标号!在上面例子,i就可以取值为4,5,6三个结点(当然我这里只是为了简单,真实应用中可能有很多结点)

现在看起来是不是感觉复杂了,居然还有累和,然后还要求导,每一个a都是softmax之后的形式!

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

这就回到了我们的softmax logistic loss,其实发现交叉熵损失与softmax logistic loss在输出只有一个类的时候等价。

参数的形式在该例子中,总共分为w41,w42,w43,w51,w52,w53,w61,w62,w63.这些,那么比如我要求出w41,w42,w43的偏导,就需要将Loss函数求偏导传到结点4,然后再利用链式法则继续求导即可,举个例子此时求w41的偏导为:

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

这里分为俩种情况:

j=i对应例子里就是如下图所示:

比如我选定了j为4,那么就是说我现在求导传到4结点这!

这里对应我的例子图如下,我这时对的是j不等于i,往前传:

参考文献

  • Softmax vs. Softmax-Loss: Numerical Stability
  • Caffe中Loss Layer原理的简单梳理
  • Softmax 函数的特点和作用是什么?

softmax logistic loss详解相关推荐

  1. 【损失函数】MSE, MAE, Huber loss详解

    转载:https://mp.weixin.qq.com/s/Xbi5iOh3xoBIK5kVmqbKYA https://baijiahao.baidu.com/s?id=16119517755261 ...

  2. 【人脸识别】Center Loss详解

    论文题目:<A Discriminative Feature Learning Approach for Deep Face Recognition> 论文地址:http://ydwen. ...

  3. 【人脸识别】L2_Softmax Loss详解

    论文题目:<L2-constrained Softmax Loss for Discriminative Face Verification> 论文地址:https://arxiv.org ...

  4. quality focal loss distribute focal loss 详解(paper, 代码)

    参见generalized focal loss paper 其中包含有Quality Focal Loss 和 Distribution Focal Loss. 目录 背景 Focal Loss Q ...

  5. 【目标检测】IoU、GIoU、DIoU、CIoU Loss详解及代码实现

    实际目标检测回归任务中的Loss ● Smooth L1 Loss: ● L1.L2.Smooth L1作为目标检测回归Loss的缺点: 1)坐标分别计算:x.y.w.h分别回归,当成4个不同的对象处 ...

  6. 【回归损失函数】L1(MAE)、L2(MSE)、Smooth L1 Loss详解

    1. L1 Loss(Mean Absolute Error,MAE) 平均绝对误差(MAE)是一种用于回归模型的损失函数.MAE 是目标变量和预测变量之间绝对差值之和,因此它衡量的是一组预测值中的平 ...

  7. 【目标检测】Focal Loss详解

    论文题目:<Focal Loss for Dense Object Detection> 论文链接:https://arxiv.org/pdf/1708.02002.pdf 1. 前言 我 ...

  8. Focal Loss详解以及为什么能够提高处理不平衡数据分类的表现

    不同γ设置的损失曲线 Kaggle竞赛:SIIM-ISIC黑素瘤分类中,必须输出两类皮肤癌的皮肤病变图像中黑色素瘤的概率.因此它是一种二值图像分类任务.评价标准是AUC(曲线下面积)度量.首先,我研究 ...

  9. NCE loss详解

    nce loss 可以看这个视频,讲的非常好: https://www.bilibili.com/video/BV1F7411x749?p=5&t=438 这个nce讲的非常好.(知乎-收藏夹 ...

最新文章

  1. python输出数据到excel-使用python将大量数据导出到Excel中的小技巧分享
  2. hdu4539 郑厂长系列故事——排兵布阵 + POJ1158 炮兵阵地
  3. Stack View 自定义间隙
  4. 活动 | 5G万物智联下互联网通信技术升级之路
  5. 读书笔记(十)——python简单爬取企查查网企业信息,并以excel格式存储
  6. 消失了一周的小夕在玩什么啦?
  7. nginx静态文件服务器_Linux分享文件?快速创建静态文件服务器
  8. android字符串点击事件,Android匹配字符串高亮并设置点击事件
  9. 如何生成二维码及注意事项
  10. excel2010服务器打开闪退
  11. 从高考落榜生到网络专家
  12. 基因结构图的0_TBtools | 只有序列,怎么做基因结构图?
  13. 国外广告联盟哪个好,六个高知名度平台
  14. 参加最牛逼的运营人年终聚会,是种什么样的体验
  15. ubuntu16.04 安装nvidia1060 驱动
  16. android 9.0 10.0 上报鼠标左键右键给app调用
  17. Python修改图片像素颜色值
  18. 自建个人用服务器要多少钱,我想建立一个人网站,像19楼那样的论坛,是自建服务器便宜还是租用服务器便宜...
  19. Nginx负载均衡轮询访问只会刚开始轮询一次,以后一直访问同一服务器
  20. php+美拍地址+解析,美拍视频采集之视频地址解析下载

热门文章

  1. 理解JavaScript中的原型继承(2)
  2. Zookeeper基础使用机制原理
  3. apachacxf项目使用@WebService报错
  4. 01_SQlite数据库简介
  5. $ionicPopup
  6. 算法 --- [队列结构]二叉树的层次遍历
  7. javascript --- 作用域和闭包
  8. html5 --- 使用canvas画一个渐变矩形
  9. 【co】ES6-20/21 iterator与generator
  10. ES6-17 class与对象