逻辑斯蒂损失函数的两种形式

这两天看了下libFM的代码,对于分类问题,libFM使用的损失函数是logloss,跟常见的LR的损失函数的形式略有不同。于是整理了下两种形式的LR的异同。

在二分类问题中,样本的label一般有两种形式: y=±1或者y=01

如果y=01,那么有:

P(y=1|z)=σ(z)=11+ezP(y=0|z)=1σ(z)=11+ez

上面的等式可以表示成:

P(y|z)=σ(z)y(1σ(z))1y

对应的对数损失为:

l(z)=log(miP(yi|zi))=milog(P(yi|zi))=miyizi+log(1+ezi)

最后一步展开如下:

log(P(y|z))=log(σ(z)y(1σ(z))1y)=ylog(σ(z))+(1y)log(1σ(z))=ylog(11+ez)+(1y)log(11+ez)=y(log(11+ez)log(11+ez))+log(11+ez)=y(log(1+ez1+ez))log(1+ez)=y(log(ez(1+ez)1+ez))log(1+ez)=yzlog(1+ez)

而如果我们选择y=±1,则y的概率为

P(y|z)=σ(yz)=11+eyz

y=±1 分开表示则有:

P(y=1|z)=σ(z)=11+ezP(y=1|z)=σ(z)=11+ez

可以看出,跟y=01其实是一样的。

从这里也可以看到,P(y=0|z)P(y=1|z)的表达式是相同的, 也就是有如下等式成立:

σ(z)=1σ(z)

和上面的推导一样:

L(z)=log(mjP(yj|zj))=mjlog(P(yj|zj))=mjlog(1+eyjzj)

也就是下面两种表达式是等价的:

yizi+log(1+ezi)log(1+eyizi)

但是两种形式还是有些不同的。

第一种形式其实是从y服从伯努利分布推导出来的。想想伯努利分布的定义:

P(Y=y | p)=L(p;y)=py (1p)1y={1py=0py=1

和第一种损失的表示形式是一样的。

这种形式其实也是广义线性模型的一种。

第二种形式的好处是和hinge loss,0-1 loss 比较起来比较方便,因为都是定义在y=±1上的。

下面补充下sigmoid函数的梯度。

σ(z)=1(1+ez)2ez(1)=ez(1+ez)2=1+ez1(1+ez)2=11+ez1(1+ez)2=11+ez(111+ez)=σ(z)(1σ(z))

即,sigmoid函数的梯度有如下关系成立:

σ(z)=σ(z)(1σ(z))

似然函数关于z的梯度:

第一种形式: logP(y|z)z=ylog(σ(z))+(1y)log(1σ(z))z=y1σ(z)σ(z)z+(1y)1σ(z)(1)σ(z)z=y1σ(z)σ(z)(1σ(z))+(1y)1σ(z)(1)σ(z)(1σ(z))=y(1σ(z))+(y1)(1σ(z))=y(1σ(z))+(y1)(1(1σ(z)))=y(1σ(z))+(y1)σ(z)=yσ(z)

最终梯度形式就是label和预估值之间的残差。 而似然函数和损失函数之间差了一个负号,所以损失函数关于z的梯度形式应该是σ(z)y

推导时用到了σ(z)=1σ(z)σ(z)的梯度表达式

第二种形式:

logP(y|z)z=logσ(yz)z=1σ(yz)σ(yz)z=1σ(yz)σ(yz)(1σ(yz))y=y(1σ(yz))

梯度为y(1σ(yz))。 和第一种形式一样,这里也是使用的似然函数,如果是损失函数则需要再加一个负号。

y = 1时就是1σ(z),y = -1 时是σ(z)1=1σ(z)1=σ(z),

和第一种形式的梯度是一样的。

参考:

1.https://stats.stackexchange.com/questions/250937/which-loss-function-is-correct-for-logistic-regression

2.https://stats.stackexchange.com/questions/229645/why-there-are-two-different-logistic-loss-formulation-notations?noredirect=1&lq=1

宁雨 /
Published under (CC) BY-NC-SA in categories MachineLearning  tagged with