機器學習作為一種優化方法,最重要的一點是找到優化的目標函數——損失函數和正則項的組合;有了目標函數的「正確的打開方式」,才能通過合適的機器學習算法求解優化。
通俗來講Loss函數是一種關於fitness的測度(關於數據是否合適模型的匹配度),或者是對於預測是否準確的一種判斷,如果預測和判斷沒有錯誤,則損失函數的值為0;如果有錯誤則會進行一些「懲罰」措施,也可以稱之為代價(風險)函數。藉助文獻中的原話:「the loss function measures 「how bad」 the mistake is. The loss can be interpreted as a penalty or error measure.」回到最開始的機器學習的問題上,對於機器學習一般會包含以下五個部分:
假設空間:如在線性回歸、邏輯回歸以及SVM中的參數
測度函數:最大似然或最小損失
是否有偏和方差的權衡:正則項或MAP最大後驗估計
在假設空間中找到一個好的假設模型:優化模型、全局凸模型等
驗證模型:在測試數據上實現預測,進行交叉驗證
通常我們定義Loss function如下:
圖1 優化目標:損失函數+正則項
通常我們的誤差函數包含以下五種:
黃金標準損失即 0-1 loss(在理想狀態下的判別:下圖中藍色線)
鉸鏈函數即 hinge loss(用於SVM中soft margin情況:下圖中紅色線)
對數函數即 log loss(用於邏輯回歸、交叉熵損失:下圖中黃色線)
平方損失即 square loss(用於線性回歸:下圖中黑色線)
指數損失即 exponential loss(用於boost情況:下圖中綠色線)
下面我們來一一解釋這些loss函數:
1. 0-1 Loss作為最為基本的分類器的評價函數,對於錯誤分類結果的一種計數,比較好理解:
這裡需要引用參考文獻的原文說明一點:
「The cost function induced by the 0-1-loss is the average misclassification error and the cost function induced by the squared loss is the mean squared error (MSE).
However, there are cost functions which cannot be decomposed using a loss function. For example, the area under the curve (AUC). In other words, all loss functions generate a cost function, but not all cost functions must be based on a loss function.「
cost函數可以歸結為0-1Loss平均誤分類的誤差或由square損失的均方誤差(最小二乘法推演);可能在一些問題上有所區分。
2. Hinge Loss作為SVM推導的損失函數去逼近0-1 Loss;很明顯可以看出0-1是理想情況下的損失函數顯式表達,SVM在感知機(Perceptron)的基礎上,通過最大化分類邊界(max margin)去進行分類;
然而對於不可分的情況下,引入soft margin,加入鬆弛,允許分類數據存在異常點:
所以SVM參數中,最重要的就是求解C和hinge loss,不同的情況下soft margin是不一樣的,有待優化。所以最終的hinge loss的形式才會變成:
這樣的近似對於優化來講,就可以用一些凸優化的方法,第一項正則項為凸,hinge loss也是凸函數:
3. Log Loss看形式我們基本可以猜測是從概率的方向得到的;看過經典斯坦福的ML課程的同學都知道,先是講 linear regression 然後引出最小二乘誤差,之後概率角度高斯分布解釋最小誤差。然後講邏輯回歸,使用MLE來引出優化目標是使得所見到的訓練數據出現概率最大。
如果我們在邏輯回歸模型中,利用邏輯回歸sigma函數,帶入判別參數,求出最大似然估計式,其對應的就是我們的最小化的交叉熵函數。關於交叉熵與KL divergence關係,讀者可以自行查找資料驗證。
4. Square Loss就是這裡大家最為熟知的最小二乘法在線性回歸中的推導,最小二乘法是線性回歸的一種,OLS將問題轉化為一個凸優化的問題,假設樣本和噪聲滿足高斯分布,最後通過極大似然推導出最小二乘,將樣本點到擬合最優的回歸線的距離最小,即殘差最小化。
5. Exponential Loss 指數損失可能會有些陌生,形式如下:
用在boosting機制中,本公眾號的經典算法文章中有關於boosting的介紹。可以作為補充閱讀。
其實簡明來講就是通過弱分類器投票進行強分類器的合成,優勢有很多,比如,序列性迭代決策,分類函數線介於square和log,對於過擬合的情況不必擔心,但是計算量會較大。在學習boosting的過程中,會發現通過弱分類器發現的錯誤的會被逐漸削弱,弱分類器在已有分類器分出的錯誤空間上不斷切割(分類空間),如圖:
上圖中,關於迭代停止條件,因為弱分類器的定義就是分類判別概率小於0.5,就像一枚硬幣一樣。大家應該會比較疑惑,關於參數是怎麼得到的,然後去更新每一個弱分類器的權重,下圖會根據定理求出上邊界
參數a表示分類誤差率越小的基本分類器在最終分類器中的作用越大。參考文獻【5】中,July在博文中推導了,作為加法模型的指數損失函數的原型:向前分步學習算法的損失函數證明為指數形式,下圖中,在做相關公式推導的過程中,也是比較直接的通過已經在算法中設定好的指數形式loss函數,根據最小化函數目標,求導得出a的參數值。
當然,現實情景中的損失函數可以進行自定義,但是需要考慮數據本身和未來通過什麼優化的方法去求解更為方便。而且在真正的優化函數中會涉及到正則項,對於特徵篩選和防止過擬合問題也是十分關鍵。需要各位讀者認真領會Loss函數和正則項的意義才能更好地設計出符合實際的優化目標函數。
參考文獻:
【1】https://www.youtube.com/watch?v=BsqqMVjzxCY
【2】https://github.com/JohnLangford/vowpal_wabbit/wiki/Loss-functions
【3】http://image.diku.dk/shark/sphinx_pages/build/html/rest_sources/tutorials/concepts/library_design/losses.html
【4】http://www.cs.cmu.edu/~yandongl/loss.html
【5】http://blog.csdn.net/v_july_v/article/details/40718799