Softmax Regression
使用神经网络进行多分类任务时,通常在最后一层会使用一个softmax
层,个人感觉它与sigmoid函数类似,都是将结果转变成一个类似概率的东西,
这样会更加有利于计算当前损失,提升模型学习的效果。
首先对于一个输入$a^{[L-1]}$,先线性运算,
前面的操作每一层都一样,但是激活函数就不一样了,
首先将输出转成$t$,这样能够保证所有数值不为负,然而以它们在总和中所占的比例,作为它们当前的概率, 也就是$a^{[L]_i}$就是分类为第$i$个分类的概率。
举例,对于一个$z^{[L]}$取值如下,
求$t$为,
那么$a^{[L]}$为,
这里的到的$a^{[L]}$就可以看作一个概率值。
Loss_function:
由于softmax
可以看成是Logistic Regression
的推广,那么这里对损失函数的计算也对照Logistic Regression
来推。
Logistic Regression
的代价函数,这里把上面的$a^{[L]}$写为$\hat y$:
首先,考虑单个样本,那么在Logistic Regression
中单个样本的概率函数就是,
同样的,在softmax
中单个样本的概率函数以同样的形式可以写为,
进行对数似然,
改为最小化似然函数,加上一个负号,
那么现在就可以考虑多样本输入的情况,直接在前面加上一个求和就行,
梯度
代价函数就是上面的负对数似然,同样先考虑单样本,
将$\hat y_j$换一下,忽略上标,
先求一个$z_i$的导数,
所以,对于一个样本的导数就可以写为,
当然,多个样本的形式也和上面一模一样,所以反向传播时,其实计算是十分简单的。
注:
在cs231n课程里面,提到这里还有一个地方需要注意,因为中间会去求e的幂次, 这很容易会造成上溢,所以通常对这个地方要做一个额外的处理,
这里的$C$,一般取值为,
那么为什么要叫做softmax
呢?
它其实对应的是hard max
,hard max
的操作就是直接将$z^{[L]}$按照取值大小,
直接硬转为0、1,所以这里取了一个soft
…