逻辑回归(logistic regression)损失函数(loss function)推导

逻辑回归(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+ez1.

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^)(1y)log(1y^).

但是在阅读一些论文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=11+ez1=1+ezez.

为了阅读方便,我从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)+(1y)log(1σ(z))=y(logσ(z)logσ(z))+logσ(z)=ylogσ(z)σ(z)+logσ(z)=ylog(1+ez1+ez)+logσ(z)=ylog(1+ezez(ez+1))+logσ(z)=yz+logσ(z)=yxTwlog(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


  1. https://en.wikipedia.org/wiki/Logistic_regression ↩︎

  2. https://blog.csdn.net/u014261408/article/details/106150098 ↩︎

  3. https://gombru.github.io/2018/05/23/cross_entropy_loss/ ↩︎

  4. https://arxiv.org/pdf/1911.04587.pdf ↩︎

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

  6. https://github.com/moralesq/Knet-the-Julia-dope/blob/master/chapter02_supervised-learning/section3-logistic-regression.ipynb ↩︎

  7. https://blog.csdn.net/u014261408/article/details/102564612 ↩︎

你可能感兴趣的:(机器学习,逻辑回归,损失函数,推导)