专栏名称: 机器学习研究会
机器学习研究会是北京大学大数据与机器学习创新中心旗下的学生组织,旨在构建一个机器学习从事者交流的平台。除了及时分享领域资讯外,协会还会举办各种业界巨头/学术神牛讲座、学术大牛沙龙分享会、real data 创新竞赛等活动。
目录
相关文章推荐
爱可可-爱生活  ·  【Mistral AI ... ·  3 天前  
爱可可-爱生活  ·  [CL]《Counterfactual ... ·  5 天前  
爱可可-爱生活  ·  [LG]《Hardware and ... ·  6 天前  
黄建同学  ·  【小雪,梅花初绽】#AI创造营##ai暖冬派 ... ·  1 周前  
51好读  ›  专栏  ›  机器学习研究会

【学习】通俗详解softmax函数及其求导

机器学习研究会  · 公众号  · AI  · 2017-03-17 19:21

正文



点击上方“机器学习研究会”可以订阅哦


摘要
 

转自:自然语言处理与机器学习

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


softmax函数

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

假设我们有一个数组,V,Vi表示V中的第i个元素,那么这个元素的softmax值就是 si = si/(si+sj+...sk)更形象的如下图表示:



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


举一个我最近碰到利用softmax的例子:我现在要实现基于神经网络的句法分析器。用到是基于转移系统来做,那么神经网络的用途就是帮我预测我这一个状态将要进行的动作是什么?比如有10个输出神经元,那么就有10个动作,1动作,2动作,3动作...一直到10动作。(这里涉及到nlp的知识,大家不用管,只要知道我现在根据每个状态(输入),来预测动作(得到概率最大的输出),最终得到的一系列动作序列就可以完成我的任务即可)


原理图如下图所示:



那么比如在一次的输出过程中输出结点的值是如下:

[0.2,0.1,0.05,0.1,0.2,0.02,0.08,0.01,0.01,0.23]

那么我们就知道这次我选取的动作是动作10,因为0.23是这次概率最大的,那么怎么理解多分类呢?很容易,如果你想选取俩个动作,那么就找概率最大的俩个值即可~(这里只是简单的告诉大家softmax在实际问题中一般怎么应用)


softmax相关求导


当我们对分类的Loss进行改进的时候,我们要通过梯度下降,每次优化一个step大小的梯度,这个时候我们就要求Loss对每个权重矩阵的偏导,然后应用链式法则。那么这个过程的第一步,就是对softmax求导传回去.


不用着急,我后面会举例子非常详细的说明。在这个过程中,你会发现用了softmax函数之后,梯度求导计算过程非常非常方便!


下面我们举出一个简单例子,原理一样,目的是为了帮助大家容易理解!




我们能得到下面公式:

z4 = w41*o1+w42*o2+w43*o3

z5 = w51*o1+w52*o2+w53*o3

z6 = w61*o1+w62*o2+w63*o3

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

那么我们可以经过softmax函数得到


a4 = e^z4/(e^z4+e^z5+e^z6)

a5 = e^z5/(e^z4+e^z5+e^z6)

a6 = e^z6/(e^z4+e^z5+e^z6)


好了,我们的重头戏来了,怎么根据求梯度,然后利用梯度下降方法更新梯度!


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

交叉熵函数形式如下:



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


原文链接:

http://mp.weixin.qq.com/s/UgLInVcktlKlj3x8pkAwqw

“完整内容”请点击【阅读原文】
↓↓↓