訓練過程中的 Loss ?

文章目錄

  • 在我們訓練的過程中,設置好這個epochs也就是訓練的輪次,然后計算這個損失函數,我們可以知道這個具體的訓練的情況,那么在訓練的過程中,這個損失函數的變化有哪些情況?對應的一個解釋情況是怎么樣的?

正常下降

Starting Epoch 1/50
Epoch [1/50] Average Loss: 0.5908
Starting Epoch 2/50
Epoch [2/50] Average Loss: 0.5720
Starting Epoch 3/50
Epoch [3/50] Average Loss: 0.5709
Starting Epoch 4/50
Epoch [4/50] Average Loss: 0.5550
Starting Epoch 5/50
Epoch [5/50] Average Loss: 0.5342
Starting Epoch 6/50
Epoch [6/50] Average Loss: 0.5057
Starting Epoch 7/50
Epoch [7/50] Average Loss: 0.4768
Starting Epoch 8/50
Epoch [8/50] Average Loss: 0.4469
Starting Epoch 9/50
Epoch [9/50] Average Loss: 0.4155
Starting Epoch 10/50
Epoch [10/50] Average Loss: 0.4037
Starting Epoch 11/50
Epoch [11/50] Average Loss: 0.3958
Starting Epoch 12/50
Epoch [12/50] Average Loss: 0.3643
  • 理解:
  • 這種趨勢表明模型正在有效地學習訓練數據中的模式。損失值持續穩定地下降,意味著模型在每個訓練周期中都在減少預測錯誤,逐漸逼近數據中的真實關系。這是我們最希望看到的訓練初期和中期表現。

對應解釋:

  • 模型正在學習: 模型通過反向傳播和優化器不斷調整其內部參數(權重和偏置),以使預測結果更接近真實標簽。
  • 特征提取有效: 模型能夠從輸入數據中提取出有用的特征,并利用這些特征進行分類或回歸。
  • 優化器和學習率設置合理: 當前的學習率和優化器能夠有效地引導模型向損失函數的最小值收斂。
  • 數據質量良好: 訓練數據噪聲較小,能夠被模型有效學習。

下降后又不斷上升

Epoch [14/50] Average Loss: 0.3641
Starting Epoch 15/50
Epoch [15/50] Average Loss: 0.3594
Starting Epoch 16/50
Epoch [16/50] Average Loss: 0.3235
Starting Epoch 17/50
Epoch [17/50] Average Loss: 0.3024
Starting Epoch 18/50
Epoch [18/50] Average Loss: 0.2847
Starting Epoch 19/50
Epoch [19/50] Average Loss: 0.2966
Starting Epoch 20/50
Epoch [20/50] Average Loss: 0.3149
Starting Epoch 21/50
Epoch [21/50] Average Loss: 0.3959
Starting Epoch 22/50
Epoch [22/50] Average Loss: 0.4231
  • 這種情況下,模型最可能出現了過擬合(Overfitting)。即使你只在一個數據集上訓練,訓練損失的上升仍然是過擬合的強烈信號。

  • 模型過度學習噪聲: 在 Epoch 18 達到最低點后,模型可能已經充分學習了訓練數據中的有效模式。繼續訓練時,它不再學習通用的規律,而是開始“記憶”訓練數據中特有的、隨機的噪聲和細節。這些噪聲對于泛化到新數據是無用的,甚至是干擾。

  • 泛化能力下降: 當模型開始擬合噪聲時,它的泛化能力(對未見過的數據進行準確預測的能力)就會下降。即使訓練損失本身在某個時刻可能看似還在下降,或者像你這個例子一樣,在達到一個低點后顯著上升,但模型的實際性能(尤其是在驗證集或測試集上)會急劇惡化。

  • 學習率可能過高: 在損失函數接近最小值時,如果學習率仍然過高,優化器可能會“跳過”最優解,導致損失值在最低點之后反彈并持續上升,因為它無法精確地停留在或收斂到最小值。

  • 為什么即使訓練損失上升也可能導致模型在后期表現尚可?

  • 你可能想問,如果訓練損失上升了,模型是不是就完全失敗了?不一定。

  • 局部過擬合和后期調整: 有時,模型在某個階段會出現過擬合,但如果訓練輪次足夠多,并且有學習率調度器(如 ReduceLROnPlateau) 的介入,它可能會在后續的 Epoch 中降低學習率,從而幫助模型從過擬合的狀態中部分恢復,重新找到更優的收斂路徑,導致損失在后期再次下降。

  • 訓練集與測試集的差異: 即使訓練損失上升,如果測試集或驗證集足夠大且具有代表性,模型在某個最佳點停止訓練(例如在這個例子中 Epoch 18 附近),其在測試集上的表現可能仍然不錯。而你看到的“后面又繼續下降了”可能就是調度器發揮作用后的結果。

  • 如何處理這種損失上升的情況?

  • 當發現訓練損失下降后開始上升時,應立即采取措施,因為這表明模型正在走向過擬合的深淵:

  • 核心:早停(Early Stopping):

    • 最重要且最有效的方法。 你不應該等到損失上升到很高才停止。在訓練過程中,除了監控訓練損失,更重要的是監控驗證損失(Validation Loss) 和驗證指標(如準確率、F1 Score)。
    • 一旦驗證損失開始上升,或者驗證指標不再改善并開始下降,就應該停止訓練,并回溯到驗證集上表現最佳的那個 Epoch 所對應的模型權重。
  • 正則化(Regularization):

    • 權重衰減(Weight Decay / L2 正則化): 在優化器中加入或增加 weight_decay 參數。它會懲罰模型參數的大小,防止模型過度擬合訓練數據。
    • Dropout: 在模型的全連接層(fc_reduce 或 fc)之間添加 nn.Dropout() 層。Dropout 會隨機地“關閉”一部分神經元,迫使模型學習更魯棒的特征,減少對單個特征的依賴。
  • 學習率調整:

    • 使用學習率調度器,尤其是 ReduceLROnPlateau。它會監控驗證損失(或訓練損失),當損失在一定時間內沒有改善時,自動降低學習率。這可以幫助模型在接近最優解時進行更精細的調整,避免“跳過”最優解。
    • 如果發現訓練損失上升,可以嘗試手動降低學習率并繼續觀察。
  • 數據增強(Data Augmentation):

    • 增加訓練數據的多樣性。越是多樣化的訓練數據,模型就越難過擬合到特定的樣本,從而學習到更通用的特征。
  • 簡化模型:

    • 如果模型過于復雜,參數過多,它更容易記憶訓練數據。可以考慮減少模型的層數、每層神經元數量,或者使用更簡單的模型架構。

反復震蕩

Epoch [37/50] Average Loss: 0.2566
Starting Epoch 38/50
Epoch [38/50] Average Loss: 0.2463
Starting Epoch 39/50
Epoch [39/50] Average Loss: 0.2579
Starting Epoch 40/50
Epoch [40/50] Average Loss: 0.2437
Starting Epoch 41/50
Epoch [41/50] Average Loss: 0.2357
Starting Epoch 42/50
Epoch [42/50] Average Loss: 0.2466
Starting Epoch 43/50
Epoch [43/50] Average Loss: 0.2442
Starting Epoch 44/50
Epoch [44/50] Average Loss: 0.2504
  • 理解:
  • 這種趨勢表明損失函數在某個低點附近來回波動,沒有進一步顯著下降。這可能是模型在尋找最優解的過程中,在損失函數的“碗底”來回跳動,或者陷入了局部最優解。

對應解釋:

  • 學習率不當:
  • 學習率過高: 導致模型在損失函數的最低點附近“跳來跳去”,無法精確收斂。這是最常見的原因。
  • 學習率過低: 雖然這通常導致損失下降非常緩慢而不是震蕩,但在某些情況下,如果損失已經非常接近最小值,過低的學習率也可能導致模型在微小波動中停留。
  • 局部最優解/鞍點: 損失函數表面可能存在多個局部最小值或鞍點,模型陷入其中并難以逃脫。
  • 批量大小(Batch Size)過小: 小批量數據計算出的梯度噪聲較大,導致優化方向不穩定,從而引起震蕩。
  • 數據噪聲: 訓練數據中存在較多的噪聲,模型在試圖擬合這些噪聲時導致波動。
  • 梯度爆炸/消失(不太常見于這種穩定震蕩): 雖然會導致訓練不穩定,但通常表現為損失值劇烈波動,而不是在某個區間內穩定震蕩。

如何處理:

  • 降低學習率: 這是最直接有效的辦法。通過學習率調度器(如 ReduceLROnPlateau)在損失停止下降或開始震蕩時自動降低學習率。
  • 調整優化器: 嘗試不同的優化器(如 Adam, SGD, RMSprop 等)或調整其參數。
  • 增加批量大小: 使用更大的批量可以使梯度估計更穩定,減少震蕩。但這可能需要更多的內存。
  • 引入動量(Momentum): 優化器中的動量參數可以幫助模型平滑地越過小的波動,加速收斂。
  • 正則化: 適當的正則化也能幫助模型避免過擬合,從而減少在訓練后期對噪聲的擬合造成的震蕩。

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

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

相關文章

S2B2B農產品供應鏈交易多平臺開發有哪些發展前景?如何維護?

一、S2B2B農產品供應鏈交易多平臺開發的未來發展前景 本文將由小編為您介紹關于S2B2B農產品供應鏈交易多平臺開發的內容,希望能夠幫助大家。在數字化時代,農產品供應鏈的數字化轉型成為了一種必然趨勢。S2B2B(Supplier to Business to Business)模式通過…

關于有害的過度使用 std::move

翻譯:2023 11 月 24 日On harmful overuse of std::move cppreference std::move 論 std::move 的有害過度使用 - The Old New Thing C 的 std::move 函數將其參數轉換為右值引用,這使得其內容可以被另一個操作“消費”(移動)。…

Ubuntu24.04 onnx 模型轉 rknn

前面的環境配置有點懶得寫,教程也很多,可以自己找 rknn-toolkit2 gitee 地址:pingli/rknn-toolkit2 試了很多開源的代碼,都沒辦法跑通, 最后自己改了一版 微調后的 qwen2 模型適用 from rknn.api import RKNN impor…

Electron通信流程

前言 今天講Electron框架的通信流程,首先我們需要知道為什么需要通信。這得益于Electron的多進程模型,它主要模仿chrome的多進程模型如下圖: 作為應用開發者,我們將控制兩種類型的進程:主進程和渲染器進程 。 …

uni-app項目實戰筆記1--創建項目和實現首頁輪播圖功能

ps:本筆記來自B站咸蝦米壁紙項目 一.創建項目,完成項目初始化搭建 1.在HBuilder X創建wallper項目,使用默認模塊,選擇vue; 2.在項目根目錄下創建common目錄,用于存放靜態資源,創建項目時自動生成static目…

機械制造系統中 PROFINET 與 PROFIBUS-DP 的融合應用及捷米科技解決方案

在機械制造領域,工業通信網絡的兼容性與靈活性直接影響產線的自動化水平與生產效率。當前,多數機械制造系統采用PROFINET 控制器構建核心網絡架構,并通過微波無線連接實現設備互聯。隨著工業網絡的發展,系統中常需同時集成PROFINE…

MCP 協議系列序言篇:開啟 AI 應用融合新時代的鑰匙

文章目錄 序言:AI 應用層進入 MCP 時代為什么 MCP 開啟 AI 應用融合新時代的鑰匙為什么是 MCP?它與 Function Calling、Agent 有什么區別?Function CallingAI AgentMCP(Model Context Protocol) MCP 如何工作MCP Serve…

【threejs】每天一個小案例講解:光照

代碼倉 GitHub - TiffanyHoo/three_practices: Learning three.js together! 可自行clone,無需安裝依賴,直接liver-server運行/直接打開chapter01中的html文件 運行效果圖 知識要點 常見光照類型及其特點如下: 1. 環境光(Ambi…

大模型在輸尿管下段積水預測及臨床應用的研究

目錄 一、引言 1.1 研究背景與意義 1.2 研究目的 1.3 研究范圍與限制 1.4 文獻綜述 1.5 研究方法和框架 二、相關理論與概念 2.1 大模型技術原理 2.2 輸尿管下段積水病理機制 2.3 大模型在醫學預測領域的應用 三、大模型預測輸尿管下段積水的方法 3.1 數據收集 3.…

gitlab相關操作

2025.06.11今天我學習了如何在終端使用git相關操作: 一、需要修改新的倉庫git地址的時候: (1)檢查當前遠程倉庫 git remote -v 輸出示例: origin https://github.com/old-repo.git (fetch) origin https://github.c…

51c自動駕駛~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention為LLM長文本建模帶來突破性進展 琶洲實驗室、華南理工大學聯合推出關鍵上下文感知注意力機制(CCA-Attention),…

通過共享內存在多程序之間實現數據通信

注:以下內容為與 GPT-4O 共同創作完成 以共享內存的方式實現多程序之間的數據通信,尤其適合在一臺機器上的多程序之間進行高頻數據交換。 以下示例展示了 sender.py 向 receiver.py 發送數據并接收經 receiver.py 處理后的數據,以及如何通過…

[論文閱讀] 人工智能+軟件工程 | 理解GitGoodBench:評估AI代理在Git中表現的新基準

理解GitGoodBench:評估AI代理在Git中表現的新基準 論文信息 GitGoodBench: A Novel Benchmark For Evaluating Agentic Performance On Git Tobias Lindenbauer, Egor Bogomolov, Yaroslav Zharov Cite as: arXiv:2505.22583 [cs.SE] 研究背景:當AI走進…

開源 java android app 開發(十二)封庫.aar

文章的目的為了記錄使用java 進行android app 開發學習的經歷。本職為嵌入式軟件開發,公司安排開發app,臨時學習,完成app的開發。開發流程和要點有些記憶模糊,趕緊記錄,防止忘記。 相關鏈接: 開源 java an…

ubuntu + nginx 1.26 + php7.4 + mysql8.0 調優

服務器配置 8核 16G 查看內存 free -h nginx配置 worker_processes auto; # 自動檢測CPU核心數 worker_rlimit_nofile 65535; # 提高文件描述符限制 ? events {worker_connections 8192; # 每個worker的最大連接數multi_accept on; # 一次性接受…

[未驗證]abaqus2022 更改內置python

如何在 Abaqus 2022 中更改內置 Python 在 Abaqus 中,Python 是常用的腳本語言,它使得用戶能夠自動化模型的創建、分析和后處理。可能有時候你需要更改默認的 Python 版本,比如使用特定庫或者功能。本文將為您詳細說明如何在 Abaqus 2022 中更…

RAG文檔解析難點2:excel數據“大海撈針”,超大Excel解析與精準行列查詢指南

寫在前面 在構建檢索增強生成(RAG)應用時,Excel文件是不可或缺的數據源。它們通常包含了企業運營、市場分析、科學研究等各個領域的寶貴數據。然而,當這些Excel文件變得“超大”——可能包含數十萬甚至數百萬行數據時,傳統的解析方法和RAG數據處理流程將面臨嚴峻的內存、…

深度掌控,智啟未來 —— 基于 STM32F103RBT6 的控制板

在科技浪潮奔涌向前的時代,電子領域的創新發展從未停歇。對于電子工程師、科研工作者以及電子技術愛好者,在校電子專業學生而言,一款性能卓越、功能全面且穩定可靠的開發板,是探索電子世界奧秘、實現創意構想的關鍵基石。今天&…

什么樣的登錄方式才是最安全的?

目錄 一、基礎協議:HTTP與HTTPS HTTP協議 HTTPS協議 二、常見Web攻擊與防御 2.1 XSS 常見攻擊手段 針對XSS 攻擊竊取 Cookie 2.2 CSRF CSRF攻擊的核心特點 與XSS的區別 常見防御措施 三、疑問解答 四、登錄方式演變 4.1 方案一🐶狗都不用 …

android studio底部導航欄

實現底部導航欄切換 將java文件return的xml文件賦值給頁面FrameLayout控件 java文件BottomNavigationView,監聽器setOnNavigationItemSelectedListener MainActivity.java代碼 package com.example.myapplication;import android.os.Bundle;import androidx.appc…