您的位置:首页 > 理论基础 > 计算机网络

六、改进神经网络的学习方法(2):Softmax输出层

2017-08-14 21:08 316 查看
本博客主要内容为图书《神经网络与深度学习》和National Taiwan University (NTU)林轩田老师的《Machine Learning》的学习笔记,因此在全文中对它们多次引用。初出茅庐,学艺不精,有不足之处还望大家不吝赐教。

1. Softmax输出层

  定义一种新的输出层,对于输出层某一个神经元的权值输入为 zLj,激活值输出为 aLj,则Softmax输出层的定义如下

a_j^L=\frac{e^{z_j^L}}{\sum_k{e^{z_k^L}}}\tag{1}\label{1}

为了更好地理解⽅程, 假设我们有⼀个包含四个输出神经元的神经⽹络,对应四个带权输⼊为zL1,zL2,zL3,zL4。这里的条块显⽰带权输⼊的可取值和对应输出激活值的图形。当增大 zL4 的值的时候,aL4 的值也会对应增大,而其他三个神经元的输出值会对应减小; 当减小 zL4 的值的时候,aL4 的值也会对应减小,而其他三个神经元的输出值会对应增大。所以Softmax输出层对应着两种显著的特性,即单调性和非局部性。

1.1 Softmax的单调性证明

  这里应该首先对Softmax定义式进行理解,在这个定义中,aLj 代表着函数的因变量,值得注意是如何理解分子与分母,分子的含义是输出层中若干个神经元中某一个神经元的激活值,分母的含义是输出层中所有神经元激活值的总和。因此当sofmax函数对输出层某一个神经元的权值输入进行求偏导数的时候,如果恰好是对分子所对应的那个神经元的权值输入,则分子分母都需要求导;如果不是则只有分母需要偏导数,分子为常数。

  所以当 j=k 时,分子分母中均含有需要求导数的部分,所以将softmax的表达形式变成如下的表达式

a_j^L=1-\frac{\sum_{k\neq j}e^{z_j^L}}{\sum_k{e^{z_k^L}}}\tag{2}\label{2}

则\frac{\partial a_j^L}{\partial z_k^L}=\frac{e^{z_k^L}\sum_{k\neq j}e^{z_k^L}}{\left(\sum_k{e^{z_k^L}}\right)^2}\tag{3}\label{3}

因此∂aLj∂zLk 是恒为正的。当 j≠k 时,

\frac{\partial a_j^L}{\partial z_k^L}=-\frac{e^{z_j^L}e^{z_k^L}}{\left(\sum_k{e^{z_k^L}}\right)^2}\tag{4}\label{4}

因此∂aLj∂zLk 是恒为负的。

  所以当自己的权值输入增加时,函数值会对应增加;但是只有当别的神经元的权值输入都下降的时候,函数值才会增加,因此Softmax是具有单调增加性的。

1.2 Softmax的非局部性证明

  通过定义式可以知道任何一个输出激活值依赖于所有的输入。

  这样便引出了Softmax输出层的第一个优点:softmax层得到的输出是一系列相加和为1的正数,即从softmax层得到的输出可以看做是一个概率分布

1.3 Softmax的数值稳定

  编程实现softmax函数计算的时候,中间项efyi和∑jefj因为存在指数函数,所以数值可能非常大。除以大数值可能导致数值计算的不稳定,所以学会使用归一化技巧非常重要。如果在分式的分子和分母都乘以一个常数C,并把它变换到求和之中,就能得到一个从数学上等价的公式:

efyi∑jefj=CefyiC∑jefj=efyi+logC∑jefj+logC

C 的值可自由选择,不会影响计算结果,通过使用这个技巧可以提高计算中的数值稳定性。通常将 C 设为 logC=−maxjfj。该技巧简单地说,就是应该将向量f中的数值进行平移,使得最大值为 0。

2. log-likelihood代价函数

  用 x 表示输入网络的训练数据,用 y 表示相应的期待输出。然后对应这个输入的log-likelihood 代价是

C=\ln a_y^L\tag{5}\label{5}

需要注意的是这里我对 y 的使用和之前不太一样。之前的 y 用来表示网络期望的输出,例如输入的图片是7则期望的输出是7。但在下面的式子中,y 代表一个与7相关的向量,意思是这个向量的第7位是1,其余位都是0。

  当网络的输出层为Softmax输出层且代价函数是log-likelihood函数,对输出层的权重及偏置求梯度可得(具体过程省略,实际与之前的求法均相似,即先对 a 求偏导数,在对 z 求偏导数,最后对 w 或者 b 求偏导数)

\frac{\partial C}{\partial b_j^L}=a_j^L-y_j\tag{6}\label{6}

\frac{\partial C}{\partial w_{jk}^L}=a_k^{L-1}(a_j^L-y_j)\tag{7}\label{7}

  这些表达式确保了Softmax输出层的第二个优点不会遇到学习速度衰退的问题。事实上可以将softmax输出层与log-likelihood代价函数的搭配,类比成sigmoid输出层与交叉熵代价函数的搭配。在许多情景下,两种方法的效果都不错。我们有时会使用softmax输出层搭配log-likelihood代价函数来让我们的网络和一些有影响力的学术论文中的网络更加接近。通常来说,在任何你想要把输出激活值解读成概率的时候,softmax加上log-likelihood总是不错的选择,至少对于没有交集的分类问题(例如MNIST)来说是这样的。

3. Softmax & log-likelihodd 的反向传播

  因为 ∂C∂bLj=∂C∂zLj,所以

δLj=aLj−yj(8)

使用这个表达式以后,我们就可以在包含softmax输出层和 log-likelihood 代价函数的网络中应用反向传播算法了。

4. Softmax与逻辑回归

留个坑有空填……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐