在前面几节【精读】中,终极君向大家介绍了自然语言处理中的几个重要的基础内容。
这些内容里面都有一个同样的部分--softmax函数。
也就是各种类型的神经网络和语言模型最后输出的一个激活函数
先举个例子
![4f0ce0ff8243b8102439aca1f2748a98.png](https://i-blog.csdnimg.cn/blog_migrate/2dc6f45cd60b04672acd2559518938ca.jpeg)
在深度学习中,最常见的就是多分类问题。
比如我们要让人工智能判断图片的内容。
判断之前我们已经训练人工智能可以识别小猫,小狗,小兔(3种动物)。
![482affa8a6755e3c983cf8d578e56907.png](https://i-blog.csdnimg.cn/blog_migrate/f84e8a05cd6f828eda4fa6ca513c4fe3.jpeg)
再让它去区分一张从未见过的新图片。
而最后的结果又是互斥的(即这张图片不能既是小猫又是小狗)
那么首先我们要建立数学的映射关系ϕ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值就是:
![8f902969afc97a923146bfba48764ce2.png](https://i-blog.csdnimg.cn/blog_migrate/42150faa6b00011caa9d22ae406d5390.jpeg)
即该元素的对数值与所有的元素对数的和的比值
下图更形象的展示了softmax函数的具体求解过程
![0240ed6d96e65bc83383905124501600.png](https://i-blog.csdnimg.cn/blog_migrate/dc1cd3685b8a0078560c84251c07071c.jpeg)
好了,今天就先讲到这儿