色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

不同種類的損失函數以及它們的作用

MqC7_CAAI_1981 ? 來源:未知 ? 作者:李倩 ? 2018-06-29 10:31 ? 次閱讀

“損失函數”是機器學習優化中至關重要的一部分。L1、L2損失函數相信大多數人都早已不陌生。那你了解Huber損失、Log-Cosh損失、以及常用于計算預測區間的分位數損失么?這些可都是機器學習大牛最常用的回歸損失函數哦!

機器學習中所有的算法都需要最大化或最小化一個函數,這個函數被稱為“目標函數”。其中,我們一般把最小化的一類函數,稱為“損失函數”。它能根據預測結果,衡量出模型預測能力的好壞。

在實際應用中,選取損失函數會受到諸多因素的制約,比如是否有異常值、機器學習算法的選擇、梯度下降的時間復雜度、求導的難易程度以及預測值的置信度等等。因此,不存在一種損失函數適用于處理所有類型的數據。這篇文章就講介紹不同種類的損失函數以及它們的作用。

損失函數大致可分為兩類:分類問題的損失函數和回歸問題的損失函數。在這篇文章中,我將著重介紹回歸損失。

本文出現的代碼和圖表我們都妥妥保存在這兒了:

https://nbviewer.jupyter.org/github/groverpr/Machine-Learning/blob/master/notebooks/05_Loss_Functions.ipynb

分類、回歸問題損失函數對比

均方誤差

均方誤差(MSE)是最常用的回歸損失函數,計算方法是求預測值與真實值之間距離的平方和,公式如圖。

下圖是MSE函數的圖像,其中目標值是100,預測值的范圍從-10000到10000,Y軸代表的MSE取值范圍是從0到正無窮,并且在預測值為100處達到最小。

MSE損失(Y軸)-預測值(X軸)

平均絕對值誤差(也稱L1損失)

平均絕對誤差(MAE)是另一種用于回歸模型的損失函數。MAE是目標值和預測值之差的絕對值之和。其只衡量了預測值誤差的平均模長,而不考慮方向,取值范圍也是從0到正無窮(如果考慮方向,則是殘差/誤差的總和——平均偏差(MBE))。

MAE損失(Y軸)-預測值(X軸)

MSE(L2損失)與MAE(L1損失)的比較

簡單來說,MSE計算簡便,但MAE對異常點有更好的魯棒性。下面就來介紹導致二者差異的原因。

訓練一個機器學習模型時,我們的目標就是找到損失函數達到極小值的點。當預測值等于真實值時,這兩種函數都能達到最小。

下面是這兩種損失函數的python代碼。你可以自己編寫函數,也可以使用sklearn內置的函數。

# true: Array of true target variable# pred: Array of predictionsdef mse(true, pred): return np.sum((true - pred)**2)def mae(true, pred): return np.sum(np.abs(true - pred)) # also available in sklearnfrom sklearn.metrics import mean_squared_errorfrom sklearn.metrics import mean_absolute_error

下面讓我們觀察MAE和RMSE(即MSE的平方根,同MAE在同一量級中)在兩個例子中的計算結果。第一個例子中,預測值和真實值很接近,而且誤差的方差也較小。第二個例子中,因為存在一個異常點,而導致誤差非常大。

左圖:誤差比較接近 右圖:有一個誤差遠大于其他誤差

從圖中可以知道什么?應當如何選擇損失函數?

MSE對誤差取了平方(令e=真實值-預測值),因此若e>1,則MSE會進一步增大誤差。如果數據中存在異常點,那么e值就會很大,而e2則會遠大于|e|。

因此,相對于使用MAE計算損失,使用MSE的模型會賦予異常點更大的權重。在第二個例子中,用RMSE計算損失的模型會以犧牲了其他樣本的誤差為代價,朝著減小異常點誤差的方向更新。然而這就會降低模型的整體性能。

如果訓練數據被異常點所污染,那么MAE損失就更好用(比如,在訓練數據中存在大量錯誤的反例和正例標記,但是在測試集中沒有這個問題)。

直觀上可以這樣理解:如果我們最小化MSE來對所有的樣本點只給出一個預測值,那么這個值一定是所有目標值的平均值。但如果是最小化MAE,那么這個值,則會是所有樣本點目標值的中位數。眾所周知,對異常值而言,中位數比均值更加魯棒,因此MAE對于異常值也比MSE更穩定。

然而MAE存在一個嚴重的問題(特別是對于神經網絡):更新的梯度始終相同,也就是說,即使對于很小的損失值,梯度也很大。這樣不利于模型的學習。為了解決這個缺陷,我們可以使用變化的學習率,在損失接近最小值時降低學習率。

而MSE在這種情況下的表現就很好,即便使用固定的學習率也可以有效收斂。MSE損失的梯度隨損失增大而增大,而損失趨于0時則會減小。這使得在訓練結束時,使用MSE模型的結果會更精確。

根據不同情況選擇損失函數

如果異常點代表在商業中很重要的異常情況,并且需要被檢測出來,則應選用MSE損失函數。相反,如果只把異常值當作受損數據,則應選用MAE損失函數。

推薦大家讀一下這篇文章,文中比較了分別使用L1、L2損失的回歸模型在有無異常值時的表現。

文章網址:

http://rishy.github.io/ml/2015/07/28/l1-vs-l2-loss/

這里L1損失和L2損失只是MAE和MSE的別稱。

總而言之,處理異常點時,L1損失函數更穩定,但它的導數不連續,因此求解效率較低。L2損失函數對異常點更敏感,但通過令其導數為0,可以得到更穩定的封閉解。

二者兼有的問題是:在某些情況下,上述兩種損失函數都不能滿足需求。例如,若數據中90%的樣本對應的目標值為150,剩下10%在0到30之間。那么使用MAE作為損失函數的模型可能會忽視10%的異常點,而對所有樣本的預測值都為150。

這是因為模型會按中位數來預測。而使用MSE的模型則會給出很多介于0到30的預測值,因為模型會向異常點偏移。上述兩種結果在許多商業場景中都是不可取的。

這些情況下應該怎么辦呢?最簡單的辦法是對目標變量進行變換。而另一種辦法則是換一個損失函數,這就引出了下面要講的第三種損失函數,即Huber損失函數。

Huber損失,平滑的平均絕對誤差

Huber損失對數據中的異常點沒有平方誤差損失那么敏感。它在0也可微分。本質上,Huber損失是絕對誤差,只是在誤差很小時,就變為平方誤差。誤差降到多小時變為二次誤差由超參數δ(delta)來控制。當Huber損失在[0-δ,0+δ]之間時,等價為MSE,而在[-∞,δ]和[δ,+∞]時為MAE。

Huber損失(Y軸)與預測值(X軸)圖示。真值取0

這里超參數delta的選擇非常重要,因為這決定了你對與異常點的定義。當殘差大于delta,應當采用L1(對較大的異常值不那么敏感)來最小化,而殘差小于超參數,則用L2來最小化。

為何要使用Huber損失?

使用MAE訓練神經網絡最大的一個問題就是不變的大梯度,這可能導致在使用梯度下降快要結束時,錯過了最小點。而對于MSE,梯度會隨著損失的減小而減小,使結果更加精確。

在這種情況下,Huber損失就非常有用。它會由于梯度的減小而落在最小值附近。比起MSE,它對異常點更加魯棒。因此,Huber損失結合了MSE和MAE的優點。但是,Huber損失的問題是我們可能需要不斷調整超參數delta。

Log-Cosh損失

Log-cosh是另一種應用于回歸問題中的,且比L2更平滑的的損失函數。它的計算方式是預測誤差的雙曲余弦的對數。

Log-cosh損失(Y軸)與預測值(X軸)圖示。真值取0

優點:對于較小的x,log(cosh(x))近似等于(x^2)/2,對于較大的x,近似等于abs(x)-log(2)。這意味著‘logcosh’基本類似于均方誤差,但不易受到異常點的影響。它具有Huber損失所有的優點,但不同于Huber損失的是,Log-cosh二階處處可微。

為什么需要二階導數?許多機器學習模型如XGBoost,就是采用牛頓法來尋找最優點。而牛頓法就需要求解二階導數(Hessian)。因此對于諸如XGBoost這類機器學習框架,損失函數的二階可微是很有必要的。

XgBoost中使用的目標函數。注意對一階和二階導數的依賴性

但Log-cosh損失也并非完美,其仍存在某些問題。比如誤差很大的話,一階梯度和Hessian會變成定值,這就導致XGBoost出現缺少分裂點的情況。

Huber和Log-cosh損失函數的Python代碼:

# huber lossdef huber(true, pred, delta): loss = np.where(np.abs(true-pred) < delta , 0.5*((true-pred)**2), delta*np.abs(true - pred) - 0.5*(delta**2)) ? ?return np.sum(loss)# log cosh lossdef logcosh(true, pred): ? ?loss = np.log(np.cosh(pred - true))return np.sum(loss)

分位數損失

在大多數現實世界預測問題中,我們通常希望了解預測中的不確定性。清楚預測的范圍而非僅是估計點,對許多商業問題的決策很有幫助。

當我們更關注區間預測而不僅是點預測時,分位數損失函數就很有用。使用最小二乘回歸進行區間預測,基于的假設是殘差(y-y_hat)是獨立變量,且方差保持不變。

一旦違背了這條假設,那么線性回歸模型就不成立。但是我們也不能因此就認為使用非線性函數或基于樹的模型更好,而放棄將線性回歸模型作為基線方法。這時,分位數損失和分位數回歸就派上用場了,因為即便對于具有變化方差或非正態分布的殘差,基于分位數損失的回歸也能給出合理的預測區間。

下面讓我們看一個實際的例子,以便更好地理解基于分位數損失的回歸是如何對異方差數據起作用的。

分位數回歸與最小二乘回歸

左:b/wX1和Y為線性關系。具有恒定的殘差方差。右:b/wX2和Y為線性關系,但Y的方差隨著X2增加。(異方差)

橙線表示兩種情況下OLS的估值

分位數回歸。虛線表示基于0.05和0.95分位數損失函數的回歸

附上圖中所示分位數回歸的代碼:

https://github.com/groverpr/Machine-Learning/blob/master/notebooks/09_Quantile_Regression.ipynb

理解分位數損失函數

如何選取合適的分位值取決于我們對正誤差和反誤差的重視程度。損失函數通過分位值(γ)對高估和低估給予不同的懲罰。例如,當分位數損失函數γ=0.25時,對高估的懲罰更大,使得預測值略低于中值。

γ是所需的分位數,其值介于0和1之間。

分位數損失(Y軸)與預測值(X軸)圖示。Y的真值為0

這個損失函數也可以在神經網絡或基于樹的模型中計算預測區間。以下是用Sklearn實現梯度提升樹回歸模型的示例。

使用分位數損失(梯度提升回歸器)預測區間

上圖表明:在sklearn庫的梯度提升回歸中使用分位數損失可以得到90%的預測區間。其中上限為γ=0.95,下限為γ=0.05。

對比研究

為了證明上述所有損失函數的特點,讓我們來一起看一個對比研究。首先,我們建立了一個從sinc(x)函數中采樣得到的數據集,并引入了兩項人為噪聲:高斯噪聲分量ε?N(0,σ2)和脈沖噪聲分量ξ?Bern(p)。

加入脈沖噪聲是為了說明模型的魯棒效果。以下是使用不同損失函數擬合GBM回歸器的結果。

連續損失函數:(A)MSE損失函數;(B)MAE損失函數;(C)Huber損失函數;(D)分位數損失函數。將一個平滑的GBM擬合成有噪聲的sinc(x)數據的示例:(E)原始sinc(x)函數;(F)具有MSE和MAE損失的平滑GBM;(G)具有Huber損失的平滑GBM,且δ={4,2,1};(H)具有分位數損失的平滑的GBM,且α={0.5,0.1,0.9}。

仿真對比的一些觀察結果:

MAE損失模型的預測結果受脈沖噪聲的影響較小,而MSE損失函數的預測結果受此影響略有偏移。

Huber損失模型預測結果對所選超參數不敏感。

分位數損失模型在合適的置信水平下能給出很好的估計。

最后,讓我們將所有損失函數都放進一張圖,我們就得到了下面這張漂亮的圖片!它們的區別是不是一目了然了呢~

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 函數
    +關注

    關注

    3

    文章

    4344

    瀏覽量

    62864
  • 機器學習
    +關注

    關注

    66

    文章

    8437

    瀏覽量

    132895

原文標題:機器學習大牛最常用的5個回歸損失函數,你知道幾個?

文章出處:【微信號:CAAI-1981,微信公眾號:中國人工智能學會】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    verilog常用系統函數以及例子

    verilog常用系統函數以及例子
    發表于 08-15 15:49

    TensorFlow損失函數(定義和使用)詳解

    正如前面所討論的,在回歸中定義了損失函數或目標函數,其目的是找到使損失最小化的系數。本節將介紹如何在 TensorFlow 中定義損失
    發表于 07-28 14:38

    無法獲知TIVA里到底有什么函數以及這些函數的用法?

    初學TIVA,有一個地方讓我感到頭疼,就是無法獲知TIVA里到底有什么函數以及這些函數的用法(不需要源代碼,只想知道每一個函數的具體用途),不知道論壇里的大神有沒有相關的資源,可否發一份給我。我的郵箱是1431839557@qq
    發表于 08-26 08:34

    陀螺儀工作原理以及同種類陀螺儀之間的差異

    文件第四步 編譯并下載,觀察實驗現象【思考題】1、選擇題2、簡答題【實驗目的】熟悉陀螺儀工作原理,了解不同種類陀螺儀之間的差異;熟悉MPU6050的輸出形式,熟悉MPU6050的通信方法;掌握S...
    發表于 08-06 06:08

    USART串口接收數據函數以及程序

    今天完善了USART串口接收數據函數以及程序,在每個USART外設上都添加了串口空閑中斷函數。其步驟如下:添加總線空閑中斷功能的優點:a)可以準確地判斷出串口數據是否接收完畢,不需要額外添加
    發表于 08-13 06:29

    如何識別不同種類的電阻?不同種類電阻的特點是什么?

    在前一篇文章中,我們了解了與電阻器相關的各種性能指標。現在,讓我們了解一下不同類型的電阻,以及它們是如何在各種性能指標中得分的。這項評估將有助于確定不同類型電阻器對特定電子應用的適用性和相關性
    發表于 04-01 10:46

    RT-Thread提供了怎樣的定時器操作函數以及如何使用它們

    。具體定義如下:定時器管理前面介紹了定時器相關的理論知識,那么 RT-Thread 提供了怎樣的定時器操作函數以及如何使用它們呢?RT-Thread 提供的定時器相關的操作包括:創建/初始化定時器啟動
    發表于 04-02 11:41

    同種類的二極管如何替換

    同種類的二極管如何替換 1、檢波二極管的代換  檢波二極管損壞后,若無
    發表于 01-13 14:44 ?1w次閱讀

    同種類激光在醫療行業的應用分析

    隨著激光醫 療的越來越廣泛,人們對于各種激光醫療的種類看的眼花繚亂,被一些廣告忽悠的以為一種激光就是萬能的,能夠治療各種疾病。事實卻是各種不同種類的激光所對 應的激光醫療是有所不同的。不同波長,不同形式的激光所擅長的醫療方面也是一樣的。下面就針對一些
    發表于 02-13 02:40 ?3922次閱讀

    基于Python 函數基礎、參數以及高級用法的解析

    簡單地說,一個函數就是一組Python語句的組合,它們可以在程序中運行一次或多次運行。Python中的函數在其他語言中也叫做過程或子例程,那么這些被包裝起來的語句通過一個函數名稱來調用
    的頭像 發表于 02-01 15:53 ?4576次閱讀
    基于Python <b class='flag-5'>函數</b>基礎、參<b class='flag-5'>數以及</b>高級用法的解析

    計算機視覺的損失函數是什么?

    損失函數在模型的性能中起著關鍵作用。選擇正確的損失函數可以幫助你的模型學習如何將注意力集中在數據中的正確特征集合上,從而獲得最優和更快的收斂
    的頭像 發表于 03-13 16:30 ?3592次閱讀
    計算機視覺的<b class='flag-5'>損失</b><b class='flag-5'>函數</b>是什么?

    損失函數的簡要介紹

    例如,你有一個神經網絡,通過該網絡可以獲取一些與房屋有關的數據并預測其價格。在這種情況下,你可以使用MSE(均方誤差)損失。基本上,在輸出為實數的情況下,應使用此損失函數
    的頭像 發表于 04-17 10:01 ?3650次閱讀

    表示學習中7大損失函數的發展歷程及設計思路

    損失函數的發展歷程,以及它們演進過程中的設計思路,主要包括contrastive loss、triplet loss、n-pair loss、infoNce loss、focal l
    的頭像 發表于 07-08 14:23 ?2257次閱讀

    靜電測試儀的不同種類在不同領域的運用

    靜電測試儀的不同種類在不同領域的運用,比如說:電視、廣播、電影等。這些都是需要使用到它們的地方。
    的頭像 發表于 04-13 10:12 ?1388次閱讀
    靜電測試儀的不<b class='flag-5'>同種類</b>在不同領域的運用

    RNN的損失函數與優化算法解析

    RNN的損失函數 RNN(循環神經網絡)在處理序列數據的過程中,損失函數(Loss Function)扮演著重要的角色,它可以測量模型在訓練中的表現,并推動模型朝著正確的方向學習。RN
    的頭像 發表于 11-15 10:16 ?560次閱讀
    主站蜘蛛池模板: 全部老头和老太XXXXX| 日韩精品欧美在线视频在线| 日本三级床震| 91免费精品国自产拍在线可以看| 黑色丝袜在线观看| 亚洲国语在线视频手机在线| 国产精品久久精品视| 偷柏自拍亚洲综合在线| 国产成人精品免费青青草原app| 色女仆影院| 国产成人精品免费视频软件| 卫生间被教官做好爽HH视频| 国产区精品综合在线| 亚洲免费黄色| 久久频这里精品99香蕉久网址| 寂寞夜晚在线视频观看| 性做久久久久免费观看| 99爱在线精品视频免费观看9| 国产一区91| 亚洲无遮挡| 麻豆高潮AV久久久久久久| 99麻豆精品国产人妻无码| 日本wwwhdsex69| 国产电影尺度| 亚洲视频在线观看视频| 秘密教学26我们在做一次吧免费| bl高h文合集| 婷婷综合久久狠狠色| 久久精品免费看网站| beeg日本老师| 贤妻良母电影日本| 久久人妻熟女中文字幕AV蜜芽| 99精品AV无码一区二区| 日日色在线影院| 好紧小嫩嫩水的10p| 1000视频在线播放| 久久性生大片免费观看性| 99热在线视频| 午夜十八岁禁| 国产欧美另类久久久精品免费| 一攻多受高h大总攻|