0%

Softmax Regression 总结


Softmax Regression

使用神经网络进行多分类任务时,通常在最后一层会使用一个softmax层,个人感觉它与sigmoid函数类似,都是将结果转变成一个类似概率的东西, 这样会更加有利于计算当前损失,提升模型学习的效果。

首先对于一个输入a[L1],先线性运算,

z[L]=w[L]a[L1]+b[L]

前面的操作每一层都一样,但是激活函数就不一样了,

t=e(z[L])a[L]=e(z[L])i=1n[L]ti

首先将输出转成t,这样能够保证所有数值不为负,然而以它们在总和中所占的比例,作为它们当前的概率, 也就是a[L]i就是分类为第i个分类的概率。

举例,对于一个z[L]取值如下,

z[L]=[5213]

t为,

t=[e5e2e1e3]

那么a[L]为,

a[L]=ti=1n[L]ti=[e5/(e5+e2+e1+e3)e2/(e5+e2+e1+e3)e1/(e5+e2+e1+e3)e3/(e5+e2+e1+e3)]=[0.8420.0420.0020.114]

这里的到的a[L]就可以看作一个概率值。


Loss_function:

由于softmax可以看成是Logistic Regression的推广,那么这里对损失函数的计算也对照Logistic Regression来推。

Logistic Regression的代价函数,这里把上面的a[L]写为y^

J(W,b)=1mi=1mL(y^(i),y(i))=1mi=1my(i)log y^(i)+(1y(i))log(1y^(i))

首先,考虑单个样本,那么在Logistic Regression中单个样本的概率函数就是,

P(y)=(y^)y(1y^)1y

同样的,在softmax中单个样本的概率函数以同样的形式可以写为,

P(y)=i=1n[L](y^i)yi

进行对数似然,

L(P(y))=i=1n[L]yilog(y^i)

改为最小化似然函数,加上一个负号,

L(P(y))=i=1n[L]yilog(y^i)

那么现在就可以考虑多样本输入的情况,直接在前面加上一个求和就行,

L(P(y))=i=1mj=1n[L]yj(i)log(y^j(i))

梯度

代价函数就是上面的负对数似然,同样先考虑单样本,

J(w,b)=j=1n[L]yjlog(y^j)

y^j换一下,忽略上标,

J(w,b)=j=1nyjlog(ezji=1nezi)=j=1nyj(log(ezj)log(i=1nezi))=j=1nyjlog(ezj)+j=1nyjlog(i=1nezi)=j=1nyjzj+log(j=1nezj)

先求一个zi的导数,

Jzi=yi+ezij=1nezj=y^iyi

所以,对于一个样本的导数就可以写为,

Jz=y^y

当然,多个样本的形式也和上面一模一样,所以反向传播时,其实计算是十分简单的。

注:

在cs231n课程里面,提到这里还有一个地方需要注意,因为中间会去求e的幂次, 这很容易会造成上溢,所以通常对这个地方要做一个额外的处理,

ezj=1nezj=CezCj=1nezj=ez+logCj=1nezj+logC

这里的C,一般取值为,

logC=maxjzj

那么为什么要叫做softmax呢?

它其实对应的是hard maxhard max的操作就是直接将z[L]按照取值大小, 直接硬转为0、1,所以这里取了一个soft

z[L]=[5213][1000]