Pytorch(筆記7損失函數類型)

前言

損失函數(Loss Function):是定義在單個樣本上的,是指一個樣本的誤差,度量模型一次預測的好壞。
代價函數(Cost Function)=成本函數=經驗風險:是定義在整個訓練集上的,是所有樣本誤差的平均,也就是所有損失函數值的平均,度量平均意義下模型預測的好壞。
目標函數(Object Function)=結構風險=經驗風險+正則化項=代價函數+正則化項:是指最終需要優化的函數,一般指的是結構風險。正則化項(regularizer)=懲罰項(penalty term)。

損失函數類型

平方損失函數(Quadratic Loss Function)又稱均方誤差(Mean Squared Error, MSE)

一種常用的回歸損失函數。它衡量的是模型預測值與真實值之差的平方的平均值。平方損失函數對于大的誤差給予了更大的懲罰,這使得它成為許多回歸任務中首選的損失函數之一。

平方損失函數的公式(MSE):
在這里插入圖片描述

import torch# 創建一個包含從 0.0 到 4.0(包括0.0和4.0)的浮點數的一維張量 x
x = torch.arange(5.0)  # 注意這里的 5.0,它確保了 x 是浮點類型# 創建一個與 x 形狀相同但所有元素都是 1.0 的浮點類型張量 Y
Y = torch.ones_like(x, dtype=torch.float32)  # 顯式指定 dtype 為 torch.float32# 創建一個 MSELoss 的實例
MSE = torch.nn.MSELoss()# 計算 x 和 Y 之間的均方誤差,并將結果存儲在變量 a 中
a = MSE(x, Y)# 打印結果
print(a)  # 輸出:tensor(3.),表示 x 和 Y 之間的均方誤差
print(x)  # 輸出:tensor([0., 1., 2., 3., 4.]),x 的值
print(Y)  # 輸出:tensor([1., 1., 1., 1., 1.]),Y 的值

注意

  • 平方損失函數對異常值(outliers)非常敏感,因為異常值會導致誤差的平方變得非常大,從而影響整個損失函數的值。
  • 在某些情況下,如果預測值與實際值的差距非常大,使用平方損失函數可能會導致梯度爆炸,從而使得模型的訓練變得不穩定。對于這類問題,可能需要考慮使用其他的損失函數,如絕對誤差損失(L1損失)等。

L1范數損失(L1 Loss)也被稱為最小絕對偏差(LAD)、平均絕對值誤差(MAE)

L1 Loss損失函數的公式(MAE):
在這里插入圖片描述

優點:

  • 穩定性:L1 Loss對于任何輸入值都有著穩定的梯度,即其梯度為常數(±1),這避免了梯度爆炸的問題,使得模型訓練過程更加穩定。
  • 魯棒性:L1 Loss對離群點(outliers)的懲罰是固定的,不會因離群點而產生過大的損失值,從而提高了模型對異常值的魯棒性。
  • 稀疏性:L1 Loss在優化過程中傾向于產生稀疏解,即使得模型中的許多權重接近于0,這有助于特征選擇,簡化模型,并提高模型的泛化能力。

缺點:

  • 不可導性:在0點處,L1Loss的梯度未定義(或者說是不連續的),這可能導致在優化過程中遇到一些困難,尤其是在使用梯度下降等基于梯度的優化算法時。
  • 收斂性:由于L1 Loss的梯度為常數,當預測值接近真實值時,梯度仍然較大,這可能導致模型在最優解附近震蕩,難以精確收斂。

使用場景

L1 Loss通常用于回歸任務,尤其是在需要模型的權重具有稀疏性的場景下。然而,由于其在0點處的不可導性,L1 Loss在神經網絡等復雜模型中的直接使用較少。相反,Smooth L1 Loss(平滑L1損失)作為L1 Loss和L2 Loss的結合,既保留了L1 Loss的魯棒性,又解決了其在0點處不可導的問題,因此在目標檢測等任務中得到了廣泛應用。

# x = tensor([0., 1., 2., 3., 4.])  
# y = tensor([1., 1., 1., 1., 1.])  # 計算差的絕對值  
abs_diff = torch.abs(x - y)  
# 輸出: tensor([1., 0., 1., 2., 3.])  # 計算L1損失(平均絕對誤差)  
L1loss = torch.nn.L1Loss()  
a = L1loss(x, y)  
# 或者直接計算平均值,不使用torch.nn.L1Loss()  
# a = torch.mean(abs_diff)  # 輸出L1損失  
print(a)  # 應該是 (1 + 0 + 1 + 2 + 3) / 5 = 1.4

SmoothL1Loss,平滑L1損失函數

是深度學習中常用的一種損失函數,尤其在處理回歸問題時表現出色。它是L1損失和L2損失的結合體,旨在減少對異常值的敏感性,并在優化過程中提供更加穩定的梯度。

在這里插入圖片描述

特性與優勢

  • 結合L1和L2的優點:當誤差較小時(∣x∣<β),SmoothL1Loss的計算方式類似于L2損失(平方誤差),這使得它在原點附近更加平滑,有助于模型的快速收斂。當誤差較大時(∣x∣≥β),SmoothL1Loss的計算方式則類似于L1損失(絕對誤差),這有助于減少離群點對損失函數的影響,使模型更加魯棒。
  • 對異常值不敏感:相比于L2損失,SmoothL1Loss在誤差較大時不會過度放大損失值,從而避免了梯度爆炸的問題。這對于包含異常值或噪聲的數據集尤其有用。
  • 穩定的梯度:SmoothL1Loss在誤差的整個范圍內都提供了相對穩定的梯度,這有助于模型的穩定訓練。

應用場景

SmoothL1Loss在目標檢測、物體跟蹤、姿態估計等需要精確回歸的任務中得到了廣泛應用。特別是在目標檢測的Bounding Box回歸中,SmoothL1Loss能夠有效地計算預測框與真實框之間的誤差,并幫助模型優化預測結果。

在PyTorch的torch.nn.SmoothL1Loss類中,reduction和beta是兩個重要的參數,它們分別用于控制損失值的計算和平滑轉換點的設置。

reduction參數指定了應用于輸出損失值的縮減方法。它有三個可選值:‘none’、‘mean’和’sum’。

  • 當reduction='mean’時,函數會計算所有元素損失的平均值作為最終的損失值。這是回歸任務中常用的做法,因為它將損失值標準化為單個標量,便于比較和反向傳播。
  • 如果設置為’none’,則函數將返回一個與輸入形狀相同的損失張量,不進行任何縮減。
  • 如果設置為’sum’,則函數會計算所有元素損失的總和作為最終的損失值。

beta參數是一個超參數,用于定義SmoothL1Loss函數中的平滑轉換點。在SmoothL1Loss的公式中,當誤差的絕對值小于beta時,損失函數采用L2損失(平方誤差)的形式;當誤差的絕對值大于或等于beta時,損失函數采用L1損失(絕對誤差減去0.5*beta)的形式。

  • beta=1.0是PyTorch中SmoothL1Loss的默認值。這個值的選擇是基于經驗和實踐的,旨在在L1損失和L2損失之間找到一個平衡點,以便在大多數情況下都能獲得良好的性能。
  • 調整beta的值可以改變損失函數對誤差的敏感度。較小的beta值會使損失函數在誤差較小時更加接近L2損失,從而在原點附近更加平滑;較大的beta值則會使損失函數更早地過渡到L1損失的形式,從而減少對大誤差的懲罰。

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

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

相關文章

集成學習(三)GBDT 梯度提升樹

前面學習了&#xff1a;集成學習&#xff08;二&#xff09;Boosting-CSDN博客 梯度提升樹&#xff1a;GBDT-Gradient Boosting Decision Tree 一、介紹 作為當代眾多經典算法的基礎&#xff0c;GBDT的求解過程可謂十分精妙&#xff0c;它不僅開創性地舍棄了使用原始標簽進行…

virtualbox窗口和win10窗口的切換

1、問題&#xff1a; 從windows切換到虛擬機可以用快捷鍵 ALTTAB&#xff0c;但是從虛擬機到windows使用 ALTTAB 無法成功切換 2、解決方法&#xff1a; 按下圖操作 按上面步驟設置之后&#xff0c;每次要從虛擬機窗口切換到windows窗口 只需要先按 CtrlAlt 跳出虛擬機窗口&…

【已解決】“import ... =“ 只能在 TypeScript 文件中使用

現象 在使用 import 語法的時候&#xff0c;代碼報紅&#xff0c;提示&#xff1a;“import ... “ 只能在 TypeScript 文件中使用 原因 代碼被 VSCode 解析成 TypeScript 語法 解決方案&#xff1a; 關閉 JavaScript 的驗證啟用即可。 mac 快捷方式&#xff1a;comman s…

微機原理與單片機 知識體系梳理

單片機筆記分享 我個人感覺單片機要記的東西很多&#xff0c;也很瑣碎&#xff0c;特別是一些位、寄存器以及相關作用等&#xff0c;非常難以記憶。因此復習時將知識點整理在了一起做成思維導圖&#xff0c;希望對大家有所幫助。內容不是很多&#xff0c;可能有些沒覆蓋全&…

vue-tabs標簽頁引入其他頁面

tabs頁面 <template> <div class"app-container"> <el-tabs v-model"activeName" type"card" tab-click"handleClick"> <el-tab-pane label"套餐用戶列表" name"first"> <user-list r…

VMware CentOS7 Linux 網絡配置

本文主要描述VMware虛擬機的網絡配置。 如上所示&#xff0c;在CentOS Linux虛擬機中設置網絡連接使用橋接模式&#xff0c;該模式對接主機物理網絡&#xff0c;直接由主機的物理網絡的DHCP服務器動態分配IP地址&#xff0c;或者在CentOS Linux的操作系統的網絡配置中設置靜態的…

HACCP體系認證:守護食品安全的黃金標準

在食品生產過程中&#xff0c;食品安全始終是重中之重。為了確保食品的安全性和質量&#xff0c;越來越多的企業開始采用HACCP&#xff08;危害分析關鍵控制點&#xff09;體系認證。這個體系不僅能幫助企業預防食品安全問題&#xff0c;還能顯著提升產品質量和市場競爭力。 HA…

android新聞app(二)

新聞詳細頁&#xff1a; 歷史瀏覽記錄SQList&#xff1a; 分類&#xff1a; 歷史瀏覽記錄主體UI和詳細&#xff1a; 側邊欄&#xff1a; 參考&#xff1a;浩宇開發

如何給gitlab其他訪問者創建賬號并增加權限

嗨&#xff0c;今天創建了項目之后&#xff0c;我想把項目鏈接發送給其他人&#xff0c;讓他下載這個項目&#xff0c;結果發現對方打開顯示登錄的界面&#xff0c;沒錯&#xff0c;他要想使用這個git下載項目&#xff0c;首先他的有一個git賬號 接下來我找有權限的相關人員給他…

網絡“ping不通”,如何排查和解決呢?

網絡問題往往復雜且難以預測&#xff0c;其中“ping不通”是常見的網絡故障之一。 1. 確認問題現象 首先&#xff0c;明確問題是完全無法ping通(無響應)還是ping通但有高延遲或丟包。這有助于縮小問題范圍。 2. 本地檢查 網絡接口狀態&#xff1a;使用ifconfig(Linux)或ipc…

認識并理解webSocket

今天逛牛客&#xff0c;看到有大佬分享說前端面試的時候遇到了關于webSocket的問題&#xff0c;一看自己都沒見過這個知識點&#xff0c;趕緊學習一下&#xff0c;在此記錄&#xff01; WebSocket 是一種網絡通信協議&#xff0c;提供了全雙工通信渠道&#xff0c;即客戶端和服…

策略為王股票軟件源代碼-----如何修改為自己軟件61----資訊菜單修改-----舉例---------調用同花順網頁------

http://stock.sina.com.cn 將原來的新浪行情,修改為同花順, 搜索 stock.sina.com.cn... StkUI\View\InfoView.cpp(58):char

AI防損員的應用:正確率高達90%背后的真相與挑戰

1. AI防損員的工作原理 AI防損員利用圖像識別技術來判斷商超中的行為是否異常。它將所有觀察到的行為分為兩類&#xff1a;正常行為和異常行為。這是一種二分類問題。 2. 數據不平衡問題 在現實中的商超環境中&#xff0c;正常行為占絕大多數&#xff0c;異常行為&#xff08;…

MySQL——備份

為什么要備份&#xff1f; 保證重要的數據不丟失 方便數據轉移 MySQL數據庫備份方式&#xff1a; 1. 直接拷貝物理文件 2. 在可視化工具中手動導出 —— 在想要導出的表或者庫中&#xff0c;右鍵選擇備份或導出 3. 使用命令行導出 mysqldump ——cmd打開命令行 —…

Python實現Mybatis Plus

Python實現Mybatis Plus from flask import g from sqlalchemy import asc, descclass QueryWrapperBuilder:conditions {}order_by_info {}def __new__(cls, *args, **kwargs):obj super(QueryWrapperBuilder, cls).__new__(cls)return objdef __init__(self, obj):self.o…

論文閱讀--Simple Baselines for Image Restoration

這篇文章是 2022 ECCV 的一篇文章&#xff0c;是曠視科技的一篇文章&#xff0c;針對圖像恢復任務各種網絡結構進行了梳理&#xff0c;最后總結出一種非常簡單卻高效的網絡結構&#xff0c;這個網絡結構甚至不需要非線性激活函數。 文章一開始就提到&#xff0c;雖然在圖像復原…

VRPTW(MATLAB):常春藤算法(IVY)求解帶時間窗的車輛路徑問題VRPTW,MATLAB代碼

詳細介紹 VRPTW&#xff08;MATLAB&#xff09;&#xff1a;常春藤算法&#xff08;Ivy algorithm&#xff0c;IVY&#xff09;求解帶時間窗的車輛路徑問題VRPTW&#xff08;提供MATLAB代碼&#xff09;-CSDN博客 ********************************求解結果******************…

EtherCAT轉Profinet網關配置說明第一講:配置軟件安裝及介紹

網關XD-ECPNS20為EtherCAT轉Profinet協議網關&#xff0c;使EtherCAT協議和Profinet協議兩種工業實時以太網網絡之間雙向傳輸 IO 數據。適用于具有EtherCAT協議網絡與Profinet協議網絡跨越網絡界限進行數據交換的解決方案。 本網關通過上位機來進行配置。 首先安裝上位機軟件 一…

Qt使用sqlite數據庫及項目實戰

一.sqlite使用介紹 在Qt中使用SQLite數據庫非常簡單&#xff0c;SQLite是一個輕量級的嵌入式數據庫&#xff0c;不需要單獨的數據庫服務器&#xff0c;完全使用本地文件來存儲數據。 當在Qt中使用SQLite數據庫時&#xff0c;需要涉及到一些SQL語句以及Qt中的相關函數&#xf…

【海賊王的數據航海】ST表——RMQ問題

目錄 1 -> RMQ問題 1.1 -> 定義 1.2 -> 解決策略 2 -> ST表 2.1 -> 定義 2.2 什么是可重復貢獻問題 2.3 -> 預處理ST表 2.4 -> 處理查詢 2.5 -> 實際問題 1 -> RMQ問題 1.1 -> 定義 RMQ (Range Minimum/Maximum Query)即區間最值查詢…