機(jī)器學(xué)習(xí)(5)——代價(jià)函數(shù)誤差分析

代價(jià)函數(shù)簡(jiǎn)介

??代價(jià)函數(shù)(Cost Function),通常也被稱為損失函數(shù)(Loss Function)。這類函數(shù)是機(jī)器學(xué)習(xí)乃至整個(gè)數(shù)據(jù)科學(xué)學(xué)科中最為重要的一類函數(shù)模型,它直觀的將數(shù)據(jù)的擬合程度呈現(xiàn)在我們面前。對(duì)于機(jī)器學(xué)習(xí)的目標(biāo),無非也就是最小化誤差,也就是讓代價(jià)函數(shù)最小化。訓(xùn)練模型的過程就是優(yōu)化代價(jià)函數(shù)的過程,代價(jià)函數(shù)對(duì)每個(gè)參數(shù)的偏導(dǎo)數(shù)就是梯度下降中提到的梯度,防止過擬合時(shí)添加的正則化項(xiàng)也是加在代價(jià)函數(shù)后面的。因此我覺得有必要花點(diǎn)時(shí)間進(jìn)行討論一番。
??我們先做一個(gè)代價(jià)函數(shù)的簡(jiǎn)單的定義,代價(jià)函數(shù):假定有樣本數(shù)據(jù)(x_i,y_i),函數(shù)模型為f,參數(shù)為\omega。擬合曲線用f(\omega^Tx)表示。代價(jià)函數(shù)是一個(gè)有點(diǎn)抽象的東西,理論上能反應(yīng)擬合函數(shù)f(\omega^Tx)與真實(shí)值y差異的函數(shù)都可以用來作為我們的代價(jià)函數(shù)。通常代價(jià)函數(shù)寫成C(\theta),不過我們一般會(huì)進(jìn)行求均值,寫成J(\theta)。代價(jià)函數(shù)是一個(gè)關(guān)于\theta的函數(shù),這點(diǎn)很好理解,因?yàn)槲覀冎?,?duì)于給定的算法,誤差期望應(yīng)該是一定的,但是擬合函數(shù)參數(shù)的變化卻會(huì)影響誤差。算法在尋找最優(yōu)參數(shù)的過程,我們記為:
\underset{\theta}{min}J(\theta)

幾種常見的代價(jià)函數(shù)

??平均絕對(duì)誤差(L1誤差函數(shù)): 平均絕對(duì)誤差(MAE)其實(shí)就是類似統(tǒng)計(jì)學(xué)中的標(biāo)準(zhǔn)差,它的具體公式如下:
MAE=\frac{\sum_{m=0}^m{\left |y-y_i \right |}}{m}
??它的圖像:

MAE.png

??均方誤差函數(shù)(L2誤差函數(shù)): 均方誤差函數(shù)(MSE)也就是我們熟知的方差,它廣泛的運(yùn)用在一些線性問題上,下式中底的2,是為了方便求導(dǎo)約去,并無實(shí)際意義,它的公式如下:
MSE=\frac{\sum_{m=0}^m(y-y_i)^2}{2m}

??它的圖像:
MSE.png

??平滑平均絕對(duì)誤差(Huber損失): Huber損失相比于平方損失來說對(duì)于異常值不敏感,但它同樣保持了可微的特性。它基于絕對(duì)誤差但在誤差很小的時(shí)候變成了平方誤差。我們可以使用超參數(shù)
\delta
來調(diào)節(jié)這一誤差的閾值。當(dāng)
\delta\rightarrow 0
它就退化成了MAE,而當(dāng)
\delta\rightarrow\infty
則退化為了MSE,其表達(dá)式如下,是一個(gè)連續(xù)可微的分段函數(shù):
L_\delta(y,f(x))=\left\{\begin{matrix} \frac{1}{2}(y-f(x))^2,&\left |y-f(x)\right|<\delta\\ \delta\left |y-f(x)\right|-\frac{1}{2}\delta^2,&otherwise \end{matrix}\right.

??它的圖像:
Huber.png

??對(duì)于Huber損失來說,
\delta
的選擇十分重要,它決定了模型處理異常值的行為。當(dāng)殘差大于
\delta
時(shí)使用L1損失,很小時(shí)則使用更為合適的L2損失來進(jìn)行優(yōu)化。
??Huber損失函數(shù)克服了MAE和MSE的缺點(diǎn),不僅可以保持損失函數(shù)具有連續(xù)的導(dǎo)數(shù),同時(shí)可以利用MSE梯度隨誤差減小的特性來得到更精確的最小值,也對(duì)異常值具有更好的魯棒性。而Huber損失函數(shù)的良好表現(xiàn)得益于精心訓(xùn)練的超參數(shù)
\delta
。
??Log-Cosh損失函數(shù): Log-Cosh損失函數(shù)是一種比L2更為平滑的損失函數(shù),利用雙曲余弦來計(jì)算預(yù)測(cè)誤差:
L(y,y^p)=\sum_{i=1}^nlog(cosh(y_i^p-y_i))

??它的圖像:
Log-Cosh.png

??它的優(yōu)點(diǎn)在于對(duì)于很小的誤差來說
log(cosh(x))\approx\frac{x^2}{2}
,而對(duì)于很大的誤差則與
|x|-log2
很相近。這意味著log cosh損失函數(shù)可以在擁有MSE優(yōu)點(diǎn)的同時(shí)也不會(huì)受到異常值的太多影響。它擁有Huber的所有優(yōu)點(diǎn),并且在每一個(gè)點(diǎn)都是二次可導(dǎo)的。
??但是Log-cosh損失并不是完美無缺的,它還是會(huì)在很大誤差的情況下梯度和 hessian 變成了常數(shù)。
??交叉熵CrossEntropy代價(jià)函數(shù): 我們?cè)谥耙呀?jīng)極為詳細(xì)的講述過交叉熵的概念了,交叉熵通常用于分類問題上的代價(jià)函數(shù),尤其在邏輯回歸,神經(jīng)網(wǎng)絡(luò)中使用的更多。
J(\omega)=-\frac{1}{m}[\sum_{i=1}^my^ilogh_\omega(x^i)+(1-y^i)log(1-f_\omega(x^i))]

一點(diǎn)比較:

??均方誤差(MSE)在誤差較大點(diǎn)時(shí)的損失遠(yuǎn)大于平均絕對(duì)誤差(MAE),它會(huì)給異常值賦予更大的權(quán)重,模型會(huì)全力減小異常值造成的誤差,從而使得模型的整體表現(xiàn)下降。
??所以當(dāng)訓(xùn)練數(shù)據(jù)中含有較多的異常值時(shí),平均絕對(duì)誤差(MAE)更為有效。當(dāng)我們對(duì)所有觀測(cè)值進(jìn)行處理時(shí),如果利用MSE進(jìn)行優(yōu)化則我們會(huì)得到所有觀測(cè)的均值,而使用MAE則能得到所有觀測(cè)的中值。與均值相比,中值對(duì)于異常值的魯棒性更好,這就意味著平均絕對(duì)誤差對(duì)于異常值有著比均方誤差更好的魯棒性。
??但MAE也存在一個(gè)問題,特別是對(duì)于神經(jīng)網(wǎng)絡(luò)來說,它的梯度在極值點(diǎn)處會(huì)有很大的躍變,及時(shí)很小的損失值也會(huì)長(zhǎng)生很大的誤差,這很不利于學(xué)習(xí)過程。為了解決這個(gè)問題,需要在解決極值點(diǎn)的過程中動(dòng)態(tài)減小學(xué)習(xí)率。MSE在極值點(diǎn)卻有著良好的特性,及時(shí)在固定學(xué)習(xí)率下也能收斂。MSE的梯度隨著損失函數(shù)的減小而減小,這一特性使得它在最后的訓(xùn)練過程中能得到更精確的結(jié)果。

??當(dāng)然還有很多的代價(jià)函數(shù),例如分位數(shù)損失等等,我們?cè)谶@里就不進(jìn)行一一展開講述了,感興趣的讀者可以自行了解。
??下一章,我們將仔細(xì)的講解如何通過梯度進(jìn)行最小化我們的代價(jià)函數(shù)。

Reference

5 Regression Loss Functions All Machine Learners Should Know
MachineLearning CostFunction

我的掘金:WarrenRyan

我的簡(jiǎn)書:WarrenRyan

歡迎關(guān)注我的博客獲得第一時(shí)間更新 https://blog.tity.online

我的Github:StevenEco

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • SpringCloud是一系列框架的有序集合。利用SpringBoot的開發(fā)模式簡(jiǎn)化了分布式系統(tǒng)基礎(chǔ)設(shè)施的開發(fā),如...
    嘻嘻哈哈1155閱讀 667評(píng)論 1 1
  • 二寶出生第三天,一天的生活就是不停的喂奶喂奶,剛有母乳,醫(yī)生不讓給孩子喝奶粉,就是讓孩子吸,哎,女人是奶牛,孩...
    我就是我不一樣的煙火_47ef閱讀 208評(píng)論 0 0
  • 劉同對(duì)我來說,一直是個(gè)特別的存在,我很喜歡他的書,但是從來靜不下心讀完他的一本書,只是喜歡摸著扉頁的感覺。一直以為...
    佑佑佑啊閱讀 216評(píng)論 0 0

友情鏈接更多精彩內(nèi)容