我们有logistic regression可以将实数域的输入映射为0到1的概率输出,能够有很好的意义。但是如果用平常的MSE(最小均方误差)就会有问题。我们来剖析这个问题:
logistic与MSE
现在有一个目标:输入0,输出1。
为了方便起见,我们现在只考虑有一个神经元
我们给定初始的权重w=0.6,b=0.9来看学习趋势,这里学习率 η=0.15,初始预测值为0.82
可以看到Cost一开始随着训练轮数的增加下降的还是蛮快的,之后平缓,符合人们的直觉。
我们再次改变权重令,w=2.0,b=2.0,初始预测值为0.98
可以看出一开始的Cost几乎是不下降的,也就是说学习得特别缓慢。为什么会出现这种情况呢,初始的权重不同为什么会导致学习速率的不同呢?我们来看logistic regression+MSE到底哪里有欠缺。
首先来看MSE的形式:
C(ω,b)=12n∑x||y(x)−a||2
由于我们的简化,现在只有一个神经元则,变成:
C(ω,b)=12||y−a||2
其中 a=σ(z),z=ωx+b
分别对 ω , b 求偏导:
∂C∂b=(y−σ(z))σ′(z)
上式右边带入了y=0,x=1。
改变 ω ,b带来的Cost的下降是与z的梯度有关系的,下面给出 σ 函数的图像。可以看出值越接近1的时候,梯度是越小的。这就是为什么预测值是0.82的时候,Cost下降的很快而预测值是0.98的时候,Cost下降很慢了。
logistic和cross-entropy
关于交叉熵的知识详见这里
进过研究,人们发现用交叉熵作为损失函数就会避免这种0学习速率的问题。
考虑上述模型,引入交叉熵之后,Cost为:
C=−1n∑x[ylna+(1−y)ln(1−a)]
其中 a=σ(z),z=ωx+b
∂C∂ωj=−1n∑x(yσ(z)−1−y1−σ(z))∂σ∂ωj=−1n∑x(yσ(z)−1−y1−σ(z))σ′(z)xj=1n∑xσ(z)−yσ(z)(1−σ(z))σ′(z)xj
我们知道sigmod函数的导数为: σ′(z)=σ(z)(1−σ(z))
所以:
∂C∂ωj=1n∑xxj(σ(z)−y)
类似的有
∂C∂b=1n∑x(σ(z)−y)
可以看出学习快慢取决于 σ(z)−y 的大小。错误率越大,学习效率也交越大。还是形象的看学习快慢。
w=0.6,b=0.9来看学习趋势,这里学习率 η=0.005
w=0.2,b=0.2
softmax 回归
为了精确运算一般都是把softmax计算层和回归层放在一起进行。采用log-likelihood
Cost=−log(ezy∑mj=1ezj)=log(∑j=1mezj)−zy
∂Cost∂zk=ezk∑mj=1ezj−δky=soft(z)−δky
其中: δky=1,k=y;δky=0,k≠y
本文探讨了logistic regression在处理概率输出时为何不适合使用MSE损失函数,并介绍了如何通过交叉熵损失函数解决这一问题。同时,文章还涉及softmax回归,说明在实际应用中通常将softmax层与回归层结合,并采用log-likelihood作为损失函数。

被折叠的 条评论
为什么被折叠?



