在機器學習三步走中,其中最重要的就是第二步找到用於衡量模型好壞的方法,也就是損失函式,通過求解最小化損失,從而求得模型的引數。前面分別對線性迴歸、LR以及實戰部分的SVM、決策樹以及整合學習演算法進行了概述,其中都用到了不同的損失函式,今天在這裡對機器學習中常見的損失函式進行一個總結。
常見損失函式總結
上面說到,損失函式的選擇對於模型訓練起到了至關重要的作用,在不同的演算法中往往有著不同的損失函式。
甚至有時可能需要根據具體應用場景自定義損失函式,比如預測某個商品的銷量,預測結果將直接影響利潤,如多預測一個少賺1元,而少預測一個少賺10元,那麼此時用均方誤差損失函式就不太恰當。
這裡暫時不說自定義的損失函式,主要是對機器學習中一些常見的損失函式進行一個總結。
1.均方誤差損失函式(Mean Squared Error,MSE)
均方誤差損失函式是迴歸問題中(包括神經網路中也可以使用,但)最常見的損失函式,用於衡量樣本真實值與預測值之間的差距,損失函式公式線上性迴歸中已經給出,這裡再看下:
通過最小化損失函式,求得w,b即為模型的引數。前面說到求解方法有解析解即最小二乘法,以及梯度下降的方法,這裡就不再贅述。
2.均方根誤差損失函式(Root Mean Squard Error,RMSE)
均方根誤差損失就是均方誤差損失函式的平方根,公式如下:
均方根誤差損失與均方誤差損失函式在效果上是一樣的,只不過如果對於均方誤差數量級過大時,可以通過開方更好地描述資料,比較好理解。
3.絕對值損失(Mean Absolute Error)
公式如下,跟均方誤差損失差不多,也不再解釋了
4.對數損失(Log損失)
對數損失也稱為對數似然損失,前面關於LR的推導過程中,當給定x,其屬於y的概率表示為:
期望對所有的樣本都能夠正確分類,則有:
、
然後對L兩邊取對數,注意這裡是最大化。那麼帶入上式,然後兩邊再取負號,就變成最小化了,最終得到對數損失函式的形式為:
這裡還要說一下,其實對數損失函式還有另外一種形式,在GBDT中利用GBDT處理分類問題時提到過,注意上面的類別取值為{0,1},我們只需將取值設為{-1,1},就可得到如下形式的對數損失函式:
5.交叉熵損失函式(cross_entropy loss)
交叉熵損失和對數損失其實是一樣的(很多資料中有提到),二者的表示式在本質上是一致的。在邏輯迴歸中說到,LR的損失函式就是交叉熵損失函式,不過是一種二值(二分類)的交叉熵損失。
稍後會給出交叉熵損失的公式,這裡既然提到了交叉熵,就順便說一下交叉熵的概念。參考:https://blog.csdn.net/b1055077005/article/details/100152102
交叉熵
交叉熵來源於資訊理論,是資訊理論中一個重要概念,交叉熵是用來衡量兩個概率分佈之間的差異程度。值越小,差異越小,兩個分佈就越相似。
先來看一下幾個交叉熵的幾個前置理論概念。
(1)資訊量
資訊量是用來消除資訊不確定的概念,用於衡量資訊所含資訊量大小的一個東西,比如“太陽從東邊升起”這句話,由於太陽本身就是從東邊升起的,這句話的不確定為0,相當於一句廢話。
因此,資訊量是與事件的概率成反比的,公式為:
(2)資訊熵
在決策樹的開篇說到資訊熵的概念,資訊熵是資訊量的期望值,而資訊量與概率成反比,那麼資訊熵的公式如下:
(3)KL散度(相對熵)
相對熵(KL散度)是衡量兩個概率分佈之間的差異性的指標,假設同一隨機變數的兩個獨立的分佈P(x)和Q(x),那麼相對熵(KL散度)的公式為:
在機器學習中常常用P(x)表示樣本真實的分佈,Q(x)表示預測的分佈,通過比較二者的分佈,使其越接近越好。比如對於一個三分類,真實值y=[1,0,0],模型所預測的結為[0.7,0.2,0.1],那麼KL散度計算為:
KL散度越小,說明兩個分佈越接近。
接下來我們將上述的KL散度公式進行展開:
可以看出,前半部分即為資訊熵,這個後半部分稱為交叉熵,於是交叉熵的公式為:
那麼KL散度=交叉熵-資訊熵。
在機器學習中,由於P(x)是原本樣本的真實標籤,其分佈是已知的,那麼在KL散度中資訊熵是確定的,因此只需後一項,即交叉熵來確定兩個分佈的差異程度就可以了。
KL散度越小,兩個分佈就越接近,又因為KL散度等於交叉熵減去一個常量,因此,在機器學習中,只需要交叉熵來作為損失函式就可以了,只需要最小化交叉熵損失函式即可。
綜上,交叉熵損失函式的公式即為:
根據上面舉的那個例子,我們知道,交叉熵損失常用在多分類當中。
因此對於對數損失是一種特殊的二分交叉熵損失的形式,交叉熵常用於多分類中,對數損失用於多分類也叫交叉熵損失(cross_entropy),其實二者本質上是一樣的,只不過所用的習慣不同。
6.指數損失
指數損失在後來新增AdaBoost推導部分的時候有提到,AdaBoost就是使用的指數損失,具體為什麼AdaBoost要用指數損失,在李航《統計學習方法》8.3節中有詳細證明,比較複雜,就不說了。
指數損失公式如下:
式中可以看出,當真實值y與預測值f(x)同號時,損失是比較小的,而當y與預測值f(x)異號時,則懲罰急劇增大,對誤分類的懲罰增大,從而提升誤分類樣本的權重。
因此指數損失對於噪聲點的樣本比較敏感,一旦分錯,由於Boost方法屬於序列的方式,因此會干擾後面的學習效果,這也是AdaBoost的一個缺點。
7.Hinge Loss
這個損失之前在SVM中也提到過,說當採用梯度下降的演算法進行求解時需要定義出一個當樣本被正確分類,且確定性較強時,損失為0,否則,損失就不為0。那麼此時就需要用到Hinge Loss了,其影像為:
可以看到,即樣本標籤y為{-1,1},預測值y'當其大於1或者小於-1時,損失函式為0,對於y'∈[-1,1]時,損失不為0。
其公式為:
y是真實值,y'是預測值
在SVM中,當樣本被確定正確分類,即預測結果大於1或者小於-1(注意這裡並不是說只要大於1或者小於-1就行,而是要根據實際標籤來說的)時,損失為0,就不再關心這些點了,而對於在[-1,1]之間的,或者分錯的點會驅使“直線”進行移動,如圖所示:
上圖所示,如果分割超平面誤分類,則Hinge loss大於0。Hinge loss驅動分割超平面作出調整。 如果分割超平面距離支援向量的距離小於1,則Hinge loss大於0,且就算分離超平面滿足最大間隔,Hinge loss仍大於0。
因此Hinge Loss的精髓在於,對於確定性強的點(被正確分類,且距離分隔超平面距離大於1)進行過濾,而只關心那些誤分類的和“支援向量”。
多分類中Hinge Loss
在SVM的多分類中,同樣也使用Hinge Loss作為損失函式,不過稍微有些改變:
舉個例子,加入有三張圖片:貓、車和青蛙,通過SVM的輸出值如下:
那麼根據上面多分類的Hinge Loss的計算方法:首先計算第一個樣本的損失:
然後依次求出第二個第三個樣本的損失,進行求和並平均:
參考資料CS231n 2016 通關 第三章-SVM與Softmax
後面關於SVM這一部分在看完李宏毅老師從另一個角度的講解後,以及structure SVM有關內容,後面會單獨再開一片進行總結,這裡就暫時不進行討論了。
下面圖片來源於網路,不是很清晰,也算一個總結,後續如果遇到新的會再進行新增。
後記:
上面即為在機器學習中的常見的一些損失函式,其實並不是很全,只是目前為止學習到的,就先總結到這裡,算是對之前的演算法進行一個回顧。
在實際應用中要根據所使用的的演算法的框架,找到所要使用的損失函式的引數,一般不同的框架下,其引數的欄位值也不同,這隻能在實際用到時再取說明了;
其實有時經常需要具體根據應用場景去自定義或者對原始的損失函式進行修改。
這一部分內容暫時不是很多,可能有些東西沒有想到,後面有什麼想起來的或者遇到後再回來新增,排版有點隨意~下一更就回到深度學習中的一些技巧。