「精读」自然语言处理基础之softmax函数

在前面几节【精读】中,终极君向大家介绍了自然语言处理中的几个重要的基础内容。

这些内容里面都有一个同样的部分--softmax函数。

也就是各种类型的神经网络和语言模型最后输出的一个激活函数

先举个例子

在深度学习中,最常见的就是多分类问题。

比如我们要让人工智能判断图片的内容。

判断之前我们已经训练人工智能可以识别小猫,小狗,小兔(3种动物)。

再让它去区分一张从未见过的新图片。

而最后的结果又是互斥的(即这张图片不能既是小猫又是小狗)

那么首先我们要建立数学的映射关系ϕ1(x)。

将我们的图片和结果(上述的3种动物)分别对应起来,那么ϕ1(x)会映射到一个3维向量(y={c1,c2,c3})当中。

向量中的每一维,都对应着一个可能的分类结果(如c1=1或0,是小猫或不是小猫)。

由于结果是互斥的,所以y存在以下n种形式:小猫=[1,0,0],小狗=[0,1,0],小兔=[0,0,1]

电脑看了这张新图片后,假设最后输出的结果为:新图片= [3,1,-3]

那么我们通过softmax的函数公式,计算得到不同类别之间的相对概率,新图片=[0.88,0.12,0]。不难发现0.88最大,也就是说这张图片是小猫的可能性最大。

概念组成

我们首先来看softmax这个词的组成:

max:从数学上来讲,有两个数a和b, 如果a>b,当取max的时候,就直接取a,没有第二种可能。

用代码表示 if a > b return a; else b

在分类问题中(尤其是多分类问题),这样做太绝对了些。

所以我们更想用一个概率去表示分类结果,也就是说大的那个我们经常可以取得到,但是小的那个偶尔也可以取得到。

这个时候softmax就派上用场了,它把分类结果映射为0-1之间的实数,并且归一化保证和为1,因此分类的概率之和也刚好为1。

那我们来看看他的定义,假设我们有一个数组V,Vi表示V中的第i个元素,那么这个元素的softmax值就是:

即该元素的对数值与所有的元素对数的和的比值

下图更形象的展示了softmax函数的具体求解过程

好了,今天就先讲到这儿