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

来源:互联网 发布:oracle数据库建库 编辑:程序博客网 时间:2024/05/21 05:21

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

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

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

E(i)=12y(i)a(i)

模型最终的目标就是要让所有训练样本的这个误差之和最小。
Loss=i=0nE(i)

而这个代价函数中,a(i) 是sigmoid函数的结果,而sigmoid函数的输入是某个神经元的权值向量w 的函数,所以整个代价函数Loss其实是整个网络中每个功能单元拥有的权值向量w 的函数。
BP网络

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

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

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

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

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

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

soft Max网络

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,要么不变,就不用受激活函数的制约了。

原创粉丝点击