常見迴歸和分類損失函數比較


代碼



損失函數的通常表示爲\(L(y,f(x))\),用以衡量真實值\(y\)和預測值\(f(x)\)之間不一致的程度,通常越小越好。爲了便於不一樣損失函數的比較,常將其表示爲單變量的函數,在迴歸問題中這個變量爲\(y-f(x)\),在分類問題中則爲\(yf(x)\)。下面分別進行討論。html



迴歸問題的損失函數git

迴歸問題中\(y\)\(f(x)\)皆爲實數\(\in R\),所以用殘差 \(y-f(x)\)來度量兩者的不一致程度。殘差 (的絕對值) 越大,則損失函數越大,學習出來的模型效果就越差(這裏不考慮正則化問題)。


常見的迴歸損失函數有github

  • 平方損失 (squared loss)\((y-f(x))^2\)
  • 絕對值 (absolute loss) : \(|y-f(x)|\)
  • Huber損失 (huber loss) : \(\left\{\begin{matrix}\frac12[y-f(x)]^2 & \qquad |y-f(x)| \leq \delta \\ \delta|y-f(x)| - \frac12\delta^2 & \qquad |y-f(x)| > \delta\end{matrix}\right.\)



其中最經常使用的是平方損失,然而其缺點是對於異常點會施以較大的懲罰,於是不夠robust。若是有較多異常點,則絕對值損失表現較好,但絕對值損失的缺點是在\(y-f(x)=0\)處不連續可導,於是不容易優化。


Huber損失是對兩者的綜合,當\(|y-f(x)|\)小於一個事先指定的值\(\delta\)時,變爲平方損失,大於\(\delta\)時,則變成相似於絕對值損失,所以也是比較robust的損失函數。三者的圖形比較以下:


算法





分類問題的損失函數函數

對於二分類問題,\(y\in \left\{-1,+1 \right\}\),損失函數常表示爲關於\(yf(x)\)的單調遞減形式。以下圖:學習



\(yf(x)\)被稱爲margin,其做用相似於迴歸問題中的殘差 \(y-f(x)\)


二分類問題中的分類規則一般爲 \(sign(f(x)) = \left\{\begin{matrix} +1 \qquad if\;\;f(x) \geq 0 \\ -1 \qquad if\;\;f(x) < 0\end{matrix}\right.\)優化

能夠看到若是\(yf(x) > 0\),則樣本分類正確,\(yf(x) < 0\) 則分類錯誤,而相應的分類決策邊界即爲\(f(x) = 0\)。因此最小化損失函數也能夠看做是最大化margin的過程,任何合格的分類損失函數都應該對margin<0的樣本施以較大的懲罰。spa



一、 0-1損失 (zero-one loss) 翻譯

\[L(y,f(x)) = \left\{\begin{matrix} 0 \qquad if \;\; yf(x)\geq0 \\ 1 \qquad if \;\; yf(x) < 0\end{matrix}\right.\]3d

0-1損失對每一個錯分類點都施以相同的懲罰,這樣那些「錯的離譜「 (即 \(margin \rightarrow -\infty\))的點並不會收到大的關注,這在直覺上不是很合適。另外0-1損失不連續、非凸,優化困難,於是常使用其餘的代理損失函數進行優化。




二、Logistic loss
\[L(y,f(x)) = log(1+e^{-yf(x)})\]


logistic Loss爲Logistic Regression中使用的損失函數,下面作一下簡單證實:


Logistic Regression中使用了Sigmoid函數表示預測機率:\[g(f(x)) = P(y=1|x) = \frac{1}{1+e^{-f(x)}}\]

\[P(y=-1|x) = 1-P(y=1|x) = 1-\frac{1}{1+e^{-f(x)}} = \frac{1}{1+e^{f(x)}} = g(-f(x))\]

所以利用\(y\in\left\{-1,+1\right\}\),可寫爲\(P(y|x) = \frac{1}{1+e^{-yf(x)}}\),此爲一個機率模型,利用極大似然的思想:

\[max \left(\prod\limits_{i=1}^m P(y_i|x_i)\right) = max \left(\prod\limits_{i=1}^m \frac{1}{1+e^{-y_if(x_i)}}\right)\]


兩邊取對數,又由於是求損失函數,則將極大轉爲極小:

\[max\left(\sum\limits_{i=1}^m logP(y_i|x_i)\right) = -min \left(\sum\limits_{i=1}^m log(\frac{1}{1+e^{-y_if(x_i)}})\right) = min\left(\sum\limits_{i=1}^m log(1+e^{-y_if(x_i)}\right)\]

這樣就獲得了logistic loss。



若是定義\(t = \frac{y+1}2 \in \left\{0,1\right\}\),則極大似然法可寫爲:

\[\prod\limits_{i=1}^m (P(t_i=1|x_i))^{t_i}((1-P(t_i=1|x))^{1-t_i}\]

取對數並轉爲極小得:

\[\sum\limits_{i=1}^m \big\{ -t_i\log P(t_i=1|x_i) - (1-t_i)\log (1-P(t_i=1|x_i))\big\}\]

上式被稱爲交叉熵損失 (cross entropy loss),能夠看到在二分類問題中logistic loss和交叉熵損失是等價的,兩者區別只是標籤y的定義不一樣。




三、Hinge loss
\[L(y,f(x)) = max(0,1-yf(x))\]


hinge loss爲svm中使用的損失函數,hinge loss使得\(yf(x)>1\)的樣本損失皆爲0,由此帶來了稀疏解,使得svm僅經過少許的支持向量就能肯定最終超平面。

hinge loss被翻譯爲「合頁損失」,那麼合頁究竟長啥樣?如圖,確實有點像hinge loss的形狀:

來看下 hinge loss 是如何推導出來的,帶軟間隔的svm最後的優化問題可表示爲:
\[ \begin{align} & \mathop{min}\limits_{\boldsymbol{w},b,\xi} \frac12 ||\boldsymbol{w}||^2 + C\sum\limits_{i=1}^m\xi_i \tag{1}\\ & s.t. \quad y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b) \geqslant 1 - \xi_i \tag{2}\\ & \qquad\;\;\;\xi_i \geqslant 0\; , \;\;\;\;i = 1,2,..., m \tag{3} \end{align} \]
\((2)\) 式從新整理爲 $ \xi_i \geqslant 1 - y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b)$ 。若 \(1 - y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b) < 0\) ,因爲約束\((3)\) 的存在,則 \(\xi_i \geqslant 0\) ;若\(1 - y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b) \geqslant 0\) ,則依然爲 $ \xi_i \geqslant 1 - y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b)$ 。因此\((2),(3)\) 式結合起來:
\[ \xi_i \geqslant max(0,\, 1 - y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b)) = max(0,\, 1-y_if(x_i)) \]
又因爲 \((1)\) 式是最小化問題,因此取 \(\xi_i\) 的極小值,即令 \(\xi_i = max(0,1-yf(x))\) 代入 \((1)\) 式,並令\(\lambda = \frac{1}{2C}\)
\[ min\; C\sum\limits_{i=1}^m max(0,\, 1-y_if(x_i)) + \frac12 ||\boldsymbol{w}||^2 \quad {\large \propto} \quad min\; \sum\limits_{i=1}^m \underbrace{max(0,\, 1-y_if(x_i))}_{hinge \; loss} + \lambda ||\boldsymbol{w}||^2 \]
另外能夠看到 svm 這個形式的損失函數是自帶參數 \(\boldsymbol{w}\)\(L2\) 正則的,而相比之下Logistic Regression的損失函數則沒有顯式的正則化項,須要另外添加。




四、指數損失(Exponential loss)
\[L(y,f(x)) = e^{-yf(x)}\]


exponential loss爲AdaBoost中使用的損失函數,使用exponential loss能比較方便地利用加法模型推導出AdaBoost算法 (具體推導過程)。然而其和squared loss同樣,對異常點敏感,不夠robust。




五、modified Huber loss
\[L(y,f(x)) = \left \{\begin{matrix} max(0,1-yf(x))^2 \qquad if \;\;yf(x)\geq-1 \\ \qquad-4yf(x) \qquad\qquad\;\; if\;\; yf(x)<-1\end{matrix}\right.\qquad\]


modified huber loss結合了hinge loss和logistic loss的優勢,既能在\(yf(x) > 1\)時產生稀疏解提升訓練效率,又能進行機率估計。另外其對於\((yf(x) < -1)\) 樣本的懲罰以線性增長,這意味着受異常點的干擾較少,比較robust。scikit-learn中的SGDClassifier一樣實現了modified huber loss。



最後來張全家福:

從上圖能夠看出上面介紹的這些損失函數均可以看做是0-1損失的單調連續近似函數,而由於這些損失函數一般是凸的連續函數,所以經常使用來代替0-1損失進行優化。它們的相同點是都隨着\(margin \rightarrow -\infty\)而加大懲罰;不一樣點在於,logistic loss和hinge loss都是線性增加,而exponential loss是以指數增加。

值得注意的是上圖中modified huber loss的走向和exponential loss差很少,並不能看出其robust的屬性。其實這和算法時間複雜度同樣,成倍放大了以後才能體現出巨大差別:

/

相關文章
相關標籤/搜索