logistic regression 和 softmax regression的损失函数

我们有logistic regression可以将实数域的输入映射为0到1的概率输出,能够有很好的意义。但是如果用平常的MSE(最小均方误差)就会有问题。我们来剖析这个问题:

logistic与MSE

logistic regression 和 softmax regression的损失函数

现在有一个目标:输入0,输出1。
为了方便起见,我们现在只考虑有一个神经元

logistic regression 和 softmax regression的损失函数

我们给定初始的权重w=0.6,b=0.9来看学习趋势,这里学习率 η=0.15,初始预测值为0.82
logistic regression 和 softmax regression的损失函数

可以看到Cost一开始随着训练轮数的增加下降的还是蛮快的,之后平缓,符合人们的直觉。
我们再次改变权重令,w=2.0,b=2.0,初始预测值为0.98
logistic regression 和 softmax regression的损失函数

可以看出一开始的Cost几乎是不下降的,也就是说学习得特别缓慢。为什么会出现这种情况呢,初始的权重不同为什么会导致学习速率的不同呢?我们来看logistic regression+MSE到底哪里有欠缺。

首先来看MSE的形式:

C(ω,b)=12nx||y(x)a||2

由于我们的简化,现在只有一个神经元则,变成:
C(ω,b)=12||ya||2

其中a=σ(z),z=ωx+b
分别对ωb求偏导:
Cω=(yσ(z))σ(z)x

Cb=(yσ(z))σ(z)

上式右边带入了y=0,x=1。
改变ω,b带来的Cost的下降是与z的梯度有关系的,下面给出σ函数的图像。可以看出值越接近1的时候,梯度是越小的。这就是为什么预测值是0.82的时候,Cost下降的很快而预测值是0.98的时候,Cost下降很慢了。

logistic regression 和 softmax regression的损失函数

logistic和cross-entropy

关于交叉熵的知识详见这里
进过研究,人们发现用交叉熵作为损失函数就会避免这种0学习速率的问题。

logistic regression 和 softmax regression的损失函数

考虑上述模型,引入交叉熵之后,Cost为:
C=1nx[ylna+(1y)ln(1a)]

其中a=σ(z),z=ωx+b
Cωj=1nx(yσ(z)1y1σ(z))σωj=1nx(yσ(z)1y1σ(z))σ(z)xj=1nxσ(z)yσ(z)(1σ(z))σ(z)xj

我们知道sigmod函数的导数为:σ(z)=σ(z)(1σ(z))
所以:
Cωj=1nxxj(σ(z)y)

类似的有
Cb=1nx(σ(z)y)

可以看出学习快慢取决于σ(z)y的大小。错误率越大,学习效率也交越大。还是形象的看学习快慢。
w=0.6,b=0.9来看学习趋势,这里学习率 η=0.005
logistic regression 和 softmax regression的损失函数

w=0.2,b=0.2
logistic regression 和 softmax regression的损失函数

softmax 回归

为了精确运算一般都是把softmax计算层和回归层放在一起进行。采用log-likelihood

Cost=log(ezymj=1ezj)=log(j=1mezj)zy

Costzk=ezkmj=1ezjδky=soft(z)δky

其中:δky=1,k=y;δky=0,ky

参考http://neuralnetworksanddeeplearning.com/chap3.html