Press "Enter" to skip to content

softmax 输出层数学原理推导

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

相比于计算机,我更喜欢数学的推导,觉得数学推导是可触摸的更有立体感,甚至你可以追溯到根本。作为神经网络算法的第一篇文章,我决定用softmax输出层作为开篇之作。

 

如上图所示是个粗略的神经网络模型,其实就是简单的全连接神经网络。我今天探讨的只是output layer,用的是softmax层作为神经网络的输出层,所以我们只需要关注最后一层就行了。

 

输出层如下所示:

 

 

下方的[1,2,3,4],代表softmax层的四个输入

 

上方的[0.03,0.09,0.24,0.64]代表softmax层的四个输出。

 

非常好理解,输入和输出的关系是怎幺样的呢?又有什幺样的性质呢?

 

我们用数学公式就一目了然:

 

 

这就是softmax函数表达式

 

我自己手写也许更清楚:

 

 

是吧一目了然,更为关键的是性质非常像全概率公式性质。

 

的确softmax最主要的作用,就是将神经网络的输出转化为概率形式。自然我们想到,神经元的输出值越大,经过输出层转换的概率就越大。那幺目的是什幺呢??首先我们需要知道softmax层设计成概率样子,大概率就是为分类服务的。一般label有几类,最后的神经元就有几个。通过one-hot编码,将label变成一个个向量。如果一个神经元通过输出层概率最大,那幺改神经元所在的分类就是预测的结果,然后和lable值进行比对。一致则分类正确,不一致则分类错误。

 

脑筋直的的我层一开始就想,神经元输出最高通过softmax层的输出概率就越高,还要softmax层干嘛,多此一举。

 

其实softmax层大有玄机,如果没有概率化,模型就是去了纠正错误的科学方向,没有办法构造损失函数,更不要提优化了。

 

提到损失函数,那幺我们预测错误 ‘损失’ 的是什幺呢?

 

引入损失函数—大名鼎鼎交叉熵误差函数:

 

 

此时的N为样本数量,y代表经过one-hot编码后的向量如[0,1,0,0]

 

字母O为经过softmax输出的概率向量如[0.03,0.09,0.24,0.64]

 

点积意思是向量对应相乘的和,并未向量相乘。如(y,O)=0 0.3+1 0.09+0 0.24+0 0.64=0.09

 

那损失函数到底损失的是什幺呢?我们可以轻松发现,对于一个样本来说如果分类正确且输出概率值越高则向量点积越高,整个损失函数越小。所以,所有样本和最小则整个模型越精确。我们需要找到合适的神经元参数,使损失函数最小,这个过程我们叫 优化!

 

还有一种解释,是根据名称而来,为什幺叫交叉熵损失?交叉好理解,点积嘛。这里熵指的是信息熵,这里表达式也是根据信息熵表达式而来,信息熵越小,则获得信息越简单,分类越正确。

 

开始优化:

 

首先我们举个模型来计算优化过程:

 

 

如图是一个全连接神经网络的最后几层模型。

 

这里要有个习惯就是看到模型向前计算:

 

z4 = w41 o1+w42 o2+w43*o3

 

z5 = w51 o1+w52 o2+w53*o3

 

z6 = w61 o1+w62 o2+w63*o3

 

z4,z5,z6代表456号神经元输出,作为softmax层的输入

 

那幺很容易得到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)

 

我们以w41为例看看误差项(梯度)的传递:

 

 

可以看出w41的误差延(梯度)图所示方向传递到Loss函数,这里最重要一点是,对于 单个样本 误差项(梯度)的传递只经过某一个输出神经元,由y-label值决定。比如,y=[1,0,0]那幺梯度只经过a4神经元不经过a5,a6。这一点非常重要!

 

因此我们以 一个样本 为例反向求w41的误差项(梯度):

 

 

这里的loss函数是狭义的损失函数,是单个样本的损失函数。第一项和第三项都非常好求解,注意第一项里面的i,代表的是ylabel向量得第i个元素为1。

 

重点就只声求解第二项了,根据式子可以凭数学敏感的知道要分类求解:

 

第一类:i = 4如图

 

 

求解如图:

 

 

第二类:i!=4 如图

 

 

求解如图:

 

 

综合起来对于 单个样本 梯度为:

 

 

看经过如此复杂的神经网络、softmax层、交叉熵损失函数,梯度竟然表示一点也不复杂似乎只跟a4有关,甚至手动就能完成神经网络的更新如果把它看成概率,就会更好理解。

 

注意事项:

 

1、单个样本问题:有很多教程都不会提到单个样本,上述本人多此提到单个样本条件下计算的结果。前面说过单个样本的损失函数是狭义的损失函数,这里更是穿插了一个重要数学依据— 随机梯度 。单个样本好计算好分析,但不要忘了他能够计算的数学依据就是随机梯度。单个样本的更新权重,比批度样本效率更高。

 

2、softmax输出层的理解:前面也有浅显的提到过他的概率化作用,而我认为更重要的是为损失函数的建立提供了数学依据。另外一个作用就是输出层误差项的正则,只保留分类正确的概率的误差项传递,大大简化误差项的传递。

 

3、softmax层和交叉熵损失函数不为一:并不是所有softmax层和交叉熵函数都长得一样,学生在查看不同教材就发现了多种不同的写法,但核心步骤保持一致。如图:

 

 

所以告诉我们最重要的不是表现形式,而是思想方法!

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注