分類必然交叉熵,迴歸無腦MSE?未必
「
分類必然交叉熵,迴歸無腦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), 預估輸出機率為
。
對於MSE損失函式,
對應的類別是1, 如果
說明錯得離譜,但根據上面推導此時梯度卻是0,顯然不合理。 再來看一下交叉熵的情形:
可見交叉熵的梯度更為合理,如果
那麼梯度為0不需要更新。
迴歸問題能用交叉熵嗎 怎麼用?
迴歸問題常用mse作為損失函式,這裡面一個隱含的預設是資料誤差符合高斯分佈。交叉熵則是以資料分佈服從多項式分佈為前提。因此本質上回歸應該用什麼樣的損失函式取決於資料分佈。損失函式的選擇本身也是一種先驗偏好,選擇mse意味著你認為資料誤差符合高斯分佈,選擇交叉熵則表示你傾向於認為資料接近多項式分佈。如果你的先驗直覺比較準確,符合實際情況,那模型效果應該會更好一些。 多項式分佈一般和離散資料相關,但如果連續資料分桶後接近多項式分佈,那選用mse可能就不合時宜了。那麼如何使用交叉熵損失建模迴歸問題呢? 首先回顧下交叉熵損失函式,以二分類問題為例:
我們將交叉熵形式略作修改,更一般化的形式為:
這裡的a, b已不必具有機率意義,我們先看下這種形式的loss收斂目標是什麼:
如將交叉熵應用於迴歸,令a為迴歸目標值,b=1,則此時該損失函式的收斂目標為:
而模型預估值
令
那麼有:
也就是說,使用以上形式的交叉熵損失函式可以實現迴歸的目的,只是最後模型的預估
不等於迴歸目標,而是中間值
收斂到迴歸目標值上了!是不是很神奇?其實類似的方法Google已經用在了YouTube的推薦系統裡,如下圖中 serving 時使用的值就是指數形式的中間值,
更多細節可以參考原論文
和王喆大佬的這篇分析:
雖然交叉熵用在迴歸問題看起來有些越俎代庖,「狗拿耗子多管閒事」,但不是還有句話叫「黑貓白貓能捉老鼠就是好貓」嘛!搞清楚資料特點、使用場景,loss選擇就能更貼合實際,最終的效果才是硬道理。
Loss選擇與最大熵的關係
最後總結一下,損失函式的選擇是出於對資料分佈的假設,不同的loss形式隱式地有對資料分佈的要求,需要仔細分析資料特點進行判斷。至於為什麼A分佈對應甲損失函式,B分佈卻對應乙損失函式,這也是一個值得展開的話題,簡單來說這是最大熵原理約束下的選擇。如對於高斯噪音分佈,選擇mse是滿足最大熵要求的,它沒有在高斯分佈的假設之外增加額外的先驗偏好。關於最大熵原理的理解可以參考筆者另一篇文章理解最大熵:
更多內容歡迎關注公眾號
冷位元的煉丹房