前面提到激活函数,在实现手写体 mnist 数据集的识别任务中的反向传播过程文件(mnist_backward.py) 用到了softmax函数,又称归一化指数函数。下面就谈谈我对其的理解。
它能将一个含任意实数的K维的向量z的“压缩”到另一个K维实向量σ(z) 中,使得每一个元素的范围都在(0,1)之间,并且所有元素的和为1。
Softmax是一种形如下式的函数:
我们知道max,假如说我有两个数,a和b,并且a>b,如果取max,那么就直接取a,没有第二种可能 但有的时候我不想这样,因为这样会造成分值小的那个取不到。所以我希望分值大的那一项经常取到,分值小的那一项也偶尔可以取到,那么我用softmax就可以了 现在还是a和b,a>b,如果我们取按照softmax来计算取a和b的概率,那a的softmax值大于b的,所以a会经常取到,而b也会偶尔取到,概率跟它们本来的大小有关。所以说不是max,而是 Soft max 那各自的概率究竟是多少呢,我们下面就来具体看一下
假设上面这个图中的Z1,Z2,Z3为一个三分类模型的output vector,为[3,1,-3],3代表类别1所对应的分量,1为类别2对应的分量,-3为类别3对应的分量。经过Softmax函数作用后,将其转化为了[0.88,0.12,0],这就代表了输入的这个样本被分到类别1的概率为0.88,分到类别2的概率为0.12,分到类别3的概率几乎为0。这就是Softmax函数的作用
因此Softmax函数得到的是一个[0,1]之间的值,现在讨论其求导过程
下面我们举出一个简单例子,原理一样,目的是为了帮助大家容易理解!
我们能得到下面公式:
z4 = w41*o1+w42*o2+w43*o3
z5 = w51*o1+w52*o2+w53*o3
z6 = w61*o1+w62*o2+w63*o3
z4,z5,z6分别代表结点4,5,6的输出,01,02,03代表是结点1,2,3往后传的输入.
那么我们可以经过softmax函数得到
为了形式化说明,我这里认为训练数据的真实输出为第j个为1,其它均为0
j=i对应例子里就是如下图所示:
比如我选定了j为4,那么就是说我现在求导传到4结点这!
这里对应我的例子图如下,我这时对的是j不等于i,往前传:
本文参考:
知乎专题:https://www.zhihu.com/question/23765351