从数学分析的角度来看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 ...
随机推荐
- RabbitMQ之路由(Routing)【译】
在上一节中,我们创建了一个简单的日志系统,可以广播消息到很多接收者. 这一节,我们将在上一节的基础上加一个功能--订阅部分消息.例如,我们只将严重错误信息写入到日志文件保存在磁盘上,同时我们能将所有的 ...
- gitolite
gitolite: https://github.com/sitaramc/gitolite https://github.com/sitaramc/gitolite/tags
- php -- PDO异常处理
异常处理: PHP:默认为直接报错 MYSQL:默认为静默模式,错就错,不报错 PDO:默认为静默模式,错就错,不报错 以前,当PHP碰到错误的时候,会直接报错,错误处理会变得相当麻烦.后来,当错误发 ...
- POJ 3181 Dollar Dayz 01全然背包问题
01全然背包问题. 主要是求有多少种组合.二维dp做的人多了,这里使用一维dp就能够了. 一维的转换方程:dp[j] = dp[j-i] + dp[j];当中i代表重量,j代表当前背包容量. 意思就是 ...
- php7垃圾回收分析
- [深入理解Android卷一全文-第八章]深入理解Surface系统
由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版.而知识的传播不应该由于纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容. ...
- 系统管理模块_用户管理1_实现用户有关的功能_测试功能、解决事务的问题、对密码进行MD5摘要
系统管理模块__用户管理1__实现用户有关的功能 了解用户管理要做什么(增删改查初始化密码) 设计实体 分析功能有几个对应几个请求 增删改查有6个请求,初始化密码一个 实现增删改查一组功能的步骤流程 ...
- 部署全局ajax处理
$.ajaxSetup({ beforeSend:function(){ $('.loading').show(); }, complete:function(){ $('.loading').fad ...
- 【BZOJ5072】[Lydsy十月月赛]小A的树 树形DP
[BZOJ5072][Lydsy十月月赛]小A的树 题解:考虑我们从一个联通块中替换掉一个点,导致黑点数量的变化最多为1.所以我们考虑维护对于所有的x,y的最大值和最小值是多少.如果询问的y在最大值和 ...
- 170407、java基于nio工作方式的socket通信
客户端代码: /** * */ package com.bobohe.nio; import java.io.BufferedReader; import java.io.IOException; i ...