四、神經網絡的學習(中)

4.3 數值微分

梯度法使用梯度的信息決定前進的方向。本節將介紹梯度是什么、有什么性質等內容。

4.3.1 導數

假如你是全程馬拉松選手,在開始的10分鐘內跑了2千米。如果要計算此時的奔跑速度,則為2/10 = 0.2[千米/分]。也就是說,你以1分鐘前進0.2千米的速度(變化)奔跑。

在這個馬拉松的例子中,我們計算了“奔跑的距離”相對于“時間”發生了多大變化。不過,這個10分鐘跑2千米的計算方式,嚴格地講,計算的是10分鐘內的平均速度。而導數表示的是某個瞬間的變化量。因此,將10分鐘這一時間段盡可能地縮短,比如計算前1分鐘奔跑的距離、前1秒鐘奔跑的距離、前0.1秒鐘奔跑的距離……這樣就可以獲得某個瞬間的變化量(某個瞬時速度)。

綜上,導數就是表示某個瞬間的變化量。它可以定義成下面的式子。

式(4.4)表示的是函數的導數。左邊的符號

表示fx)關于x的導數,即fx)相對于x的變化程度。式(4.4)表示的導數的含義是,x的“微小變化”將導致函數fx)的值在多大程度上發生變化。

如果直接實現式(4.4)的話,向h中賦入一個微小值,就可以計算出來了。比如,下面的實現如何?

函數numerical_diff(f, x)的名稱來源于數值微分A 的英文numerical differentiation。這個函數有兩個參數,即“函數f”和“傳給函數f的參數x”。乍一看這個實現沒有問題,但是實際上這段代碼有兩處需要改進的地方。

如上所示,如果用float32類型(32位的浮點數)來表示1e-50,就會變成0.0,無法正確表示出來。也就是說,使用過小的值會造成計算機出現計算上的問題。這是第一個需要改進的地方,即將微小值h改為

。使用

就可以得到正確的結果。

第二個需要改進的地方與函數f的差分有關。雖然上述實現中計算了函數f在x+h和x之間的差分,但是必須注意到,這個計算從一開始就有誤差。如圖4-5所示,“真的導數”對應函數在x處的斜率(稱為切線),但上述實現中計算的導數對應的是(x + h)和x之間的斜率。因此,真的導數(真的切線)和上述實現中得到的導數的值在嚴格意義上并不一致。這個差異的出現是因為h不可能無限接近0。

數值微分含有誤差。為了減小這個誤差,我們可以計算函數f在(x + h)和(x ? h)之間的差分。因為這種計算方法以x為中心,計算它左右兩邊的差分,所以也稱為中心差分(而(x + h)和x之間的差分稱為前向差分)

讓我們用一個簡單的類比來理解:

想象你開車,想知道在下午3:00整這一瞬間的瞬時速度(這就是“真的導數”)

方法A(前向差分):你記錄下3:00的里程表讀數,然后開到3:01再記錄一次讀數,用里程差除以1分鐘。你得到的是3:00到3:01這1分鐘內的平均速度,而不是3:00整的瞬時速度。這個平均速度可能接近,但絕不等于瞬時速度。

方法B(中心差分):你記錄下2:59的里程表讀數,然后開到3:01再記錄一次讀數,用里程差除以2分鐘。你得到的是2:59到3:01這2分鐘內的平均速度,而這個平均速度的中心點正好是3:00。由于你的速度不太可能在這2分鐘內劇烈波動,這個以3:00為中心的平均速度,通常會比方法A得到的那個從3:00開始的平均速度,更能準確地反映3:00整的瞬時速度。

函數定義如下

4.3.2 數值微分的例子

現在我們試著用上述的數值微分對簡單函數進行求導。先來看一個由下式表示的2次函數。

用Python來實現式(4.5),如下所示。

接下來,我們來繪制這個函數的圖像。畫圖所用的代碼如下

圖像如下

我們來計算一下這個函數在x = 5和x = 10處的導數。

這里計算的導數是f(x)相對于x的變化量,對應函數的斜率。另外,f(x) = 0.01x2 + 0.1x 的解析解是

。因 此,在 x = 5 和x = 10處,“真的導數”分別為0.2和0.3。和上面的結果相比,我們發現雖然嚴格意義上它們并不一致,但誤差非常小。實際上,誤差小到基本上可以認為它們是相等的。

4.3.3 偏導數

接下來,我們看一下式(4.6)表示的函數。雖然它只是一個計算參數的平方和的簡單函數,但是請注意和上例不同的是,這里有兩個變量。

這個式子可以用Python來實現,如下所示。

這里,我們假定向參數輸入了一個NumPy數組。函數的內部實現比較簡單,先計算NumPy數組中各個元素的平方,再求它們的和(np.sum(x**2)也可以實現同樣的處理)。我們來畫一下這個函數的圖像。結果如圖4-8所示,是一個三維圖像。

現在我們來求式(4.6)的導數。這里需要注意的是,式(4.6)有兩個變量,所以有必要區分對哪個變量求導數,即對x0和x1兩個變量中的哪一個求導數。另外,我們把這里討論的有多個變量的函數的導數稱為偏導數。用數學式表示的話,可以寫成

怎么求偏導數呢?我們先試著解一下下面兩個關于偏導數的問題。

問題1:求x0 = 3, x1 = 4時,關于x0的偏導數

問題2:求x0 = 3, x1 = 4時,關于x1的偏導數

在這些問題中,我們定義了一個只有一個變量的函數,并對這個函數進行了求導。例如,問題1中,我們定義了一個固定x1 = 4的新函數,然后對只有變量x0的函數應用了求數值微分的函數。從上面的計算結果可知,問題1的答案是6.00000000000378,問題2的答案是7.999999999999119,和解析解的導數基本一致。

像這樣,偏導數和單變量的導數一樣,都是求某個地方的斜率。不過,偏導數需要將多個變量中的某一個變量定為目標變量,并將其他變量固定為某個值。

在上例的代碼中,為了將目標變量以外的變量固定到某些特定的值上,我們定義了新函數。然后,對新定義的函數應用了之前的求數值微分的函數,得到偏導數。

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

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

相關文章

Jenkins 監控方案:Prometheus + Grafana 實踐

這兩天在運維群里面看到有人說 Jenkins 節點也可以監控,以前沒想過搞這個,現在就對公司 Jenkins 搞搞順便記錄下唄。 一、使用 Jenkins Prometheus 插件(推薦方式) 1. 安裝插件 在 Jenkins 插件管理里搜索并安裝 Prometheus Me…

用博圖FB類比c#中sdk的api

我有一個大膽的想法我準備自己做個簡單的視覺軟件來鍛煉自己的c#編程能力,我準備用到海康工業機器人官網下載的mvs軟件的sdk,聽說sdk的主要作用就是api提供了開放的接口給第三方免費調用。按照我的理解,api接口就像西門子博圖的FB塊,所謂api接…

【Leetcode】高頻SQL基礎題--1164.指定日期的產品價格

【Leetcode】高頻SQL基礎題–1164.指定日期的產品價格 要求:一開始,所有產品價格都為 10。編寫一個解決方案,找出在 2019-08-16 所有產品的價格。 以 任意順序 返回結果表。解題思路: 找到 2019-08-16 前所有有改動的產品及其最新…

Django全局異常處理全攻略

在 Django 中處理全局異常,有幾種常見的方式,通常目標是: 捕獲項目中未被單獨處理的錯誤統一返回給前端(如 JSON 響應 / 自定義錯誤頁)方便記錄日志1. 使用 Django 自帶的全局異常處理機制 Django 有一些內置的全局錯誤…

【開題答辯全過程】以電商數據可視化系統為例,包含答辯的問題和答案

個人簡介一名14年經驗的資深畢設內行人,語言擅長Java、php、微信小程序、Python、Golang、安卓Android等開發項目包括大數據、深度學習、網站、小程序、安卓、算法。平常會做一些項目定制化開發、代碼講解、答辯教學、文檔編寫、也懂一些降重方面的技巧。感謝大家的…

MyBatis入門到精通:CRUD實戰指南

1. MyBatisORM:對象關系映射O(Object):Java虛擬機中的Java對象R(Relational):關系型數據庫M(Mapping):將Java虛擬機中的Java對象映射到數據庫表中一行記錄&am…

WebRTC開啟實時通信新時代

摘要:WebRTC(Web實時通信)是一項開源技術,支持瀏覽器直接進行低延遲音視頻通信和數據傳輸,無需安裝插件。其核心技術包括RTCPeerConnection(建立點對點連接)、MediaStream(媒體流處理…

【51單片機8*8點陣顯示箭頭動畫詳細注釋】2022-12-1

緣由51單片機實現8*8滾動箭頭的程序,運行時什么圖案都沒有,甚至根本不亮 - 24小時必答區 #include<reg52.h> unsigned char code M[]{0xff,0xff,0xfe,0xfd,0xf8,0xfd,0xfe,0xff,0xff,0xff,0xfd,0xfb,0xf0,0xfb,0xfd,0xff,0xff,0xff,0xfb,0xf7,0xe0,0xf7,0xfb,0xff,0xff,0…

手撕Redis底層3-持久化機制與集群化方案

1.Redis持久化機制Redis設計了兩種持久化落盤機制&#xff1a;RDB和AOF1.1 RDB持久化RDB持久化是Redis的數據快照&#xff0c;簡單來說就是把內存中的所有數據都記錄到磁盤中&#xff0c;當Redis實例故障重啟后&#xff0c;從磁盤中讀取快照文件來恢復數據。快照文件稱為RDB文件…

mysql中null值對in子查詢的影響

1、場景 有這樣一個查詢&#xff0c;有些時候是正確的&#xff0c;有些時候沒報錯但是又查詢不到數據&#xff0c;分析數據排查后發現當user_id字段存在null值的時候查詢不到數據。select * from table1 where id in (select user_id from talbe2 where status1);2、問題 為什么…

如何在 tortoise-orm 內使用 JSON_EXTRACT

先說結論&#xff1a; # 假設 JsonField 名稱為 data&#xff0c;內容為 {"info": {"path": "我的資源創建"}} qs qs.filter(data__filter{"info.path": "我的資源創建"})我查看了 tortoise-orm 官方文檔&#xff0c;沒有這…

西門子S7-200 SMART PLC:編寫最基礎的“起保停”程序

一、什么是“起保停”電路&#xff1f;“起保停”是“啟動-保持-停止”的簡稱&#xff0c;也稱為“自鎖電路”。它是繼電器控制系統和PLC程序中最基本、最核心的控制邏輯。啟動 (Start): 由一個點動按鈕&#xff08;常開觸點&#xff09;觸發&#xff0c;使設備運行。保持 (H…

漏洞修復 Nginx SSL/TLS 弱密碼套件

掃描結果 [rootlocalhost nmap]# docker run --rm -v $(pwd)/results:/results securecodebox/nmap nmap --script ssl-enum-ciphers -p 443 xxx.cn -oX /results/output_0904.xml Starting Nmap 7.80 ( https://nmap.org ) at 2025-09-04 05:02 UTC Nmap scan report for xxx.…

ChartGPT深度體驗:AI圖表生成工具如何高效實現數據可視化與圖表美化?

最近幫運營同事做季度數據報告時&#xff0c;我差點在圖表樣式上栽跟頭 —— 明明數據都算好了&#xff0c;用 Excel 調柱狀圖的顏色、字體、坐標軸標簽&#xff0c;來回改了快半小時&#xff0c;要么字體太大擠在一起&#xff0c;要么顏色搭配顯臟&#xff0c;運營催得急&…

深入理解 JVM 字節碼文件:從組成結構到 Arthas 工具實踐

在 Java 技術體系中&#xff0c;JVM&#xff08;Java 虛擬機&#xff09;是實現 “一次編寫&#xff0c;到處運行” 的核心。而字節碼文件作為 Java 代碼編譯后的產物&#xff0c;是 JVM 執行的 “原材料”。今天&#xff0c;我們就從字節碼文件的組成結構講起&#xff0c;再結…

SoundSource for Mac 音頻控制工具

SoundSource for Mac 是一款音頻控制工具&#xff0c;中文常被稱為 音頻源管理器。它能夠精確控制系統與應用程序的音量、輸出設備和音效處理&#xff0c;讓用戶獲得比 macOS 原生更靈活的音頻管理體驗。SoundSource 既適合音樂發燒友&#xff0c;也適合日常辦公和影音娛樂用戶…

云平臺面試內容(二)

5. VPC、子網、路由、NAT網關、安全組、網絡ACL 區別與網絡隔離設計 概念區別: VPC(虛擬私有云): VPC是在公有云上劃分出的一個用戶專屬的虛擬網絡環境,相當于用戶在云上的私有數據中心。用戶可以自定義VPC的IP地址段、路由策略等。不同VPC網絡隔離,默認互不相通,確保資…

2023 arXiv MapperGPT: Large Language Models for Linking and Mapping Entities

論文基本信息 題目&#xff1a;MapperGPT: Large Language Models for Linking and Mapping Entities作者&#xff1a;Nicolas Matentzoglu, J. Harry Caufield, Harshad B. Hegde, Justin T. Reese, Sierra Moxon, Hyeongsik Kim, Nomi L. Harris, Melissa A Haendel, Christo…

Docker入門到精通:從零基礎到生產部署

前言&#xff1a;為什么你需要學習Docker&#xff1f; 想象一下&#xff0c;你開發了一個應用程序&#xff0c;在你的電腦上運行完美&#xff0c;但當你把它交給同事或部署到服務器時&#xff0c;卻出現了各種奇怪的問題。這就是著名的"在我機器上能運行"問題。 Do…

HOT100--Day15--98. 驗證二叉搜索樹,230. 二叉搜索樹中第 K 小的元素,199. 二叉樹的右視圖

HOT100–Day15–98. 驗證二叉搜索樹&#xff0c;230. 二叉搜索樹中第 K 小的元素&#xff0c;199. 二叉樹的右視圖 每日刷題系列。今天的題目是《力扣HOT100》題單。 題目類型&#xff1a;二叉樹。 關鍵&#xff1a;要深刻理解《遞歸》 98. 驗證二叉搜索樹 思路&#xff1a; …