1. 程式人生 > >為何邏輯回歸的損失函式是用交叉熵而非均方誤差?

為何邏輯回歸的損失函式是用交叉熵而非均方誤差?

為何邏輯回歸的損失函式是用交叉熵而非均方誤差?

前言

本文是筆者在學習吳恩達的深度學習課程時所碰到的問題。
課程中雖然有提及將均方誤差用於邏輯回歸可能會造成多個區域性最小值

,但是並未給出具體例子。
而本篇文章將嘗試給出幾個例子,並說明其背後的原因。

在進入正文以前,必須先澄清一點:
loss function(損失函式)指的是單一個樣本的誤差。
而cost function(代價函式,成本函式)指的是資料集中所有樣本誤差的均值。

邏輯回歸的損失函式推導

邏輯回歸的輸出值 y ^ \hat{y}

表示的是當前輸入 x x 是屬於 y = 1 y=1
這個類別的機率
,用數學的語言來說明的話,就是:
P ( y = 1 x ) = y ^ P(y=1|x) = \hat{y}
輸入x是屬於y=0這個類別的機率則是:
P ( y = 0 x ) = 1 y ^ P(y=0|x) = 1-\hat{y}
我們可以將上面這兩個式子可以合併,代表正確地將 x x 分到它所屬的類別 y y 的機率,變成:
P ( y x ) = y ^ y ( 1 y ^ ) 1 y P(y|x) = \hat{y}^{y}(1-\hat{y})^{1-y}
我們希望這個機率越大越好。

為了簡化計算,在等式兩邊取log:
log ( P ( y x ) ) = y log ( y ^ ) + ( 1 y ) log ( 1 y ^ ) \log(P(y|x)) = y\log(\hat{y})+(1-y)\log(1-\hat{y})

我們原來的目標是希望最大化 P ( y x ) P(y|x) ,經過變換後,目標變成最大化 log ( P ( y x ) ) \log(P(y|x))

log是嚴格遞增函式,如果輸入 x 1 > x_1> 輸入 x 2 x_2 ,則輸出 log ( x 1 ) > \log(x_1)> 輸出 log ( x 2 ) \log(x_2) 。即兩數在對應前後的大小關係不會被改變。
因為log函式有這種特性,所以我們可以說最大化 P ( y x ) P(y|x) 與最大化 log ( P ( y x ) ) \log(P(y|x)) 這兩個目標是一致的。

我們希望 log ( P ( y x ) ) \log(P(y|x)) 最大化,等義地,即是 log ( P ( y x ) ) -\log(P(y|x)) 最小化。因此我們可以將這個值當成loss,作為要優化的目標。

以下就是推匯出來的交叉熵損失函式
C r o s s E n t r o p y L o s s = [ y log ( y ^ ) + ( 1 y ) log ( 1 y ^ ) ] CrossEntropyLoss = -[y\log(\hat{y})+(1-y)\log(1-\hat{y})]

交叉熵代價函式則是所有交叉熵損失函式的平均:
C r o s s E n t r o p y C o s t = 1 m i = 1 m [ y ( i ) log ( y ^ ( i ) ) + ( 1 y ( i ) ) log ( 1 y ^ ( i ) ) ] CrossEntropyCost = -\frac{1}{m}\sum_{i=1}^{m} [y^{(i)}\log(\hat{y}^{(i)})+(1-y^{(i)})\log(1-\hat{y}^{(i)})]

使用均方誤差,會出現多個區域性最小值?

吳恩達在課程中有提到如果使用均方誤差,就會出現多個區域性最小值,導致收斂困難。
讓我們來看個具體例子:

為了後續計算方便,此處假設 b = 0 b=0 。因此 y ^ = w x \hat{y}=wx

我們先來看看使用交叉熵損失函式的情況:
C r o s s E n t r o p y L o s s = [ y l o g ( y ^ ) + ( 1 y ) l o g ( 1 y ^ ) ] = [ y l o g ( 1 1 + e x w ) + ( 1 y ) l o g ( 1 1 1 + e x w ) ] CrossEntropyLoss \\= -[ylog(\hat{y})+(1-y)log(1-\hat{y})] \\= -[ylog(\frac{1}{1+e^{-xw}})+(1-y)log(1-\frac{1}{1+e^{-xw}})]