softmax 输出层数学原理推导

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

这篇文章我觉得不错

这篇非常专业

softmax 输出层数学原理推导_第1张图片

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

softmax 输出层如下所示:
softmax 输出层数学原理推导_第2张图片
下方的[1,2,3,4],代表softmax层的四个输入
上方的[0.03,0.09,0.24,0.64]代表softmax层的四个输出。

非常好理解,输入和输出的关系是怎么样的呢?又有什么样的性质呢?
我们用数学公式就一目了然:
图片.png

这就是softmax函数表达式

我自己手写也许更清楚:
softmax 输出层数学原理推导_第3张图片
是吧一目了然,更为关键的是性质非常像全概率公式性质。

的确softmax最主要的作用,就是将神经网络的输出转化为概率形式。自然我们想到,神经元的输出值越大,经过输出层转换的概率就越大。那么目的是什么呢??首先我们需要知道softmax层设计成概率样子,大概率就是为分类服务的。一般label有几类,最后的神经元就有几个。通过one-hot编码,将label变成一个个向量。如果一个神经元通过输出层概率最大,那么改神经元所在的分类就是预测的结果,然后和lable值进行比对。一致则分类正确,不一致则分类错误。
脑筋直的的我层一开始就想,神经元输出最高通过softmax层的输出概率就越高,还要softmax层干嘛,多此一举。
其实softmax层大有玄机,如果没有概率化,模型就是去了纠正错误的科学方向,没有办法构造损失函数,更不要提优化了。
提到损失函数,那么我们预测错误‘损失’的是什么呢?

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

softmax 输出层数学原理推导_第4张图片

此时的N为样本数量,y代表经过one-hot编码后的向量如[0,1,0,0]
字母O为经过softmax输出的概率向量如[0.03,0.09,0.24,0.64]
点积意思是向量对应相乘的和,并未向量相乘。如(y,O)=00.3+10.09+00.24+00.64=0.09

那损失函数到底损失的是什么呢?我们可以轻松发现,对于一个样本来说如果分类正确且输出概率值越高则向量点积越高,整个损失函数越小。所以,所有样本和最小则整个模型越精确。我们需要找到合适的神经元参数,使损失函数最小,这个过程我们叫 优化!
还有一种解释,是根据名称而来,为什么叫交叉熵损失?交叉好理解,点积嘛。这里熵指的是信息熵,这里表达式也是根据信息熵表达式而来,信息熵越小,则获得信息越简单,分类越正确。

开始优化:

首先我们举个模型来计算优化过程:
softmax 输出层数学原理推导_第5张图片
如图是一个全连接神经网络的最后几层模型。
这里要有个习惯就是看到模型向前计算:
z4 = w41o1+w42o2+w43*o3
z5 = w51o1+w52o2+w53*o3
z6 = w61o1+w62o2+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为例看看误差项(梯度)的传递:
softmax 输出层数学原理推导_第6张图片
这里的loss函数是狭义的损失函数,是单个样本的损失函数。第一项和第三项都非常好求解,注意第一项里面的i,代表的是ylabel向量得第i个元素为1。
重点就只声求解第二项了,根据式子可以凭数学敏感的知道要分类求解:

第一类:i = 4如图

softmax 输出层数学原理推导_第7张图片

第二类:i!=4 如图

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

注意事项:

1、单个样本问题:有很多教程都不会提到单个样本,上述本人多此提到单个样本条件下计算的结果。前面说过单个样本的损失函数是狭义的损失函数,这里更是穿插了一个重要数学依据---随机梯度算法。单个样本好计算好分析,但不要忘了他能够计算的数学依据就是随机梯度算法。单个样本的更新权重,比批度样本效率更高。
2、softmax输出层的理解:前面也有浅显的提到过他的概率化作用,而我认为更重要的是为损失函数的建立提供了数学依据。另外一个作用就是输出层误差项的正则,只保留分类正确的概率的误差项传递,大大简化误差项的传递。
3、softmax层和交叉熵损失函数不为一:并不是所有softmax层和交叉熵函数都长得一样,学生在查看不同教材就发现了多种不同的写法,但核心步骤保持一致。如图:
softmax 输出层数学原理推导_第9张图片

所以告诉我们最重要的不是表现形式,而是思想方法!
后面会更新关于softmax层处理的代码

你可能感兴趣的:(神经网络)