六、改进神经网络的学习方法(2):Softmax输出层
2017-08-14 21:08
316 查看
本博客主要内容为图书《神经网络与深度学习》和National Taiwan University (NTU)林轩田老师的《Machine Learning》的学习笔记,因此在全文中对它们多次引用。初出茅庐,学艺不精,有不足之处还望大家不吝赐教。
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输出层对应着两种显著的特性,即单调性和非局部性。
所以当 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是具有单调增加性的。
这样便引出了Softmax输出层的第一个优点:softmax层得到的输出是一系列相加和为1的正数,即从softmax层得到的输出可以看做是一个概率分布。
efyi∑jefj=CefyiC∑jefj=efyi+logC∑jefj+logC
C 的值可自由选择,不会影响计算结果,通过使用这个技巧可以提高计算中的数值稳定性。通常将 C 设为 logC=−maxjfj。该技巧简单地说,就是应该将向量f中的数值进行平移,使得最大值为 0。
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)来说是这样的。
δLj=aLj−yj(8)
使用这个表达式以后,我们就可以在包含softmax输出层和 log-likelihood 代价函数的网络中应用反向传播算法了。
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与逻辑回归
留个坑有空填……相关文章推荐
- 神经网络测试之softmax输出
- 神经网络与深度学习(4):改进神经网络的学习方法
- 斯坦福大学深度学习公开课cs231n学习笔记(9)softmax分类和神经网络分类代码实现
- tensorflow学习笔记(4)softmax分类和简单神经网络比较
- 神经网络 part2 :Softmax classifier
- 神经网络四:Softmax以及与Sigmoid的关系
- 八、改进神经网络的学习方法(4):权重初始化
- CS231n 学习笔记(2)——神经网络 part2 :Softmax classifier
- 神经网络与深度学习(4):改进神经网络的学习方法
- 改进神经网络及深度学习的学习方法
- 五、改进神经网络的学习方法(1):交叉熵代价函数
- 神经网络与深度学习笔记——第3章 改进神经网络的学习方法
- Neural Networks and Deep Learning学习笔记ch3 - 改进神经网络的学习方法
- 深度学习方法(十):卷积神经网络结构变化——Maxout Networks,Network In Network,Global Average Pooling
- 七、改进神经网络的学习方法(3):过拟合及改进方法(正则化、Dropout)
- 深度学习方法(十):卷积神经网络结构变化——Maxout Networks,Network In Network,Global Average Pooling
- 统计学习方法---感知机算法拓展(神经网络)
- 深度学习基础模型算法原理及编程实现--04.改进神经网络的方法
- 神经网络之自适应谐振网络ART及matlab实现——改进版
- 神经网络与深度学习笔记——3.3计算神经网络输出