前言

當前正在整理機器學習中邏輯迴歸的基礎和麵試內容,這裡有一個值得思考的問題與大家分享與討論。

微信:

概要

邏輯迴歸(logistic regression)在機器學習中是非常經典的分類方法,周志華教授的《機器學習》書中稱其為對數機率迴歸,因為其屬於對數線性模型。

在演算法面試中,邏輯迴歸也經常被問到,常見的面試題包括:

邏輯迴歸推導;

邏輯迴歸如何實現多分類?

SVM與LR的聯絡與區別?

邏輯迴歸反向傳播虛擬碼;

大家可以思考下能不能回答/推匯出,但這次討論的問題是:

❝ 為什麼邏輯迴歸損失函式是交叉熵?

初看這個問題感覺很奇怪,但是其中的知識包含了LR的推導與理解。在我個人看來,可以從兩個角度看待這個問題:

【1】從極大似然估計的角度可以推匯出交叉熵;

【2】從KL散度(熵的角度)去理解(參考了[1]);

極大似然估計

對於邏輯迴歸,我們一般透過極大似然估計來求解引數

w

首先假設兩個邏輯迴歸的兩個條件機率:

P(Y=1|x) = \frac{exp(w\cdot x)}{1+ exp(w\cdot x)} = \pi{x} \\

P(Y=0|x) = \frac{1}{1+ exp(w\cdot x)} = 1 - \pi{x}  \\

學習時,採用極大似然估計來估計模型的引數,似然函式為:

L(w)=\prod_{i=1}^{m}[\pi(x_i)]^{y_i}[1-\pi(x_i)]^{1-y_i} \\

對數似然函式(採用對數似然函式是因為上述公式的連乘操作易造成下溢)為:

L(w)=\sum^{m}_{i=1}y_ilog(\pi(x_i))+(1-y_i)log(1-\pi(x_i))  \\

對其求最大值,估計引數

w

w^*=\underset{w}{argmax}\sum^{m}_{i=1}y_ilog(\pi(x_i))+(1-y_i)log(1-\pi(x_i))  \\

再將其改為最小化負的對對數似然函式:

w^*=\underset{w}{argmin}\sum^{m}_{i=1}-y_ilog(\pi(x_i))-(1-y_i)log(1-\pi(x_i)) \\

如此,就得到了Logistic迴歸的損失函式,即機器學習中的

「二元交叉熵」

(Binary crossentropy):

J(w)=-\frac{1}{m}\sum^{m}_{i=1}y_ilog(\pi(x_i))+(1-y_i)log(1-\pi(x_i))  \\

此時轉變為以負對數似然函式為目標函式的最最佳化問題,採用梯度下降法進行最佳化。

KL散度

KL散度這個概念知道的人可能相對極大似然估計更少一點,具體可以看我

文章。簡單來說,

「KL散度是衡量兩個機率分佈的差異」

邏輯迴歸模型最後的計算結果(透過sigmoid或softmax函式)是各個分類的機率(可以看做是各個分類的機率分佈)。那麼假設真實的機率分佈是

p(x)

,估計得到的機率分佈是

q(x)

, 這兩個機率分佈的距離如何去衡量?

在資訊理論中,

「相對熵」

,也就是KL散度可以衡量兩個機率分佈的差異性。具體公式為:

D_{KL}(p||q)=\displaystyle\sum_xp(x)log\frac{p(x)}{q(x)}=\displaystyle\sum_xp(x)(logp(x)-logq(x)) \\

並且簡單轉化,可以得到:

D_{KL}(p||q)=-\displaystyle\sum_xp(x)logq(x)-(-\displaystyle\sum_xp(x)logp(x))=H(p,q)-H(p) \\

其中對於

H(p,q)=-\displaystyle\sum_xp(x)logp(x)

就是

「交叉熵」

H(p)

是真實分佈的資訊熵,所以

KL散度 = 交叉熵 - 真實機率分佈的熵

因為交叉熵越大,KL散度越大,也可以用交叉熵來衡量兩個機率分佈之間的距離,所以邏輯迴歸使用交叉熵作為邏輯迴歸的損失函式。

總結

以上便是個人對這個問題的理解。