【深度學習】Huber Loss詳解

文章目錄

  • 1. Huber Loss 原理詳解
  • 2. Pytorch 代碼詳解
  • 3.與 MSELoss、MAELoss 區別及各自優缺點
    • 3.1 MSELoss 均方誤差損失
    • 3.2 MAELoss 平均絕對誤差損失
    • 3.3 Huber Loss
  • 4. 總結
    • 4.1 優化平滑
    • 4.2 梯度較好
    • 4.3 為什么說 MSE 是平滑的

1. Huber Loss 原理詳解

Huber Loss 是一種結合了 MSE(均方誤差)與 MAE (平均絕對誤差)的損失函數,旨在克服兩者的缺點。對于小誤差使用 MSE,對于大誤差使用 MAE,因此在處理回歸問題時,既能夠平滑訓練過程,有能減少異常值的影響

Huber Loss 函數的數學公式定義如下:

L δ ( y , y ^ ) = { 1 2 ( y ? y ^ ) 2 , if? ∣ y ? y ^ ∣ ≤ δ δ ∣ y ? y ^ ∣ ? 1 2 δ 2 , otherwise L_{\delta}(y, \hat{y}) = \begin{cases} \frac{1}{2} (y - \hat{y})^2, & \text{if } |y - \hat{y}| \leq \delta \\ \delta |y - \hat{y}| - \frac{1}{2} \delta^2, & \text{otherwise} \end{cases} Lδ?(y,y^?)={21?(y?y^?)2,δy?y^??21?δ2,?if?y?y^?δotherwise?

  • y y y 為真實值
  • y ^ \hat y y^? 為預測值
  • δ \delta δ 是一個閾值,控制誤差大小的界限,當誤差小于 δ \delta δ 時使用 M S E MSE MSE,當誤差大于 δ \delta δ 時使用 M A E MAE MAE

Huber Loss 的特點:

  • 平滑性:當誤差小于 δ \delta δ ,Huber Loss 與 MSE Loss一樣,平方誤差讓梯度變平滑,有助于快速收斂
  • 對異常值的魯棒性:當誤差大于 δ \delta δ 時,使用 MAE 來減小異常值對模型的影響,使得 Huber Loss 對大的偏差不那么敏感
  • 可調性: δ \delta δ 是一個超參數,可以根據需求調整,平衡 MSE 和 MAE 效果

2. Pytorch 代碼詳解

torch.nn.HuberLoss 官方文檔: https://pytorch.org/docs/stable/generated/torch.nn.HuberLoss.html
Huber Loss 函數定義:

class torch.nn.HuberLoss(reduction='mean', delta=1.0)

創建一個標準,如果逐元素誤差的絕對值低于 delta,則使用平方項,否則使用 delta 縮放的 L1 項。此損失結合了 L1Loss 和 MSELoss 的優點。delta 縮放的 L1 區域使損失對異常值的敏感度低于 MSELoss,而 L2 區域在 L1Loss 附近提供了平滑度。

對于大小為 N 的批次,未經約簡的損失可以描述為:
l ( x , y ) = L = { l 1 , . . . , l N } T l(x,y) = L=\{ l_1,...,l_N\}^T l(x,y)=L={l1?,...,lN?}T

其中:
l n = { 0.5 ( x n ? y n ) 2 , 如果 ∣ x n ? y n ∣ < d e l t a d e l t a ( ∣ x n ? y n ∣ ? 0.5 ? d e l t a ) ,否則 l_n = \begin{cases} 0.5(x_n - y_n)^2 , 如果 |x_n-y_n| < delta \\ delta(|x_n-y_n|-0.5*delta), 否則 \end{cases} ln?={0.5(xn??yn?)2,如果xn??yn?<deltadelta(xn??yn??0.5?delta),否則?

如果reduction不為 none 則:

l ( x , y ) = { m e a n ( L ) , 如果 r e d u c t i o n = m e a n ; s u m ( L ) , 如果 r e d u c t i o n = s u m ; l(x,y) = \begin{cases} mean(L), 如果reduction = mean; \\ sum(L), 如果 reduction = sum; \end{cases} l(x,y)={mean(L),如果reduction=mean;sum(L),如果reduction=sum;?

注意:

當 delta 設置為 1 時,此損失等效于 SmoothL1Loss,一般來說,此損失與 SmoothL1Loss 相差 delta 系數(在 Smooth L1 中也稱為 beta)

參數:

  • reduction (str, 可選) - 指定要應用于輸出的歸約:‘none’ | ‘mean’ | ‘sum’。 ‘none’:不應用任何歸約,‘mean’:輸出的總和將除以輸出中的元素數量,‘sum’:輸出將求和。默認值:‘mean’
  • delta (float, 可選) – 指定在 delta 縮放的 L1 和 L2 損失之間切換的閾值。該值必須為正數。默認值:1.0

3.與 MSELoss、MAELoss 區別及各自優缺點

3.1 MSELoss 均方誤差損失

MSE損失計算的是真實值與預測值之間差異的平方,適用于誤差分布較為均勻且沒有異常值的數據。

公式:

M S E = 1 N ∑ i = 1 N ( y i ? y ^ i ) 2 MSE = \frac {1}{N} \sum_{i=1}^N(y_i - \hat y_i)^2 MSE=N1?i=1N?(yi??y^?i?)2

優點:

  • 對誤差小的樣本非常敏感,適用于誤差分布均勻的情況
  • 優化平滑,梯度較好,有助于模型快速收斂

缺點:

  • 對異常值非常敏感。因為平方操作,異常值可能導致損失過大,影響訓練過程,導致模型不穩定。

3.2 MAELoss 平均絕對誤差損失

MAE損失計算的是真實值和預測值之間的絕對差異,適用于數據中可能存在異常值的情況。

公式:
M A E = 1 N ∑ i = 1 N ∣ y i ? y ^ i ∣ MAE = \frac {1}{N} \sum_{i=1}^N|y_i-\hat y_i| MAE=N1?i=1N?yi??y^?i?

優點:

  • 對異常值更為魯棒,異常值不會像 MSE 那樣放大其影響
  • 對于中等誤差,MAE 提供了更好的穩定性

缺點:

  • 梯度不連續:因為MAE是絕對差,導致在誤差較大的時候梯度較小,訓練過程可能收斂慢
  • 在某些情況下可能無法收斂到最優解

3.3 Huber Loss

Huber Loss 結合了 MSE 和 MAE 的優點,適用于大多數回歸問題。它在小誤差時使用 MSE(平滑),在大誤差時使用 MAE(魯棒)

優點:

  • 兼具 MSE 和 MAE 的優點,對異常值不敏感,又能平滑優化
  • 可以自定義 δ \delta δ 值,控制從 MSE 到 MAE 的轉換點,靈活性較高
  • 適用于大多數實際回歸問題,具有較好性能

缺點:

  • 超參 δ \delta δ 的選擇需要調優,可能會影響訓練結果

4. 總結

4.1 優化平滑

  • 平滑是指損失函數在參數空間內變化的平穩程度。在損失函數的圖像中,如果它是光滑的,表示它的值不會出現劇烈的波動。平滑的損失函數對于優化過程有利,因為它減少了優化過程中由于損失函數劇烈波動而導致的難以收斂的情況。
  • 在優化中,平滑的損失函數能夠幫助優化算法(如梯度下降)穩定地找到全局或局部最小值,而不會被局部的“尖峰”或“坑”困住。
  • Huber損失就是一個平滑的損失函數,它在小誤差時使用平方損失,避免了大誤差的過大懲罰;而在大誤差時切換到線性損失,使得對于異常值的影響不至于過大。它結合了均方誤差(MSE)和絕對誤差(MAE)的優點,使得訓練過程更加穩定。

4.2 梯度較好

  • 梯度較好意味著損失函數的導數(梯度)在訓練過程中變化平滑,且不存在突變或無法計算的情況。好的梯度有助于優化算法(如梯度下降)準確地更新模型參數。
  • 不好的梯度可能包括梯度爆炸或梯度消失,導致模型訓練變得非常緩慢或者無法進行有效更新。梯度較好的損失函數可以確保每次更新都是有效的,從而加速訓練過程。
  • Huber損失在誤差較小的情況下,梯度是平方的(類似于均方誤差),而在誤差較大的情況下,梯度是線性的(類似于絕對誤差)。這種平滑的梯度變化使得優化過程既不會因劇烈波動而不穩定,也不會在大誤差情況下過于懲罰,從而能保持穩定的收斂速度。

4.3 為什么說 MSE 是平滑的

  • 連續性:MSE是一個連續的函數,也就是說,它的值隨著輸入的變化是平滑變化的,不會出現跳躍或斷裂。這意味著在模型訓練過程中,誤差會隨著模型預測值的調整而平滑變化,不會突變,避免了不穩定的訓練過程。
  • 可導性:均方誤差的導數是連續且平滑的。對于MSE來說,損失函數的導數是關于模型預測值的線性函數。連續且可導的損失函數能夠提供平滑的梯度,幫助優化算法(如梯度下降)順利地更新模型參數。

MSE損失函數是:
M S E = 1 N ∑ i = 1 N ( y i ? y ^ i ) 2 MSE = \frac {1}{N} \sum_{i=1}^N(y_i - \hat y_i)^2 MSE=N1?i=1N?(yi??y^?i?)2

對于每個樣本誤差 a = y ? y ^ a=y-\hat y a=y?y^?,誤差的導數是:
d d a ( a 2 ) = 2 a \frac {d}{da}(a^2) = 2a dad?(a2)=2a
這個導數是線性的,并且在每個點都有定義。梯度的線性變化意味著,模型在調整參數時,誤差隨著預測的改進是平滑減少的。這個特性使得梯度下降在優化過程中可以平穩地更新模型權重,而不會遭遇急劇的變化或不連續的情況。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/66428.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/66428.shtml
英文地址,請注明出處:http://en.pswp.cn/web/66428.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python實現pdf轉word和excel

一、引言   在辦公中&#xff0c;我們經常遇收到pdf文件格式&#xff0c;因為pdf格式文件不易修改&#xff0c;當我們需要編輯這些pdf文件時&#xff0c;經常需要開通會員或收費功能才能使用編輯功能。今天&#xff0c;我要和大家分享的&#xff0c;是如何使用python編程實現…

【PyCharm】連接Jupyter Notebook

【PyCharm】相關鏈接 【PyCharm】連接 Git【PyCharm】連接Jupyter Notebook【PyCharm】快捷鍵使用【PyCharm】遠程連接Linux服務器【PyCharm】設置為中文界面 【PyCharm】連接Jupyter Notebook PyCharm連接Jupyter Notebook的過程可以根據不同的需求分為 本地連接 和 遠程連…

Java鎖 公平鎖和非公平鎖 ReentrantLock() 深入源碼解析

賣票問題 我們現在有五個售票員 五個線程分別賣票 賣票 ReentrantLock(); 運行后全是 a 對象獲取 非公平鎖缺點之一 容易出現鎖饑餓 默認是使用的非公平鎖 也可以傳入一個 true 參數 使其變成公平鎖 生活中排隊講求先來后到 視為公平 程序中的公平性也是符合請求鎖的絕對…

「劉一哥GIS」系列專欄《GRASS GIS零基礎入門實驗教程(配套案例數據)》專欄上線了

「劉一哥GIS」系列專欄《GRASS GIS零基礎入門實驗教程》全新上線了&#xff0c;歡迎廣大GISer朋友關注&#xff0c;一起探索GIS奧秘&#xff0c;分享GIS價值&#xff01; 本專欄以實戰案例的形式&#xff0c;深入淺出地介紹了GRASS GIS的基本使用方法&#xff0c;用一個個實例講…

企業級NoSQL數據庫Redis

1.瀏覽器緩存過期機制 1.1 最后修改時間 last-modified 瀏覽器緩存機制是優化網頁加載速度和減少服務器負載的重要手段。以下是關于瀏覽器緩存過期機制、Last-Modified 和 ETag 的詳細講解&#xff1a; 一、Last-Modified 頭部 定義&#xff1a;Last-Modified 表示服務器上資源…

使用Flask和Pydantic實現參數驗證

使用Flask和Pydantic實現參數驗證 1 簡介 Pydantic是一個用于數據驗證和解析的 Python 庫&#xff0c;版本2的性能有較大提升&#xff0c;很多框架使用Pydantic做數據校驗。 # 官方參考文檔 https://docs.pydantic.dev/latest/# Github地址 https://github.com/pydantic/pyd…

ScratchLLMStepByStep:訓練自己的Tokenizer

1. 引言 分詞器是每個大語言模型必不可少的組件&#xff0c;但每個大語言模型的分詞器幾乎都不相同。如果要訓練自己的分詞器&#xff0c;可以使用huggingface的tokenizers框架&#xff0c;tokenizers包含以下主要組件&#xff1a; Tokenizer: 分詞器的核心組件&#xff0c;定…

C# OpenCvSharp 部署3D人臉重建3DDFA-V3

目錄 說明 效果 模型信息 landmark.onnx net_recon.onnx net_recon_mbnet.onnx retinaface_resnet50.onnx 項目 代碼 下載 參考 C# OpenCvSharp 部署3D人臉重建3DDFA-V3 說明 地址&#xff1a;https://github.com/wang-zidu/3DDFA-V3 3DDFA_V3 uses the geometri…

從零開始學數據庫 day2 DML

從零開始學數據庫&#xff1a;DML操作詳解 在今天的數字化時代&#xff0c;數據庫的使用已經成為了各行各業的必備技能。無論你是想開發一個簡單的應用&#xff0c;還是想要管理復雜的數據&#xff0c;掌握數據庫的基本操作都是至關重要的。在這篇博客中&#xff0c;我們將專注…

Java 8 Stream API

文章目錄 Java 8 Stream API1. Stream2. Stream 的創建3. 常見的 Stream 操作3.1 中間操作3.2 終止操作 4. Stream 的并行操作 Java 8 Stream API Java 8 引入了 Stream API&#xff0c;使得對集合類&#xff08;如 List、Set 等&#xff09;的操作變得更加簡潔和直觀。Stream…

運行fastGPT 第五步 配置FastGPT和上傳知識庫 打造AI客服

運行fastGPT 第五步 配置FastGPT和上傳知識庫 打造AI客服 根據上一步的步驟&#xff0c;已經調試了ONE API的接口&#xff0c;下面&#xff0c;我們就登陸fastGPT吧 http://xxx.xxx.xxx.xxx:3000/ 這個就是你的fastGPT后臺地址&#xff0c;可以在configer文件中找到。 賬號是…

第4章 Kafka核心API——Kafka客戶端操作

Kafka客戶端操作 一. 客戶端操作1. AdminClient API 一. 客戶端操作 1. AdminClient API

【王樹森搜索引擎技術】相關性02:評價指標(AUC、正逆序比、DCG)

相關性的評價指標 Pointwise評價指標&#xff1a;Area Under the Curve&#xff08;AUC&#xff09;Pairwise評價指標&#xff1a;正逆序比&#xff08;Positive to Negative Ratio, PNR&#xff09;Listwise評價指標&#xff1a;Discounted Cumulative Gain(DCG)用AUC和PNR作…

人物一致性訓練測評數據集

1.Pulid 訓練:由1.5M張從互聯網收集的高質量人類圖像組成,圖像標題由blip2自動生成。 測試:從互聯網上收集了一個多樣化的肖像測試集,該數據集涵蓋了多種膚色、年齡和性別,共計120張圖像,我們稱之為DivID-120,作為補充資源,還使用了最近開源的測試集Unsplash-50,包含…

Android 項目依賴沖突問題:Duplicate class found in modules

問題描述與處理處理 1、問題描述 plugins {id com.android.application }android {compileSdk 34defaultConfig {applicationId "com.my.dialog"minSdk 21targetSdk 34versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.run…

計算機網絡 | 什么是公網、私網、NAT?

關注&#xff1a;CodingTechWork 引言 計算機網絡是現代信息社會的基石&#xff0c;而網絡通信的順暢性和安全性依賴于有效的IP地址管理和網絡轉換機制。在網絡中&#xff0c;IP地址起到了標識設備和進行數據傳輸的核心作用。本文將詳細討論公網IP、私網IP以及NAT轉換等網絡技…

python+django+Nacos實現配置動態更新-集中管理配置(實現mysql配置動態讀取及動態更新)

一、docker-compose.yml 部署nacos服務 version: "3" services:mysql:container_name: mysql# 5.7image: mysql:5.7environment:# mysql root用戶密碼MYSQL_ROOT_PASSWORD: rootTZ: Asia/Shanghai# 初始化數據庫(后續的初始化sql會在這個庫執行)MYSQL_DATABASE: nac…

深度學習項目--基于LSTM的火災預測研究(pytorch實現)

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 前言 LSTM模型一直是一個很經典的模型&#xff0c;這個模型當然也很復雜&#xff0c;一般需要先學習RNN、GRU模型之后再學&#xff0c;GRU、LSTM的模型講解將…

基于 WEB 開發的汽車養護系統設計與實現

標題:基于 WEB 開發的汽車養護系統設計與實現 內容:1.摘要 本文介紹了基于 WEB 開發的汽車養護系統的設計與實現。文章首先闡述了系統的背景和目的&#xff0c;即隨著汽車保有量的增加&#xff0c;汽車養護需求日益增長&#xff0c;傳統的汽車養護方式已經無法滿足人們的需求&…

GitLab集成Jira

GitLab與Jira集成的兩種方式 GitLab 提供了兩種 Jira 集成&#xff0c;即Jira議題集成和Jira開發面板集成&#xff0c;可以配置一個或者兩個都配置。 具體集成步驟可以參考官方文檔Jira 議題集成&#xff08;極狐GitLab文檔&#xff09;和Jira 開發面板集成&#xff08;極狐G…