Softmax

原文地址:http://blog.csdn.net/hungryof/article/details/50395062

简介

其实吧,一般在神经网络中用的最多的是sigmoid和tanh,当然也有用relu的。这是针对“是”和“否”的分类,但当进行多分类时,就要用到softmax 。

在logistic回归中,训练样本是:{(x(1),y(1)),...,(x(m),y(m))} ,值得注意是,每个样本x(i)R(n+1) ,当然了,其中x0=1 是对应的截距项。也就是说,每个样本都是具有n+1维的向量,并且第1维都是为1(方便与参数θ 的第0维偏置b相乘)。

在logistic回归中,激活函数是:

hθ(x)=11+exp(θTx)


训练θ 的最小化代价函数是:

J(θ)=1m[i=1my(i)loghθ(x(i))+(1y(i))log(1hθ(x(x)))]


其中,hθ(x)=11+exp(θTx) 对应的图形是:
这里写图片描述
,那么对应的对数图像是:
这里写图片描述

 

我们要做的是分类,因此当然是想知道,当输入x是,x分别属于每一个类的概率,概率最大的那个就是我们认为的属于的类
让输出为一个向量,并且有k 维,分别代表属于i 类的概率。当然还要进行归一化,让输出的向量元素的值和为1.

hθ(x(i))=⎡⎣⎢⎢⎢⎢⎢p(y(i)=1x(i);θ)p(y(i)=2x(i);θ)p(y(i)=kx(i);θ)⎤⎦⎥⎥⎥⎥⎥=1kj=1eθTjx(i)⎡⎣⎢⎢⎢⎢⎢⎢eθT1x(i)eθT2x(i)eθTkx(i)⎤⎦⎥⎥⎥⎥⎥⎥

 

这里的eθTix(i) 就是yi ,因此就是对输出进行归一化。

上面的公式真难打。。
可以看出,我们将hθ(x(i)) 进行了变换,现在对于输入x(i) ,输出的是一个向量了,并不是像sigmoid的一个0~1的数。值得注意的是:θiRn+1 是模型的参数。

softmax模型参数
softmax模型的参数是k个n+1维的θ 组成的矩阵,输出的是向量。

θ=⎡⎣⎢⎢⎢⎢⎢θT1θT2θTk⎤⎦⎥⎥⎥⎥⎥

 

代价函数

1{} 是indicator function,表示{}内的表达式正确为1,否则为0.
代价函数是:

J(θ)=1m⎡⎣i=1mj=1k1{y(i)=j}logeθTjx(i)kl=1eθTlx(i)⎤⎦


可以这样理解,就是求另每个输入属于属于每一类的概率,再求平均。
对比logistic的J(θ)

J(θ)=1m[i=1m(1y(i))log(1hθ(x(i)))+y(i)loghθ(x(i))]=1m⎡⎣i=1mj=011{y(i)=j}logp(y(i)=j|x(i);θ)⎤⎦


可以看出,形式非常相似,只是在累的标记的k个可能值进行了累加。
将x分类到类别 j 的概率为:

p(y(i)=j|x(i);θ)=eθTjx(i)kl=1eθTlx(i)


经过求导,得到梯度公式:

θjJ(θ)=1mi=1m[x(i)(1{y(i)=j}p(y(i)=j|x(i);θ))]


θjJ(θ) 是一个向量,它的第l 个元素J(θ)θjlJ(θ)θj 的第l 个分量的偏导。
每次更新:
θj:=θjαθjJ(θ) ,其中j[1,...,k]

 

权重衰减

虽然代价函数是上面形式,但是一般是添加一个权重衰减项λ2ki=1nj=0θ2ij ,衰减项主要是惩罚过大的参数。
此时:

J(θ)=1m⎡⎣i=1mj=1k1{y(i)=j}logeθTjx(i)kl=1eθTlx(i)⎤⎦+λ2i=1kj=0nθ2ij


,求导变成:

θjJ(θ)=1mi=1m[x(i)(1{y(i)=j}p(y(i)=j|x(i);θ))]+λθj
原文地址:https://www.cnblogs.com/lzhu/p/8331259.html