从数学分析的角度来看Softmax
作者:无影随想
时间: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的更多相关文章
- 从jvm的角度来看单例模式
最近在看jvm,发现随着自己对jvm底层的了解,现在对java代码可以说是有了全新的认识.今天就从jvm的角度来看一看以前自以为很了解的单例模式. 了解单例模式的人都知道,单例模式有两种:" ...
- 以代码爱好者角度来看AMD与CMD
随着浏览器功能越来越完善,前端已经不仅仅是切图做网站,前端在某些方面已经媲美桌面应用.越来越庞大的前端项目,越来越复杂的代码,前端开发者们对于模块化的需求空前强烈.后来node出现了,跟随node出现 ...
- 以代码爱好者角度来看AMD与CMD(转)
随着浏览器功能越来越完善,前端已经不仅仅是切图做网站,前端在某些方面已经媲美桌面应用.越来越庞大的前端项目,越来越复杂的代码,前端开发者们对于模块化的需求空前强烈.后来node出现了,跟随node出现 ...
- 从源码角度来看BeanFactory和ApplicationContext的关系
大家好,我是小黑,这是年前的最后一篇推文,提前祝大家新年快乐~~ 这次我们从源码角度来聊聊BeanFactory和ApplicationContext的关系,讲一些网上文章不曾提到的点. 官方描述 先 ...
- 从IDEA角度来看懂UML图
前言 我们目前已经学习了设计模式的7种设计原则.下面本该是直接进入具体的设计模式系列文章. 但是呢在我们学习设计模式之前我们还是有必要了解一下uml图.因为后续的设计模式文章不出意外应该会很多地方使用 ...
- 从CLR角度来看值类型与引用类型
前言 本文中大部分示例代码来自于<CLR via C# Edition3>,并在此之上加以总结和简化,文中只是重点介绍几个比较有共性的问题,对一些细节不会做过深入的讲解. 前几天一直忙着翻 ...
- 从jvm的角度来看java的多线程
最近在学习jvm,发现随着对虚拟机底层的了解,对java的多线程也有了全新的认识,原来一个小小的synchronized关键字里别有洞天.决定把自己关于java多线程的所学整理成一篇文章,从最基础的为 ...
- 从“思考”的角度来看如何成为一名优质的Java架构师
导读: 架构师应不应该写代码 为什么别人的系统总是那么烂 成为架构师最困难的门槛是什么? 如何更高效的学习? 1.架构师应不应该写代码 合格的程序员对于明确分配的任务会完成的很好,但是大部分情况下&q ...
- (一)从设计的角度来看ADT(Java)
<数据结构与抽象——Java语言描述>第一章学习笔记 感想:以前学数据结构关注于方法及实现,为了完成作业和手写代码,没有从设计层面考虑过,第一章设计一个bag ADT,借助于Java in ...
随机推荐
- KMP + 求相等前后缀--- POJ Seek the Name, Seek the Fame
Seek the Name, Seek the Fame Problem's Link: http://poj.org/problem?id=2752 Mean: 给你一个字符串,求这个字符串中有多少 ...
- 关于Aspose强大的应用--EXECL
protected void btnConfirg_Click(object sender, EventArgs e) { genExcel(); } //设置内容文字色 表中有一个蓝色文字列和绿色文 ...
- php 返回上一页并刷新
echo "<script>alert('分组已存在!');location.href='".$_SERVER["HTTP_REFERER"].&q ...
- 关于Cocos2d-x中自定义的调用注意事项
1.在实例类Student.h中定义一个自己的方法 public: int getSno(); 2.在实例类Student.cpp中实现这个方法 int Student::getSno(){ retu ...
- qtcreator 中文乱码
qt输入法不能用,ui中不能显示中文,开发板不能显示中文,这几个一直困扰这我,网上查找资料,在代码中添加各种支持,都没有解决问题.今天刚好解决了,记录于此. 参考链接 http://blog.163. ...
- 原生YII2 增删改查的一些操作(非ActiveRecord)
1.添加数据 如下,使用insert方法:t_admin_user为数据表名..其他的是属性.. $num = Yii::$app->db->createCommand()->ins ...
- [转]Tcpcopy简介与实战
Tcpcopy简介 TCPCopy是一种请求复制(所有基于tcp的packets)工具 ,其功能是复制在线数据包,修改TCP/IP头部信息,发送给测试服务器,达到欺骗测试服务器的TCP 程序的目的,从 ...
- C++之强制类型转换
C++ Code 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 ...
- UESTC 1511(差分约束)
题目链接:http://acm.uestc.edu.cn/problem.php?pid=1511 思路:我们可以等到这样的5个关系式: k=1:dsit[a]-dist[b]>=0&& ...
- WinError 5
IDE工具:pychrm 语言:python 在使用os模块修改路径名称时,总是会报 WinError 5 这个错误,就是拒绝访问,之前也遇见过,就是要操作的当前路径里有文件已经打开,代码不能再次访问 ...