損失函數(Loss Function):是定義在單個樣本上的,是指一個樣本的偏差,度量模型一次預測的好壞。
代價函數(Cost Function)=成本函數=經驗風險:是定義在整個訓練集上的,是全部樣本偏差的平均,也就是全部損失函數值的平均,度量平均意義下模型預測的好壞。
目標函數(Object Function)=結構風險=經驗風險+正則化項=代價函數+正則化項:是指最終須要優化的函數,通常指的是結構風險。
html
正則化項(regularizer)=懲罰項(penalty term)。算法
損失函數度量模型一次預測的好壞,風險函數度量平均意義下模型預測的好壞。機器學習
風險函數分爲兩種,不考慮正則項的是經驗風險(Empirical Risk),考慮過擬合問題,加上正則項的是結構風險(Structural Risk)。函數
是MSE的單個樣本損失,又叫平方損失(squared loss)
性能
是指預測值與實際值差的平方。學習
有時候爲了求導方便,在前面乘上一個1/2。優化
是MAE單個樣本損失,又叫絕對偏差(absolute Loss)
atom
又稱,對數似然損失函數(loglikelihood loss function)。spa
這個損失函數就比較難理解了。事實上,該損失函數用到了極大似然估計的思想。.net
P(Y|X)通俗的解釋就是:在當前模型的基礎上,對於樣本X,其預測值爲Y,也就是預測正確的機率。因爲機率之間的同時知足須要使用乘法,爲了將其轉化爲加法,咱們將其取對數。最後因爲是損失函數,因此預測正確的機率越高,其損失應該越小,前面加了一個負號是由於log函數是單調遞增的,在前面加上負號以後,最大化p(y|x)就等價於最小化L。所以再加個負號取個反。
下面說兩點:
第一點就是對數損失函數很是經常使用。logistic迴歸,softmax迴歸等都用的是這個損失。
第二點就是對於這個公式的理解。這個公式的意思是在樣本x在分類爲y的狀況下,咱們須要讓機率p(y|x)達到最大值。就是利用目前已知的樣本分佈,找到最有可能致使這種分佈的參數值。
其中最經常使用的是平方損失,然而其缺點是對於異常點會施以較大的懲罰,於是不夠robust。
若是有較多異常點,則絕對值損失表現較好,但絕對值損失的缺點是在y−f(x)=0y−f(x)=0處不連續可導,於是不容易優化。
Huber損失是對兩者的綜合,當|y−f(x)||y−f(x)|小於一個事先指定的值δ時,變爲平方損失,大於δ時,則變成相似於絕對值損失,所以也是比較robust的損失函數。
三者的圖形比較以下:
也就是說,當預測錯誤時,損失函數爲1,當預測正確時,損失函數值爲0。該損失函數不考慮預測值和真實值的偏差程度。只要錯誤,就是1。
0-1損失不連續、非凸,優化困難,於是常使用其餘的代理損失函數進行優化。
logistic Loss爲Logistic Regression中使用的損失函數。
證實:http://www.javashuo.com/article/p-pyuhazbj-ey.html
Hinge loss通常分類算法中的損失函數,尤爲是SVM。
hinge loss爲svm中使用的損失函數,hinge loss使得yf(x)>1的樣本損失皆爲0,由此帶來了稀疏解,使得svm僅經過少許的支持向量就能肯定最終超平面。
其中 y=+1或y=−1,f(x)=wx+bf(x)=wx+b ,當爲SVM的線性核時。
推導:http://www.javashuo.com/article/p-pyuhazbj-ey.html
exponential loss爲AdaBoost中使用的損失函數,使用exponential loss能比較方便地利用加法模型推導出AdaBoost算法 (具體推導過程)。
然而其和squared loss同樣,對異常點敏感,不夠robust。
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→−∞而加大懲罰;不一樣點在於,logistic loss和hinge loss都是線性增加,而exponential loss是以指數增加。
值得注意的是上圖中modified huber loss的走向和exponential loss差很少,並不能看出其robust的屬性。其實這和算法時間複雜度同樣,成倍放大了以後才能體現出巨大差別:
均方差 Mean Squared Error (MSE) 損失是機器學習、深度學習迴歸任務中最經常使用的一種損失函數,也稱爲 L2 Loss,又叫最小平方偏差、最小均方偏差、平方損失(square loss)。
平均絕對偏差 Mean Absolute Error (MAE) 是另外一類經常使用的損失函數,也稱爲 L1 Loss,又叫最小絕對值誤差(LAE)。
L2損失相比L1一般能夠更快地收斂。
L1損失對於 outlier 更加健壯,即更加不易受到 outlier 影響。L2損失函數對異常點比較敏感,由於L2將偏差平方化,使得異常點的偏差過大,模型須要大幅度的調整,這樣會犧牲不少正常的樣本。
而L1損失函數因爲導數不連續,可能存在多個解,當數據集有一個微笑的變化,解可能會有一個很大的跳動,L1的解不穩定。
Huber Loss 是一種將 MSE 與 MAE 結合起來,取二者優勢的損失函數,也被稱做 Smooth Mean Absolute Error Loss 。
其原理很簡單,就是在偏差接近 0 時使用 MSE,偏差較大時使用 MAE。
Huber Loss 結合了 MSE 和 MAE 損失,在偏差接近 0 時使用 MSE,使損失函數可導而且梯度更加穩定;在偏差較大時使用 MAE 能夠下降 outlier 的影響,使訓練對 outlier 更加健壯。缺點是須要額外地設置一個 delta超參數。
參考:
https://www.cnblogs.com/lliuye/p/9549881.html
https://blog.csdn.net/andyjkt/article/details/107599424
https://blog.csdn.net/Tianlock/article/details/88232467
http://www.javashuo.com/article/p-pyuhazbj-ey.html
更多損失函數:https://blog.csdn.net/qq_14845119/article/details/80787753【未整理】