softmax与sigmoid函数的理解
1 sigmoid
1.1 sigmoid的简单推理
在使用逻辑回归做二分类问题时,sigmoid函数常用作逻辑回顾的假设函数,从直觉上理解很好理解,就是在线性回归的基础上套一个sigmoid函数,将线性回归的结果,映射到
范围内,使他变为一个二分类问题。但是在sigmoid背后有一套严谨的数学推导,包括sigmoid函数时怎么推导出来的,为什么使用丝sigmoid函数。
逻辑回归和线性回归同属一个广义线性模型,顾名思义,这些模型有相似之处,实在同一套约束下设计出来的。例如解决一个二分类问题,首先假设这个问题可以使用广义线性模型来解决,其次假设数据的概率分布情况,发现是二分类问题,假设数据服从伯努利分布,然后使用MLE计算最优化的概率,从而学习参数的值。具体解释可以参考之前写的这篇:广义线性模型总结(GLM)。
广义线性模型有一些性质,这些模型的数据分布同属指数分布族,概率密度函数的通式如下:
其中:
-
:分布的自然参数(natural parameter)或标准参数(canonical parameter)
-
:充分统计量(sufficient statistic),一般等于y
-
:对数分配函数(log partition function),这部分确保Y的分布p(y:η) 计算的结果加起来(连续函数是积分)等于1。
-
:基础度量值(base measure)
将伯努利分布的概率密度函数套入这个指数分布族的概率密度函数中,可以一一对应的找到、
、
、
四个值。伯努利分布是特殊的二项分布,概率密度函数可以写为:
其中标出的分别是:
,反解出:
把带入
可以求解出:
=1
逻辑回归其实就是使用伯努利分布对目标数据进行无偏估计,无偏估计的定义是这样的:估计量的数学期望等于被估计参数的真实值,则称此估计量为被估计参数的无偏估计,即具有无偏性,是一种用于评价估计量优良性的准则。即要使用估计量的数学期望去估计真实值。
而对于指数分布族其中一个重要的性质就是:概率分布的数学期望是对数分配函数(log partition function)的一阶偏导:
,这样可以很轻易求出来我们的估计量,把
带入
并对
求偏导:
可以发现,这就是sigmoid函数,利用广义线性模型的另一条假设:自然参数和
满足线性关系:
,也就可以推导出逻辑回归的假设函数:
1.2 sigmoid函数作用以及优缺点
作用:从图片上可以看到,sigmoid是非线性的,所可以用在神经网络中间层中作为**函数,也可以用在最后一层将结果映射到(0, 1)之间。
优点:
- 可以看到sigmoid函数处处连续,便于求导;
- 可以将函数值的范围压缩到[0,1],可以压缩数据,且幅度不变。
- 可以做二分类问题;
缺点:
- 在输入很大的情况下,函数进入饱和区,函数值变化很小,使x对y的区分度不高,同时也容易梯度消失,不利于深层神经网络的反馈传输,反向传输时计算量大。
- 函数均值不为0,当输出大于0时,则梯度方向将大于0,也就是说接下来的反向运算中将会持续正向更新;同理,当输出小于0时,接下来的方向运算将持续负向更新。
2 softmax
2.1 softmax的简单推理
softmax的推导过程与sigmoid很像,sigmoid对应伯努利分布,softmax对应类别分布(categorical distribution),同样可以用上面指数族分布的那种方法推导。
上面是softmax的表达式,softmax用于多分类问题,在多分类神经网络种,常常作为最后一层的**函数,前一层的数值映射为(0,1)的概率分布,且各个类别的概率归一,从表达式中很容易看出来。与sigmoid不同的是,softmax没有函数图像,它不是通过固定的的映射将固定的值映射为固定的值,softmax是计算各个类别占全部的比例,可以理解为输入一个向量,然后出一个向量,输出的向量的个位置的元素表示原向量对应位置的元素所占整个向量全部元素的比例。
很容易想到,原始向量经过softmax之后,原始向量中较大的元素,在输出的向量中,对应位置上还是较大,反之,原始向量中较小的元素还是会很小,保留了原始向量元素之间的大小关系。在做多分类问题时,输出向量的第几维最大,就表示属于第几个class的概率最大,由此分类。
公式中可以看到没有直接将元素求和然后计算比值,而是对每个元素都套了一个exp函数在求和,exp函数是为了将所有值映射为正实数,避免出现概率为负的情况。而使用exp却不适用绝对值的原因,个人认为是为了将较大的元素映射为更大的值,较小的元素映射为更小的值,这样可以更明显的突出较大元素。
2.2 对计算word2vec时使用softmax的理解
在使用word2vec等模型之前提出了使用one-hot向量来描述单词,即设定一个大小为的词库,然后使用一个维数大小为
的one-hot向量来描述词库中的所有词,在词库中出现某个词的对应位置,在one-hot向量中那个位置就为1,其余位置为0。
这样在空间中可以表示出了词的位置,便可利用数学手段来计算两个向量之间的关系了,例如计算距离夹角相似度等等,但是这种表示方法却无法表示出词与词,因为每个词独占一维,任意两个不相同的向量点积永远为0。之后便提出了word2vec的一些模型。
这里先忽略模型细节的推导过程,主要说一下对于在模型中使用softmax计算每个词的概率我得理解。首先要解决的问题时onehot向量正交的问题,丢失了词与词之间的关系信息。首先softmax的好处就是经过softmax的向量一定是每一维都不为0的稠密向量,这样向量做点积不会为0,保留了词与词之间的关系。
其次要保留词本身的意思,第二个原因就是原始向量经过softmax之后,原始向量中较大的元素,在输出的向量中,对应位置上还是较大,反之,原始向量中较小的元素还是会很小,保留了原始向量元素之间的大小关系。也就是说,如果将最大的一维表示为1,其余均抹除掉变为0,这样就还原成了onehot向量表示,所以可以直觉的理解,softmax的做法确实保留了onehot表示的信息,但是会有一定信息损失,毕竟onehot的向量维数远大于softmax计算出来的向量,这其实也是另外一个优点,解决了onehot向量维数过大的问题。
在词向量计算中softmax和one-hot应该是相对应的,soft对应的是向量更加稠密,如果说极端情况每一维代表一个词的话,在除了词本身的维度以外的元素值,都表示这个词在其他“词义上的分量”,也就是词与词之间的关系;相比onehot要更加稀疏,更“hard”一些,直接将除了所表示词本身的元素以外的都压成了0,所以丢失了关系信息,而max对应的表示原来最大的元素,现在仍然保留,抽象理解保留了最基本的词义。
在这里想到了sigmoid函数,softmax是用来做多分类的,sigmoid是用来做二分类的,可以理解为sigmoid是softmax当类别数为2的特殊情况,可以看到sigmoid函数的曲线是不断趋近于0或者1,而最终结果是要得到一个0或1的离散值,那为什么不用sign函数代替,除了sign的梯度为0不能反向传播以外,我认为是sigmoid函数比sign更“soft”一点,在不影响结果的情况下,还保留了一些其他的信息,上面sigmoid函数的优点中也提到,可以压缩数据且幅度不变,y保留了x之间的大小关系,不光可以区分属于不同类的元素,还可以区分属于同一类的元素谁更属于这一类。