逻辑回归(logistic regression)损失函数(loss function)推导
逻辑回归(logistic regression)逻辑回归(LR)可以看做线性回归(linear regression)的拓展,二者的区别是:逻辑回归的结果为0或1,即分类;线性回归的结果是连续值,即回归1。Binary LR本文重点在二分类逻辑回归,其一般形式为:y^=σ(z)=σ(xTw) .\hat{y}=\sigma(z)=\sigma(\boldsymbol{x^T}\boldsymbo
逻辑回归(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 ↩︎
更多推荐

所有评论(0)