1. 程式人生 > >機器學習常用損失函式

機器學習常用損失函式

原文 : http://www.cnblogs.com/guoyaohua/p/9217206.html

損失函式(loss function)是用來估量模型的預測值f(x)與真實值Y的不一致程度,它是一個非負實值函式,通常使用L(Y, f(x))來表示,損失函式越小,模型的魯棒性就越好。損失函式是經驗風險函式的核心部分,也是結構風險函式重要組成部分。模型的結構風險函式包括了經驗風險項和正則項,通常可以表示成如下式子:

  其中,前面的均值函式表示的是經驗風險函式,L代表的是損失函式,後面的Φ是正則化項(regularizer)或者叫懲罰項(penalty term),它可以是L1,也可以是L2,或者其他的正則函式。整個式子表示的意思是找到使目標函式最小時的θ值

。下面主要列出幾種常見的損失函式。

  理解:損失函式旨在表示出logit和label的差異程度,不同的損失函式有不同的表示意義,也就是在最小化損失函式過程中,logit逼近label的方式不同,得到的結果可能也不同。

一般情況下,softmax和sigmoid使用交叉熵損失(logloss),hingeloss是SVM推匯出的,hingeloss的輸入使用原始logit即可。

一、LogLoss對數損失函式(邏輯迴歸,交叉熵損失)

  有些人可能覺得邏輯迴歸的損失函式就是平方損失,其實並不是。平方損失函式可以通過線性迴歸在假設樣本是高斯分佈的條件下推導得到,而邏輯迴歸得到的並不是平方損失。在邏輯迴歸的推導中,它假設樣本服從伯努利分佈(0-1分佈)

,然後求得滿足該分佈的似然函式,接著取對數求極值等等。而邏輯迴歸並沒有求似然函式的極值,而是把極大化當做是一種思想,進而推匯出它的經驗風險函式為:最小化負的似然函式(即max F(y, f(x)) —> min -F(y, f(x)))。從損失函式的視角來看,它就成了log損失函數了。

log損失函式的標準形式

  剛剛說到,取對數是為了方便計算極大似然估計,因為在MLE(最大似然估計)中,直接求導比較困難,所以通常都是先取對數再求導找極值點。損失函式L(Y, P(Y|X))表達的是樣本X在分類Y的情況下,使概率P(Y|X)達到最大值(換言之,就是利用已知的樣本分佈,找到最有可能(即最大概率)導致這種分佈的引數值;或者說什麼樣的引數才能使我們觀測到目前這組資料的概率最大

)。因為log函式是單調遞增的,所以logP(Y|X)也會達到最大值,因此在前面加上負號之後,最大化P(Y|X)就等價於最小化L了。

  邏輯迴歸的P(Y=y|x)表示式如下(為了將類別標籤y統一為1和0,下面將表示式分開表示):

  將它帶入到上式,通過推導可以得到logistic的損失函式表示式,如下:

  邏輯迴歸最後得到的目標式子如下:

  上面是針對二分類而言的。這裡需要解釋一下:之所以有人認為邏輯迴歸是平方損失,是因為在使用梯度下降來求最優解的時候,它的迭代式子與平方損失求導後的式子非常相似,從而給人一種直觀上的錯覺

這裡有個PDF可以參考一下:Lecture 6: logistic regression.pdf.

  注意:softmax使用的即為交叉熵損失函式,binary_cossentropy為二分類交叉熵損失,categorical_crossentropy為多分類交叉熵損失,當使用多分類交叉熵損失函式時,標籤應該為多分類模式,即使用one-hot編碼的向量。

二、平方損失函式(最小二乘法, Ordinary Least Squares )

  最小二乘法是線性迴歸的一種,最小二乘法(OLS)將問題轉化成了一個凸優化問題。線上性迴歸中,它假設樣本和噪聲都服從高斯分佈(為什麼假設成高斯分佈呢?其實這裡隱藏了一個小知識點,就是中心極限定理,可以參考【central limit theorem】),最後通過極大似然估計(MLE)可以推匯出最小二乘式子。最小二乘的基本原則是:最優擬合直線應該是使各點到迴歸直線的距離和最小的直線,即平方和最小。換言之,OLS是基於距離的,而這個距離就是我們用的最多的歐幾里得距離。為什麼它會選擇使用歐式距離作為誤差度量呢(即Mean squared error, MSE),主要有以下幾個原因:

  • 簡單,計算方便;
  • 歐氏距離是一種很好的相似性度量標準;
  • 在不同的表示域變換後特徵性質不變。

平方損失(Square loss)的標準形式如下:

當樣本個數為n時,此時的損失函式變為:

Y-f(X)表示的是殘差,整個式子表示的是殘差的平方和,而我們的目的就是最小化這個目標函式值(注:該式子未加入正則項),也就是最小化殘差的平方和(residual sum of squares,RSS)

而在實際應用中,通常會使用均方差(MSE)作為一項衡量指標,公式如下:

上面提到了線性迴歸,這裡額外補充一句,我們通常說的線性有兩種情況,一種是因變數y是自變數x的線性函式,一種是因變數y是引數α的線性函式。在機器學習中,通常指的都是後一種情況。

三、指數損失函式(Adaboost)

學過Adaboost演算法的人都知道,它是前向分步加法演算法的特例,是一個加和模型,損失函式就是指數函式。在Adaboost中,經過m此迭代之後,可以得到fm(x):

Adaboost每次迭代時的目的是為了找到最小化下列式子時的引數α 和G:

而指數損失函式(exp-loss)的標準形式如下

可以看出,Adaboost的目標式子就是指數損失,在給定n個樣本的情況下,Adaboost的損失函式為:

關於Adaboost的推導,可以參考Wikipedia:AdaBoost或者《統計學習方法》P145.

四、Hinge損失函式(SVM)

在機器學習演算法中,hinge損失函式和SVM是息息相關的。在線性支援向量機中,最優化問題可以等價於下列式子:

下面來對式子做個變形,令:

於是,原式就變成了:

如若取λ=1/(2C),式子就可以表示成:

可以看出,該式子與下式非常相似:

前半部分中的 l 就是hinge損失函式,而後面相當於L2正則項。

Hinge 損失函式的標準形式

可以看出,當|y|>=1時,L(y)=0。

更多內容,參考Hinge-loss

補充一下:在libsvm中一共有4中核函式可以選擇,對應的是-t引數分別是:

  • 0-線性核;
  • 1-多項式核;
  • 2-RBF核;
  • 3-sigmoid核。

五、其它損失函式

除了以上這幾種損失函式,常用的還有:

0-1損失函式

絕對值損失函式

下面來看看幾種損失函式的視覺化影象,對著圖看看橫座標,看看縱座標,再看看每條線都表示什麼損失函式,多看幾次好好消化消化。

六、Keras / TensorFlow 中常用 Cost Function 總結

  • mean_squared_error或mse

  • mean_absolute_error或mae

  • mean_absolute_percentage_error或mape

  • mean_squared_logarithmic_error或msle

  • squared_hinge

  • hinge

  • categorical_hinge

  • binary_crossentropy(亦稱作對數損失,logloss)

  • logcosh

  • categorical_crossentropy:亦稱作多類的對數損失,注意使用該目標函式時,需要將標籤轉化為形如(nb_samples, nb_classes)的二值序列

  • sparse_categorical_crossentrop:如上,但接受稀疏標籤。注意,使用該函式時仍然需要你的標籤與輸出值的維度相同,你可能需要在標籤資料上增加一個維度:np.expand_dims(y,-1)

  • kullback_leibler_divergence:從預測值概率分佈Q到真值概率分佈P的資訊增益,用以度量兩個分佈的差異.

  • poisson:即(predictions - targets * log(predictions))的均值

  • cosine_proximity:即預測值與真實標籤的餘弦距離平均值的相反數

  需要記住的是:引數越多,模型越複雜,而越複雜的模型越容易過擬合。過擬合就是說模型在訓練資料上的效果遠遠好於在測試集上的效能。此時可以考慮正則化,通過設定正則項前面的hyper parameter,來權衡損失函式和正則項,減小引數規模,達到模型簡化的目的,從而使模型具有更好的泛化能力。