機器學習(神經網絡基礎篇)——個人理解篇5(梯度下降中遇到的問題)

? ? ? ? 在神經網絡訓練中,計算參數的梯度是關鍵步驟。numerical_gradient 方法旨在通過數值微分(中心差分法)計算損失函數對網絡參數的梯度。然而,該方法的實現存在一個關鍵問題,導致梯度計算錯誤。

1、錯誤代碼示例:

def numerical_gradient(self, x, t):loss_W = lambda W: self.loss(x, t)  # 定義損失函數grads = {}  # 存儲梯度結果# 計算各參數的梯度grads['W1'] = numerical_gradient(loss_W, self.params['W1'])grads['b1'] = numerical_gradient(loss_W, self.params['b1'])grads['W2'] = numerical_gradient(loss_W, self.params['W2'])grads['b2'] = numerical_gradient(loss_W, self.params['b2'])return grads

1、1關鍵問題:

1、2相關疑問及解答

在梯度下降中,為什么需要對以前的權重系數進行保存,并且用更新后的數據進行梯度下降?

回答:

1. 數值梯度計算中的權重保存
在 數值微分(Numerical Gradient) 過程中,需要臨時保存權重,以確保梯度計算的準確性。

場景:通過中心差分法計算梯度時,需對參數的每個分量進行微小擾動(如±ε),觀察損失的變化。
原因:
避免污染參數狀態:計算梯度時,需臨時修改某個參數值(如W[i] += ε),但必須恢復原值,否則后續計算其他參數梯度時會使用已污染的參數值,導致誤差累積。
保持計算獨立性:每次擾動僅針對一個參數分量,其他參數需保持原值,確保梯度計算的正確性。

2. 優化算法中的歷史權重保存
在部分高級優化算法(如動量法、Adam)中,需保存歷史梯度或權重信息,以加速收斂或穩定訓練。

作用:自適應調整各參數的學習率,適合稀疏梯度或非平穩目標函數。

3. 為什么需要用更新后的數據梯度下降?
梯度下降的核心邏輯是 “用當前參數計算梯度,再更新參數”。

數據更新:每次迭代使用當前批次的數據(如Mini-Batch)計算梯度,確保參數朝著當前數據分布下的最優方向更新。
時序性:若使用舊數據(如過時的權重或歷史批次數據),梯度方向可能偏離真實分布,導致收斂緩慢或不穩定。

2、正確代碼示例

修正方法
對每個參數單獨定義閉包函數,在計算時臨時修改網絡參數:

def numerical_gradient(self, x, t):grads = {}# 計算 W1 的梯度def loss_W1(W):original = self.params['W1'].copy()self.params['W1'] = W  # 臨時修改參數loss = self.loss(x, t)self.params['W1'] = original  # 恢復原始參數return lossgrads['W1'] = numerical_gradient(loss_W1, self.params['W1'])# 類似地處理 b1、W2、b2...return grads

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

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

相關文章

40常用控件_WindowFrame的影響

window frame 的影響 如果 widget 作為一個窗口(帶有標題欄,最小化,最大化,關閉按鈕),那么在計算尺寸和坐標的 時候就有兩種算法.包含 window frame 和 不包含 window frame. 其中x(),y0,frameGeometry(), pos(),move() 都是按照包含 window frame 的方式來計算 的. 其中 geome…

Nginx搭建API網關服務教程-系統架構優化 API統一管理

超實用!用Nginx搭建API網關服務,讓你的系統架構更穩更強大!🚀 親們,今天來給大家種草一個超級實用的API網關搭建方案啦!👀 在如今的Web系統架構中,一個穩定、高性能、可擴展的API網…

USB設備老是提示有問題,如何解決

問題描述:有一臺usb設備一旦不小心碰了下,后面就在右下角提示“無法識別的USB設備”“跟這臺計算機連接的前一個USB設備0工作不正常,WIndows無法識別它”。我這個是明確知道那個設備,如果不知道也可以同樣解決。 解決方法&#xf…

數據操作語言

一、DML的核心操作類型 1.添加數據(INSERT) (1)手動插入:逐行插入數據,適用于少量數據。 INSERT INTO 表名 (字段1, 字段2) VALUES (值1, 值2);(2)批量導入:通過外部文件導入數據,適用于大數據場景

【Python】案例:計算股票收益率和波動率

【Python】案例:計算股票收益率和波動率: 1、案例需求2、數據準備3、案例實現 1、案例需求 在分析股票數據時,我們需要從這些數據中得到一些關鍵指標進行評估,比如收益率、波動率,其中收益率又可以細分為簡單收益率和…

geoserver搭建Docker一鍵直接安裝并上傳tif影像預覽

geoserver搭建Docker一鍵直接安裝 文章目錄 geoserver搭建Docker一鍵直接安裝前言一、Docker拉取Geoserver二、運行后使用geoserver進行數據管理進入geoserver調整語言登錄geoserver上傳一個tif影像建立工作空間并上傳自己的tif數據建立圖層預覽 總結 前言 使用docker安裝geos…

STM32看門狗應用實戰:獨立看門狗與窗口看門狗深度解析(下) | 零基礎入門STM32第九十五步

主題內容教學目的/擴展視頻看門狗什么是看門狗,原理分析,啟動喂狗方法,讀標志位。熟悉在程序里用看門狗。 師從洋桃電子,杜洋老師 📑文章目錄 一、看門狗應用架構分析1.1 系統監控流程圖1.2 雙看門狗應用場景對比 二、…

nacos集群啟動問題

根據您的描述,Nacos集群只能啟動兩個節點,可能的原因和解決方法如下: 1. 集群配置問題 ? 原因:cluster.conf文件中可能只配置了兩個節點的地址,導致第三個節點無法加入集群。 ? 解決方法: ? 檢查每個…

【C語言】跳臺階

相信你是最棒噠!!! 一、題目描述 二、題目代碼 1.斐波那契數列 2.DFS深度搜索 總結 一、題目描述 一只青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先后次序不同算不同的結果…

指紋瀏覽器技術架構解析:高并發批量注冊業務的工程化實踐——基于分布式指紋引擎與防關聯策略的深度實現

一、技術背景與行業痛點 在跨境電商、廣告投放、問卷調查等場景中,批量注冊與多賬號矩陣運營已成為剛需。然而,主流平臺(如亞馬遜、Facebook、Google)的風控系統通過瀏覽器指紋追蹤(Canvas/WebGL/WebRTC等&#xff09…

linux基礎操作

一、系統目錄知識 /bin: bin 是 Binaries (二進制文件) 的縮寫, 這個目錄存放著最經常使用的命令。 /boot: 這里存放的是啟動 Linux 時使用的一些核心文件,包括一些連接文件以及鏡像文件。 /dev : dev 是 Device(設備) 的縮寫,…

源碼分析之Leaflet圖層控制控件Control.Layers實現原理

概述 本文將介紹Leaflet庫中最后一個組件,即圖層控制組件 Control.Layers。 源碼實現 export var Layers Control.extend({options: {collapsed: true,position: "topright",autoZIndex: true,hideSingleBase: false,sortLayers: false,sortFunction:…

Element 使用 textarea 內容實現高度自適應

在 ElInput 組件的 type"textarea" 模式下&#xff0c;你可以使用 autosize 屬性來實現內容高度自適應。當沒有內容時默認顯示 3 行&#xff0c;當有內容時根據內容動態調整高度。 代碼&#xff1a; <el-form-item v-if"item.type textarea" :rules&…

Java技術生態前沿洞察:虛擬線程引領并發革命,框架創新賦能云原生時代

Java技術生態正迎來新一輪變革浪潮。虛擬線程的落地成為高并發編程范式轉折點&#xff0c;其極低資源開銷特性在電商秒殺場景中展現出3倍吞吐量提升&#xff0c;徹底改寫傳統線程模型性能邊界。Spring Boot 3.2原生支持虛擬線程&#xff0c;結合Observation API與HTTP客戶端優化…

leetcode每日一題:替換子串得到平衡字符串

引言 今天的每日一題原題是1863. 找出所有子集的異或總和再求和&#xff0c;比較水&#xff0c;直接對于集合中的每一個元素&#xff0c;都有取或者不取2種情況&#xff0c;直接遞歸進去求和即可。更換成前幾天遇到的更有意思的一題來寫這個每日一題。 題目 有一個只含有 Q,…

node-modules-inspector 可視化node_modules

1、node_modules 每個vue的項目都有很多的依賴&#xff0c;有的是dev的&#xff0c;有的是生產的。 2、使用命令pnpx node-modules-inspector pnpx node-modules-inspector 3、node_modules可視化 4、在線體驗 Node Modules Inspector 5、github地址 https://github.com/a…

【零基礎入門unity游戲開發——動畫篇】unity舊動畫系統Animation組件的使用

考慮到每個人基礎可能不一樣&#xff0c;且并不是所有人都有同時做2D、3D開發的需求&#xff0c;所以我把 【零基礎入門unity游戲開發】 分為成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】&#xff1a;主要講解C#的基礎語法&#xff0c;包括變量、數據類型、運算符、…

Linux網絡:數據鏈路層以太網

目錄 認識數據鏈路層關于以太網1. 基本概念2. 以太網幀格式3. MAC vs IP 認識數據鏈路層 數據鏈路層 位于物理層和網絡層之間&#xff0c;其作用是將源自物理層來的數據可靠地傳輸到相鄰節點的目標主機的網絡層&#xff0c;主要通過物理介質(如以太網&#xff0c;Wi-Fi等)將數…

SpringMVC與SpringCloud的區別

SpringMVC與SpringCloud的核心區別 功能定位 ? SpringMVC&#xff1a; 基于Spring框架的Web層開發模塊&#xff0c;采用MVC&#xff08;Model-View-Controller&#xff09;模式&#xff0c;專注于處理HTTP請求、路由分發&#xff08;如DispatcherServlet&#xff09;和視圖…

使用MATIO庫寫入MATLAB結構體(struct)數據的示例程序

使用MATIO庫寫入MATLAB結構體(struct)數據的示例程序 MATIO是一個用于讀寫MATLAB數據文件(.mat)的開源C庫。下面是一個完整的示例程序&#xff0c;展示如何使用MATIO庫創建一個包含結構體數據的MAT文件。 示例程序 #include <stdio.h> #include <stdlib.h> #inc…