神经网络学习笔记4——softmax层+对数代价函数

4,890 阅读2分钟

这是我参与11月更文挑战的第8天

除了交叉熵方法外,还有一种改进神经网络的方法——添加柔性最大值(softmax)神经元层

softmax神经元层

softmax神经元层为神经网络定义一种新的输出层,其在神经网络中的位置如下图所示:

image.png

对于输入 zjL=kwjkLakL1+bjLz^L_j=\sum_kw^L_{jk}a^{L-1}_k+b^L_j,softmaxt方法应用softmax函数在zjLz^L_j 上,即对于第jj个神经元其激活值为:

ajL=ezjLkezkLa^L_j=\frac{e^{z^L_j}}{\sum_ke^{z^L_k}}

k\sum_k表示在所有神经元上求和,通过公式可知softmax函数会对神经元输入值做两个操作:

  • 将输入中间值zjLz^L_j通过指数函数exe^x映射到一个[0,+][0,+\infty]的空间中
  • 出非负区间上,求出每个神经元映射值占在所有值之和的比例

根据上面公式推断,所有神经元输出激活值的和应该为1,即:

jajL=jezjLkezkL=1\sum_j a^L_j=\frac{\sum_j e^{z^L_j}}{\sum_ke^{z^L_k}} = 1

也就是说,softmax层的输出可以被看做是⼀个概率分布,在很多问题中可以直接将输出激活值ajLa^L_j解释为输入样本属于某分类的概率,这对于解决问题是一种很方便的做法。

softmaxt函数

Si=eijejS_i=\frac{e^i}{\sum_je^j}

softmax提升学习速率的原理

为解释这一点,首先定义一个对数似然(log-likelidood)代价函数(它是softmax层很好的搭档),xx表示神经网络的训练输入,yy表示期望目标输出,则关于xx的对数似然代价函数为:

C=lnayLC=-\ln a^L_y

计算代价函数关于参数wwbb的偏导(计算过程):

CbjL=ajLyj\frac{\partial C}{\partial b^L_j}={a^L_j-y_j}
CwjkL=ajL1(ajLyj)\frac{\partial C}{\partial w^L_{jk}}=a^{L-1}_j(a^L_j-y_j)

这种方法同样排除了σ(z)\sigma'(z)的影响,避免了学习速率下降问题。因此“softmax+对数似然代价函数”的小效果可以等同于:“二次代价函数+交叉熵损失”

为什么要叫softmax

给softmax函数增加一个正常数量cc,公式变为:

ajL=eczjLkeczkLa^L_j=\frac{e^{cz^L_j}}{\sum_ke^{cz^L_k}}

从之前解释过公式的含义中可知,增加cc之后所有输出激活值的和依旧是1。当c=1c=1时得到softmax函数,当c+c\rightarrow +\infty时,ajL1a^L_j\rightarrow 1,这就导致无法区分每个类别概率区别,softsoft的含义即将概率分布曲线变得平滑,让小的数字也有一定的值。

maxmax的含义更容易理解,从exe^x函数图像中可以看出它增长极快,可以将大的数映射到很大的空间,小的数映射为比较小的空间,有效实现筛选最大概率的目的。

softmax和对数似然的反向传播

在反向传播算法中要计算误差δ\delta,在softmax+对数似然的反向传播算法中其计算公式如下:

δjL=ajLyj\delta^L_j=a^L_j-y_j

CbjL\frac{\partial C}{\partial b^L_j}的值为δjL\delta^L_j,证明过程在之前的笔记中已经写过了。