神经网络中的Softmax是如何更新参数的

Posted Maggie张张

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了神经网络中的Softmax是如何更新参数的相关的知识,希望对你有一定的参考价值。

本文将从两个方面阐述神经网络中的softmax是如何更新参数的。
第一部分:BP算法怎么更新参数?缺点是什么?
第二部分:用了softmax怎么更新参数?

一、BP算法用二次经验误差作为代价函数

我们已经知道,BP算法在前向传播中,在每一个功能节点上先是线性组合算得一个状态值,然后用Sigmoid转换成一个激活值,最后一层中把这个激活值o跟真是标签做差求平方,得到某个样本的二次经验误差,作为向前矫正参数的代价函数。

E(i)=12y(i)a(i)
模型最终的目标就是要让所有训练样本的这个误差之和最小。
Loss=i=0nE(i)
而这个代价函数中, a(i) 是sigmoid函数的结果,而sigmoid函数的输入是某个神经元的权值向量 w 的函数,所以整个代价函数Loss其实是整个网络中每个功能单元拥有的权值向量w 的函数。

要想使得Loss最小,对 w 求偏导,就可以得到网络中的每一层每个神经元的参数的更新公式:

可以看到每一层误差后向传播时,跟激活函数的斜率f(z)有关,而sigmoid函数当z值过大或者过小时,斜率趋向于0,所以导致每次参数更新的很慢,所谓梯度消失

那么一个自然的想法就是:替换激活函数,比如ReLU函数,当自变量大于0时,斜率都是一个值,避免梯度消失。

还有一个想法:替换代价函数,改成交叉熵函数,它是Softmax更新参数的代价函数。

二、Softmax用交叉熵做损失函数更新网络参数

首先,Softmax是用于多分类的,常常用于神经网络最后一层作为多分类器,有多少个类别最后一层就有多少个神经元,每个样本的类别标签用one-hot编码,即:一个0/1串,长度是类别数,属于j类,就在第j个位置上标记1。例如,分5类,y是3,它的编码就是00100。

softmax函数:

aj=P(y=j|z)=ezkj=0ezk

假设某个样本在分类层的某个神经元上得到的状态值是z,那么它属于类别j的概率就可以通过Softmax公式得到,分母是本层所有神经元的 ez 之和(因为分类层有k个神经元,对应k个类别)。

定义每个样本的交叉熵是 tlog(a) ,其中 t 是该样本的标签值(one-hot编码的),a 是样本的softmax函数值,它们都是向量,有j个元素。因为t是one-hot编码的,所以只有类别j的位置是1,所以实际上交叉熵是 tjlog(aj) ,而 tj 又是1,所以最后,每个样本的交叉熵是 log(aj) , j是样本类别,而 aj 是最后一层softmax函数值的第j个值。

对于整个训练样本,定义损失函数为:

Loss=1ni=1nlog(a(i)j)


交叉熵是用来衡量我们的预测的低效性。

其中,a是z的函数(softmax), z是w的函数,所以整个代价函数是w的函数,要想求最小就要对w求偏导,利用链式求导法则,具体看这里

结论就是:
当上层节点p=类别节点j时,

w=w1
否则
w=w

这样,每个神经的权值向量的更新要么减1,要么不变,就不用受激活函数的制约了。

以上是关于神经网络中的Softmax是如何更新参数的的主要内容,如果未能解决你的问题,请参考以下文章

神经网络中的 Softmax 函数(Python)

神经网络 softmax函数

神经网络学习中的SoftMax与交叉熵

[人工智能-深度学习-12]:神经网络基础 - 激活函数之SoftMax与多分类神经网络模型

神经网络中的蒸馏技术,从Softmax开始说起

如何从具有 2 个输出神经元的 softmax 二元分类器绘制 ROC 曲线?