逻辑回归(logistic regression)
逻辑回归(LR)可以看做线性回归(linear regression)的拓展,二者的区别是:逻辑回归的结果为0或1,即分类;线性回归的结果是连续值,即回归1。
Binary LR
本文重点在二分类逻辑回归,其一般形式为:
y
^
=
σ
(
z
)
=
σ
(
x
T
w
)
.
\hat{y}=\sigma(z)=\sigma(\boldsymbol{x^T}\boldsymbol{w})\,.
y^=σ(z)=σ(xTw).
注意,这里
σ
(
z
)
\sigma(z)
σ(z)是Sigmoid函数2:
σ
(
z
)
=
1
1
+
e
−
z
.
\sigma(z)=\frac{1}{1+e^{-z}}\,.
σ(z)=1+e−z1.
Loss Function
对于分类问题,我们一般用交叉熵3(Cross Entropy)当损失函数。对于LR这种二分类问题,交叉熵简化为Binary Cross Entropy,即:
ℓ = − y log ( y ^ ) − ( 1 − y ) log ( 1 − y ^ ) . \ell=-y\log(\hat{y})-(1-y)\log(1-\hat{y})\,. ℓ=−ylog(y^)−(1−y)log(1−y^).
但是在阅读一些论文4时,我发现里面LR的损失函数是这样的:
ℓ
=
log
(
1
+
e
x
T
w
)
−
y
x
T
w
.
\ell=\log(1+e^{\boldsymbol{x^T}\boldsymbol{w}})-y\boldsymbol{x^T}\boldsymbol{w}\,.
ℓ=log(1+exTw)−yxTw.
本以为这个文章用的不是Binary Cross Entropy,直到我在StackExchange5上看了一个回答,才发现这俩函数可以互相推导!我现在重新推一遍,给自己加深下印象,也方便以后查阅。
推导过程
主要参考这个页面6。
推导之前,先给出Sigmoid函数的一个性质,即
σ
(
−
z
)
=
1
−
σ
(
z
)
\sigma(-z)=1-\sigma(z)
σ(−z)=1−σ(z):
σ
(
−
z
)
=
1
1
+
e
z
=
1
−
1
1
+
e
−
z
=
e
−
z
1
+
e
−
z
.
\sigma(-z)=\frac{1}{1+e^{z}}=1-\frac{1}{1+e^{-z}}=\frac{e^{-z}}{1+e^{-z}}\,.
σ(−z)=1+ez1=1−1+e−z1=1+e−ze−z.
为了阅读方便,我从Binary Cross Entropy的相反数推导,最后取负:
−
ℓ
=
y
log
σ
(
z
)
+
(
1
−
y
)
log
(
1
−
σ
(
z
)
)
=
y
(
log
σ
(
z
)
−
log
σ
(
−
z
)
)
+
log
σ
(
−
z
)
=
y
log
σ
(
z
)
σ
(
−
z
)
+
log
σ
(
−
z
)
=
y
log
(
1
+
e
z
1
+
e
−
z
)
+
log
σ
(
−
z
)
=
y
log
(
e
z
(
e
−
z
+
1
)
1
+
e
−
z
)
+
log
σ
(
−
z
)
=
y
z
+
log
σ
(
−
z
)
=
y
x
T
w
−
log
(
1
+
e
z
)
.
-\ell=y\log\sigma(z)+(1-y)\log(1-\sigma(z)) \\ =y(\log\sigma(z)-\log\sigma(-z)) + \log\sigma(-z)\\ =y\log\frac{\sigma(z)}{\sigma(-z)}+ \log\sigma(-z)\\ =y\log\left(\frac{1+e^z}{1+e^{-z}}\right)+ \log\sigma(-z)\\ =y\log\left(\frac{e^z(e^{-z}+1)}{1+e^{-z}}\right)+ \log\sigma(-z)\\ =yz+ \log\sigma(-z)\\ =y\boldsymbol{x^T}\boldsymbol{w}-\log(1+e^z)\,.
−ℓ=ylogσ(z)+(1−y)log(1−σ(z))=y(logσ(z)−logσ(−z))+logσ(−z)=ylogσ(−z)σ(z)+logσ(−z)=ylog(1+e−z1+ez)+logσ(−z)=ylog(1+e−zez(e−z+1))+logσ(−z)=yz+logσ(−z)=yxTw−log(1+ez).
最后,取负,可得:
ℓ
=
log
(
1
+
e
x
T
w
)
−
y
x
T
w
.
\ell=\log(1+e^{\boldsymbol{x^T}\boldsymbol{w}})-y\boldsymbol{x^T}\boldsymbol{w}\,.
ℓ=log(1+exTw)−yxTw.
证毕。
值得一提的是,上述推导中隐含了这一步
log
e
z
=
z
\log e^z=z
logez=z,但是交叉熵的
log
\log
log基底一般为2,所以更准确的推导应该是:
log
2
e
z
=
log
e
e
z
log
e
2
=
z
log
e
2
.
\log_2e^z=\frac{\log_ee^z}{\log_e2}=\frac{z}{\log_e2}\,.
log2ez=loge2logeez=loge2z.
公式中
log
e
2
\log_e2
loge2只是一个简单的常数,我们在推导过程中可以直接省略,对损失函数的解不会产生影响。关于
log
\log
log的换底公式,请参考这篇文章7。
https://blog.csdn.net/u014261408/article/details/106150098 ↩︎
https://stats.stackexchange.com/questions/250937/which-loss-function-is-correct-for-logistic-regression ↩︎
https://github.com/moralesq/Knet-the-Julia-dope/blob/master/chapter02_supervised-learning/section3-logistic-regression.ipynb ↩︎
https://blog.csdn.net/u014261408/article/details/102564612 ↩︎