作者:无影随想 
时间:2016年1月。 
出处:https://zhaokv.com/machine_learning/2016/01/softmax-calculous-perspective.html
声明:版权所有,转载请注明出处

Softmax是机器学习中最常用的输出函数之一,网上有很多资料介绍它是什么以及它的用法,但却没有资料来介绍它背后的原理。本文首先简单地介绍一下Softmax,然后着重从数学分析的角度来分析一下它背后的原理。

分类问题是监督学习中最重要的问题之一,它试图根据输入$\bf{x}$来预测对应标签$y$的概率。Softmax便是计算标签概率的重要工具之一:

${\bf p}=\rm{softmax}({\bf a})\Leftrightarrow p_i=\frac{\exp({a_i})}{\sum_j\exp({a_j})}$

其中$a_i$是模型对于第$i$个分类的输出。接下来简单地证明一下:通过对数最大似然以及梯度下降方法可以使$p_i$逼近第$i$个分类的真实概率。对数最大似然中的损失函数为$L_{NLL}({\bf p},y)=-\log p_y$,对它关于${\bf a}$求导得:

$\frac{\partial}{\partial a_k}L_{NLL}({\bf p},y)=\frac{\partial}{\partial a_k}(-\log p_y)=\frac{\partial}{\partial a_k}(-a_y+\log\sum_j e^{a_j})$

$=-{\bf 1}_{y=k}+\frac{e^{a_k}}{\sum_j{e^{a_j}}}=p_k-{\bf 1}_{y=k}$

即$\frac{\partial}{\partial {\bf a}}L_{NLL}({\bf p},y)=({\bf p}-{\bf e}_y)$,其中${\bf e}_y=[0,\cdots,0,1,0,\cdots,0]$是一个向量,除了位置$y$为1之外全是0。相同${\bf x}$的样本对应相同的${\bf a}$,我们可以看到,随着越来越多样本参与梯度下降,$p_i$会逼近第$i$个分类的真实概率,即${\bf p}=\mathbb{E}[{\bf e}_{y}|{\bf x}]$,因为$\lim\limits_{N\to\infty}\frac{1}{N}\sum\limits_{i=1}^N({\bf p}-{\bf e}_y^{(i)})=0$,其中$\lim\limits_{N\to\infty}\frac{1}{N}\sum\limits_{i=1}^N{\bf e}_y^{(i)}$是真实概率。

从收敛速度方面,对数最大似然与梯度下降在Softmax身上简直是绝配。对于一个输入为${\bf x}$的样本,假设它的真实分类是$i$,对于模型的第$j(j\neq i)$个输出有$\frac{\partial}{\partial a_j}L_{NLL}({\bf p}, y)=p_j$,如果$p_j\approx 0$(即模型认为不太可能是分类$j$,预测结果与实际相符),梯度接近0,会进行很小的修正,如果$p_j\approx 1$(即模型非常有信心地预测是分类$j$,预测结果与实际相反),梯度接近1,会进行很大的修正。另外,对于模型的第$i$个输出有$\frac{\partial}{\partial a_i}L_{NLL}({\bf p}, y)=1-p_i$,如果$p_i\approx 0$(即模型认为不太可能是分类$i$,预测结果与实际相反),梯度接近1,会进行很大的修正,如果$p_i\approx 1$(即模型非常有信心地预测是分类$i$,预测结果与实际相符),梯度接近0,会进行很小的修正。综上,在Softmax上使用对数最大似然作为损失函数,梯度下降情况非常理想——预测错误时修正大,预测正确时修正小

当然也有人在Softmax上尝试其他损失函数,比如最有名的最小二乘。结果是两者并不搭,因为在最小二乘下模型如果预测完全错误时修正也会非常小。设${\bf y}={\bf e}_i$(注意这里的${\bf y}$是黑体),对最小二乘$L_2({\bf p}({\bf a}),{\bf y})=||{\bf p}({\bf a})-{\bf y}||^2$关于$a_i$(假设$i$是正确类别)求导得

$\frac{\partial}{\partial a_i}L_2({\bf p}({\bf a}),{\bf y})=\frac{\partial{L_2({\bf p}({\bf a}), {\bf y})}}{\partial {\bf p}({\bf a})}\frac{\partial {\bf p}({\bf a})}{\partial a_i}$

$=\sum_{j\neq i}2(p_j-{\bf y}_j)p_j(0-p_i)+2(p_i-{\bf y}_i)p_i(1-p_i)$

如果对于正确类别$i$模型的预测是$p_i\approx 0$(与实际强烈不符),显然有$\frac{\partial}{\partial a_i}L_2({\bf p}({\bf a}),{\bf y})\approx 0$,也就是说梯度下降对模型几乎不修正,可见Softmax搭配最小二乘的梯度下降情况并不好。

PS:Softmax还有一个重要性质是平移不变性,即${\rm softmax}({\bf a})={\rm softmax}({\bf a}+b)$,因为$\frac{\exp({a_j+b})}{\sum_k\exp({a_k+b})}=\frac{\exp({a_j})}{\sum_k\exp({a_k})}$。由于平移不变性的存在,模型只需要学到${\bf a}$中元素的相对大小,而不需要学到绝对大小。另外,我们还可以根据${\rm softmax}({\bf a})={\rm softmax}({\bf a}-\max_ia_i)$有效地减少计算误差。

综上所述,首先,Softmax的确可以表示概率,且随着样本的增多通过对数最大似然与梯度下降可以无限逼近真实概率值;其次,Softmax与对数最大似然这一组合在梯度下降中有很好的修正速度;最后,因为平移不变性,我们只需要关心模型不同类别输出间的相对大小,不需要关心绝对大小。

从数学分析的角度来看Softmax的更多相关文章

  1. 从jvm的角度来看单例模式

    最近在看jvm,发现随着自己对jvm底层的了解,现在对java代码可以说是有了全新的认识.今天就从jvm的角度来看一看以前自以为很了解的单例模式. 了解单例模式的人都知道,单例模式有两种:" ...

  2. 以代码爱好者角度来看AMD与CMD

    随着浏览器功能越来越完善,前端已经不仅仅是切图做网站,前端在某些方面已经媲美桌面应用.越来越庞大的前端项目,越来越复杂的代码,前端开发者们对于模块化的需求空前强烈.后来node出现了,跟随node出现 ...

  3. 以代码爱好者角度来看AMD与CMD(转)

    随着浏览器功能越来越完善,前端已经不仅仅是切图做网站,前端在某些方面已经媲美桌面应用.越来越庞大的前端项目,越来越复杂的代码,前端开发者们对于模块化的需求空前强烈.后来node出现了,跟随node出现 ...

  4. 从源码角度来看BeanFactory和ApplicationContext的关系

    大家好,我是小黑,这是年前的最后一篇推文,提前祝大家新年快乐~~ 这次我们从源码角度来聊聊BeanFactory和ApplicationContext的关系,讲一些网上文章不曾提到的点. 官方描述 先 ...

  5. 从IDEA角度来看懂UML图

    前言 我们目前已经学习了设计模式的7种设计原则.下面本该是直接进入具体的设计模式系列文章. 但是呢在我们学习设计模式之前我们还是有必要了解一下uml图.因为后续的设计模式文章不出意外应该会很多地方使用 ...

  6. 从CLR角度来看值类型与引用类型

    前言 本文中大部分示例代码来自于<CLR via C# Edition3>,并在此之上加以总结和简化,文中只是重点介绍几个比较有共性的问题,对一些细节不会做过深入的讲解. 前几天一直忙着翻 ...

  7. 从jvm的角度来看java的多线程

    最近在学习jvm,发现随着对虚拟机底层的了解,对java的多线程也有了全新的认识,原来一个小小的synchronized关键字里别有洞天.决定把自己关于java多线程的所学整理成一篇文章,从最基础的为 ...

  8. 从“思考”的角度来看如何成为一名优质的Java架构师

    导读: 架构师应不应该写代码 为什么别人的系统总是那么烂 成为架构师最困难的门槛是什么? 如何更高效的学习? 1.架构师应不应该写代码 合格的程序员对于明确分配的任务会完成的很好,但是大部分情况下&q ...

  9. (一)从设计的角度来看ADT(Java)

    <数据结构与抽象——Java语言描述>第一章学习笔记 感想:以前学数据结构关注于方法及实现,为了完成作业和手写代码,没有从设计层面考虑过,第一章设计一个bag ADT,借助于Java in ...

随机推荐

  1. selenium中WebElement.getText()为空解决方法

    当使用getText()获取一个普通的链接文本时: <a href="http://www.baidu.com">baidu</a> 如果得到的文本只为空, ...

  2. 树链剖分 + 后缀数组 - E. Misha and LCP on Tree

    E. Misha and LCP on Tree Problem's Link Mean: 给出一棵树,每个结点上有一个字母.每个询问给出两个路径,问这两个路径的串的最长公共前缀. analyse: ...

  3. 常用cmd

    net use 查询相应的共享文件 control userpasswords2--修改计算机的网络凭证 删除计算机记录的网络共享凭证 重启网络

  4. 关系运算符:instanceof

    关系运算符:instanceof a instanceof Animal;(这个式子的结果是一个布尔表达式) a为对象变量,Animal是类名. 上面语句是判定a是否可以贴Animal标签.如果可以贴 ...

  5. Loadrunner_http长连接设置

    最近协助同事解决了几个问题,也对loadrunner的一些设置加深了理解,关键是更加知其所以然. ljonathan http://www.51testing.com/html/48/202848-2 ...

  6. 用css制作星级评分

    Step 1: XHTML <ul class="star-rating">       <li><a href="#" titl ...

  7. 织梦dedecms整合discuz论坛的操作方法

    织梦dedecms和discuz论坛整合主要用途,是让两个系统共享用户数据,同一个用户可以在两个网站都可以登录.在我们制作织梦cms模板的时候,有时需要整合discuz里的东细.本文主要讲解一下ded ...

  8. jedispool 连 redis

    java端在使用jedispool 连接redis的时候,在高并发的时候经常卡死,或报连接异常,JedisConnectionException,或者getResource 异常等各种问题 在使用je ...

  9. Spring中bean的作用范围

    singleton作用域: Spring的scope的默认值是singleton Spring 只会为每一个bean创建一个实例,并保持bean的引用. <bean id="bean的 ...

  10. Android自定义控件之圆形进度条ImageView

    From:http://blog.csdn.net/xiadik/article/details/41648181package com.wangran.beautiful_girl_show.vie ...