分類必然交叉熵,迴歸無腦MSE

」似乎已經是機器學習裡的一個定式,大家在面對分類或者回歸問題時基本不假思索地應用交叉熵或者MSE, 這樣大體是沒錯的,不過如能理解其背後的原因,用起來就會更加得心應手,在合適的場景選用合適的損失。

為什麼分類常用交叉熵, 能用MSE嗎

這個問題可以從兩個角度來分析。首先我們從比較直接、接近直覺的角度來分析。不失一般性以三分類問題為例,輸入圖片樣本獲得各個類別的機率值。例如某樣本label是(1, 0, 0), mse損失函式會任務預估值(0。8, 0。1, 0。1)比(0。8, 0。15, 0。05)好,因為前者mse損失函式值更小。這在分類問題上顯然是不合適的,分類更關注於正確類別的機率。 另一個角度是從梯度來看二者的差異, 針對某樣本其label=(1,0,0), 預估輸出機率為

\hat{y}=(\hat{y_a}, \hat{y_b}, \hat{y_c})\\

\begin{aligned} \hat{y_a} &= softmax(z_a) = \frac{e^{z_a}}{\sum_{k}e^{z_k}} \\  \end{aligned}\\

對於MSE損失函式,

\begin{aligned} L_{mse} &= 0.5*((\hat{y_a}-1)^2+\hat{y_b}^2+\hat{y_c}^2) \\ \frac{\partial L_{mse}}{\partial z_a} &= \frac{\partial L_{mse}}{\partial  \hat{y_a}} *\frac{\partial  \hat{y_a}}{\partial z_a}+\frac{\partial L_{mse}}{\partial  \hat{y_b}} *\frac{\partial  \hat{y_b}}{\partial z_a}+\frac{\partial L_{mse}}{\partial  \hat{y_c}} *\frac{\partial  \hat{y_c}}{\partial z_a} \\ & = (\hat{y_a}-1)*\hat{y_a}(1-\hat{y_a}) - y_ay_b^2- y_ay_c^2\\ &= -\hat{y_a}(\hat{y_a}-1)^2- y_ay_b^2- y_ay_c^2 \end{aligned}\\

\hat{y_a}

對應的類別是1, 如果

\hat{y_a}=0

說明錯得離譜,但根據上面推導此時梯度卻是0,顯然不合理。 再來看一下交叉熵的情形:

\begin{aligned} L_{ce} &= -label*log \hat{y_a}=-log \hat{y_a}\\ \frac{\partial L_{ce}}{\partial z_a}  &= \frac{\partial L_{ce}}{\partial  \hat{y_a}} *\frac{\partial  \hat{y_a}}{\partial z_a} \\ & =-\frac{1}{\hat{y_a}}*\hat{y_a}(1-\hat{y_a})\\ &=\hat{y_a}-1\\ \end{aligned}\\

可見交叉熵的梯度更為合理,如果

\hat{y_a}=1

那麼梯度為0不需要更新。

迴歸問題能用交叉熵嗎 怎麼用?

迴歸問題常用mse作為損失函式,這裡面一個隱含的預設是資料誤差符合高斯分佈。交叉熵則是以資料分佈服從多項式分佈為前提。因此本質上回歸應該用什麼樣的損失函式取決於資料分佈。損失函式的選擇本身也是一種先驗偏好,選擇mse意味著你認為資料誤差符合高斯分佈,選擇交叉熵則表示你傾向於認為資料接近多項式分佈。如果你的先驗直覺比較準確,符合實際情況,那模型效果應該會更好一些。 多項式分佈一般和離散資料相關,但如果連續資料分桶後接近多項式分佈,那選用mse可能就不合時宜了。那麼如何使用交叉熵損失建模迴歸問題呢? 首先回顧下交叉熵損失函式,以二分類問題為例:

L=-(plog\hat{y}+(1-p)log(1-\hat{y})) \\

我們將交叉熵形式略作修改,更一般化的形式為:

L=-(alog\hat{y}+blog(1-\hat{y})) \\

這裡的a, b已不必具有機率意義,我們先看下這種形式的loss收斂目標是什麼:

\begin{aligned} \frac{\partial{L}}{\partial{\hat{y}}} &= -\frac{a}{y}-\frac{b}{1-y}=0\\ =>y&=\frac{a}{a+b} \end{aligned}\\

如將交叉熵應用於迴歸,令a為迴歸目標值,b=1,則此時該損失函式的收斂目標為:

y=\frac{a}{a+1} \\

而模型預估值

\hat{y}=sigmoid(z)=\frac{1}{1+e^{-z}} \\

\frac{a}{a+1}=\frac{1}{1+e^{-z}} \\

那麼有:

a=e^z

也就是說,使用以上形式的交叉熵損失函式可以實現迴歸的目的,只是最後模型的預估

\hat{y}

不等於迴歸目標,而是中間值

e^z

收斂到迴歸目標值上了!是不是很神奇?其實類似的方法Google已經用在了YouTube的推薦系統裡,如下圖中 serving 時使用的值就是指數形式的中間值,

分類必然交叉熵,迴歸無腦MSE?未必

更多細節可以參考原論文

和王喆大佬的這篇分析:

雖然交叉熵用在迴歸問題看起來有些越俎代庖,「狗拿耗子多管閒事」,但不是還有句話叫「黑貓白貓能捉老鼠就是好貓」嘛!搞清楚資料特點、使用場景,loss選擇就能更貼合實際,最終的效果才是硬道理。

Loss選擇與最大熵的關係

最後總結一下,損失函式的選擇是出於對資料分佈的假設,不同的loss形式隱式地有對資料分佈的要求,需要仔細分析資料特點進行判斷。至於為什麼A分佈對應甲損失函式,B分佈卻對應乙損失函式,這也是一個值得展開的話題,簡單來說這是最大熵原理約束下的選擇。如對於高斯噪音分佈,選擇mse是滿足最大熵要求的,它沒有在高斯分佈的假設之外增加額外的先驗偏好。關於最大熵原理的理解可以參考筆者另一篇文章理解最大熵:

更多內容歡迎關注公眾號

冷位元的煉丹房