4.機器學習演算法應用---損失函數
通過前面的幾個專題介紹,相信大家對數據整理,特徵選擇,演算法選擇都有了一個整體的認識。但是選擇演算法後,演算法是如何工作的,如何確定演算法模型對真實數據的擬合效果怎麼樣,這就是損失函數的作用,那損失函數(也叫代價函數)是什麼?本篇帶大家梳理一下常見的損失函數以及損失函數在演算法中的作用?
損失函數(loss function)是用來估量你模型的預測值f(x)與真實值Y的不一致程度,它是一個非負實值函數,通常使用L(Y, f(x))來表示,損失函數越小,模型的魯棒性就越好。損失函數是經驗風險函數的核心部分,也是結構風險函數重要組成部分。模型的結構風險函數包括了經驗風險項和正則項,通常可以表示成如下式子:
通常損失函數由上面公式的兩部分組成,前部分就是計算演算法預測的值和訓練樣本真實標籤之間的距離,不同的距離計算方式代表了不同的計算損失函數的方法。第二部分J(f)代表了正則化選項,當訓練的出函數過於複雜時,可能會導致訓練的參數過擬合了,這時需要引入正則化因子來控制模型的複雜度。防止過擬合的產生。
介紹完損失函數我們介紹一下參數學習的方式,
ωj = ωj - λ ?L(ωj) / ?ωj
通過計算損失函數關於w參數的梯度來逐步調整w參數,使損失函數越來越小,完成模型的訓練,參數達到收斂。
如下圖所示,演算法模型的訓練就是通過利用損失函數還衡量模型是否已經收斂,如果未收斂,通過計算損失函數的梯度,沿著梯度下降的方法不斷不斷調整參數的值,重新計算演算法的輸出。周而復始,不斷迭代直到模型收斂,損失函數達到一個極小值為止。
下面介紹幾種比較主流的損失函數計算方法
(一) 平方損失函數:平方損失函數就是計算演算法的預測結果和真實訓練數據標籤信息之間的差值的平方,計算公式如下:
Y-f(X)表示的是殘差,整個式子表示的是殘差的平方和,而我們的目的就是最小化這個目標函數值(註:該式子未加入正則項),也就是最小化殘差的平方和(residual sum of squares,RSS)。
(二) 交叉熵損失函數
由於平方損失函數在計算梯度的時候,需要計算激活函數的梯度,但是在有些情況下激活函數的梯度值,例如sigmod函數在輸入值不在0值附近時梯度衰減的十分嚴重,如下圖的平方均值損失函數的梯度計算。導致參數的迭代更新非常緩慢,進而影響迭代的收斂速度。
基於此,有人提出一種更換代價函數的方式,具體為交叉熵的激活函數,公式如下:
對交叉熵進行計算梯度,具體計算如下,對參數w和權重的梯度計算如下。
可以看出對參數和梯度的計算中不包括激活函數的梯隊,這樣就解決了激活函數梯度衰減導致的演算法迭代慢,收斂速度不快的問題。
(三) 對數似然函數損失函數
Log對數損失函數的形式為:
損失函數L(Y, P(Y|X))表達的是樣本X在分類Y的情況下,使概率P(Y|X)達到最大值(換言之,就是利用已知的樣本分布,找到最有可能(即最大概率)導致這種分布的參數值;或者說什麼樣的參數才能使我們觀測到目前這組數據的概率最大)。通過這種方法來計算來求導和更新演算法中的參數變數。因為log函數是單調遞增的,所以logP(Y|X)也會達到最大值,因此在前面加上負號之後,最大化P(Y|X)就等價於最小化L了。
將對數損失函數的條件概率進行數學帶入後(具體數學公式可以參考相關資料)發現對數似然函數的數學表達式和交叉熵損失函數是相同的。可以說交叉熵是直接衡量兩個分布,或者說兩個model之間的差異。而似然函數則是解釋以model的輸出為參數的某分布模型對樣本集的解釋程度。因此,可以說這兩者是「同貌不同源」,但是「殊途同歸」啦。
(四) 0-1損失函數和絕對值損失函數
0-1損失函數
絕對值損失函數
以上兩個函數比較好理解,雖然在衡量損失的方面比較簡單粗暴,但是在某種程度上也相當於加入了雜訊因子,導致在迭代計算更新參數時,可以跳出某些局部最優值,在全局探索更好的解。
本篇文章帶大家回顧了一下損失函數,演算法參數迭代的一些知識,其中對目前主流的損失函數進行了介紹。由於後續會講解正則化的相關知識,所以在本文的損失函數中並未討論正則化方面的相關知識。
個人意見,歡迎討論!
推薦閱讀: