五、誤差反向傳播法(上)

上一章中,我們介紹了神經網絡的學習,并通過數值微分計算了神經網絡的權重參數的梯度(嚴格來說,是損失函數關于權重參數的梯度)。數值微分雖然簡單,也容易實現,但缺點是計算上比較費時間。本章我們將學習一個能夠高效計算權重參數的梯度的方法——誤差反向傳播法。

正確理解誤差反向傳播法,我個人認為有兩種方法:一種是基于數學式;另一種是基于計算圖(computational graph)。

本章希望大家通過計算圖,直觀地理解誤差反向傳播法。

5.1 計算圖

5.1.1 用計算圖求解

問題1:太郎在超市買了2個100日元一個的蘋果,消費稅是10%,請計算支付金額。

可以將“2”和“1.1”分別作為變量“蘋果的個數”和“消費稅”標在○外面。

問題2:太郎在超市買了2個蘋果、3個橘子。其中,蘋果每個100日元,橘子每個150日元。消費稅是10%,請計算支付金額。

綜上,用計算圖解題的情況下,需要按如下流程進行。

1.構建計算圖。

2.在計算圖上,從左向右進行計算。

這里的第2歩“從左向右進行計算”是一種正方向上的傳播,簡稱為正向傳播(forward propagation)。正向傳播是從計算圖出發點到結束點的傳播。 既然有正向傳播這個名稱,當然也可以考慮反向(從圖上看的話,就是從右向左)的傳播。實際上,這種傳播稱為反向傳播(backward propagation)。反向傳播將在接下來的導數計算中發揮重要作用。

5.1.2 局部計算

局部計算是指,無論全局發生了什么,都能只根據與自己相關的信息輸出接下來的結果。

我們用一個具體的例子來說明局部計算。比如,在超市買了2個蘋果和其他很多東西

這里的重點是,各個節點處的計算都是局部計算。這意味著,例如蘋果和其他很多東西的求和運算(4000 + 200 4200)并不關心4000這個數字是如何計算而來的,只要把兩個數字相加就可以了。換言之,各個節點處只需進行與自己有關的計算(在這個例子中是對輸入的兩個數字進行加法運算),不用考慮全局

5.1.3 為何用計算圖解題

那么計算圖到底有什么優點呢?

一個優點就在于前面所說的局部計算。無論全局是多么復雜的計算,都可以通過局部計算使各個節點致力于簡單的計算,從而簡化問題。另一個優點是,利用計算圖可以將中間的計算結果全部保存起來(比如,計算進行到2個蘋果時的金額是200日元、加上消費稅之前的金額650日元等)。但是只有這些理由可能還無法令人信服。實際上,使用計算圖最大的原因是,可以通過反向傳播高效計算導數。

這里,假設我們想知道蘋果價格的上漲會在多大程度上影響最終的支付金額,即求“支付金額關于蘋果的價格的導數”。設蘋果的價格為x,支付金額為L,則相當于求

。這個導數的值表示當蘋果的價格稍微上漲時,支付金額會增加多少。

反向傳播使用與正方向相反的箭頭(粗線)表示。反向傳播傳遞“局部導數”,將導數的值寫在箭頭的下方。在這個例子中,反向傳播從右向左傳遞導數的值(1 1.1 2.2)。從這個結果中可知,“支付金額關于蘋果的價格的導數”的值是2.2。這意味著,如果蘋果的價格上漲1日元,最終的支付金額會增加2.2日元(嚴格地講,如果蘋果的價格增加某個微小值,則最終的支付金額將增加那個微小值的2.2倍)。

5.2 鏈式法則

5.2.1 計算圖的反向傳播

讓我們先來看一個使用計算圖的反向傳播的例子。假設存在y = f(x)的計算,這個計算的反向傳播如圖5-6所示。

如圖所示,反向傳播的計算順序是,將信號E乘以節點的局部導數

,然后將結果傳遞給下一個節點。這里所說的局部導數是指正向傳播中y = f(x)的導數,也就是y關于x的導數

。比如,假設y = f(x) =

, 則局部導數為

= 2x。把這個局部導數乘以上游傳過來的值(本例中為E),然后傳遞給前面的節點。

5.2.2 什么是鏈式法則

介紹鏈式法則時,我們需要先從復合函數說起。復合函數是由多個函數構成的函數。比如,z = (x + y) 2 是由式(5.1)所示的兩個式子構成的。

鏈式法則是關于復合函數的導數的性質,定義如下。

如果某個函數由復合函數表示,則該復合函數的導數可以用構成復合函數的各個函數的導數的乘積表示。

這就是鏈式法則的原理,乍一看可能比較難理解,但實際上它是一個非常簡單的性質。以式(5.1)為例,

z關于x的導數)可以用

z關于t 的導數)和

t關于x的導數)的乘積表示。用數學式表示的話,可以寫成式(5.2)。

式(5.2)中的? t正好可以像下面這樣“互相抵消”,所以記起來很簡單

所以最后要計算的結果

5.2.3 鏈式法則和計算圖

現在我們嘗試將式(5.4)的鏈式法則的計算用計算圖表示出來。如果用“**2”節點表示平方運算的話,則計算圖如圖5-7所示。

根據鏈式法則,

成立,對應“z關于x的導數”。也就是說,反向傳播是基于鏈式法則的。

5.3 反向傳播

5.3.1 加法節點的反向傳播

這里以z = x + y為對象,觀察它的反向傳播。z = x + y的導數可由下式(解析性地)計算出來。

在圖5-9中,反向傳播將從上游傳過來的導數(本例中是

)乘以1,然后傳向下游。也就是說,因為加法節點的反向傳播只乘以1,所以輸入的值會原封不動地流向下一個節點。

另外,本例中把從上游傳過來的導數的值設為

。這是因為,如圖5-10 所示,我們假定了一個最終輸出值為L的大型計算圖。

的計算位于這個大型計算圖的某個地方,從上游會傳來

,并向下游傳遞

現在來看一個加法的反向傳播的具體例子。假設有“10 + 5=15”這一計算,反向傳播時,從上游會傳來值1.3。用計算圖表示的話,如圖5-11所示。

5.3.2 乘法節點的反向傳播

這里我們考慮z = xy。這個式子的導數用式(5.6)表示。

乘法的反向傳播會將上游的值乘以正向傳播時的輸入信號的“翻轉值”后傳遞給下游。翻轉值表示一種翻轉關系,如圖5-12所示,正向傳播時信號是x的話,反向傳播時則是y;正向傳播時信號是y的話,反向傳播時則是x

現在我們來看一個具體的例子。比如,假設有“10 × 5 = 50”這一計算,反向傳播時,從上游會傳來值1.3。用計算圖表示的話,如圖5-13所示。

因為乘法的反向傳播會乘以輸入信號的翻轉值,所以各自可按1.3 × 5 = 6.5、1.3 × 10 = 13計算。另外,加法的反向傳播只是將上游的值傳給下游,并不需要正向傳播的輸入信號。但是,乘法的反向傳播需要正向傳播時的輸入信號值。因此,實現乘法節點的反向傳播時,要保存正向傳播的輸入信號。

5.3.3 蘋果的例子

蘋果的例子(2個蘋果和消費稅)。這里要解的問題是蘋果的價格、蘋果的個數、消費稅這3個變量各自如何影響最終支付的金額。這個問題相當于求“支付金額關于蘋果的價格的導數”“支付金額關于蘋果的個數的導數”“支付金額關于消費稅的導數”。用計算圖的反向傳播來解的話,求解過程如圖5-14所示。

結果可知,蘋果的價格的導數是2.2,蘋果的個數的導數是110,消費稅的導數是200。這可以解釋為,如果消費稅和蘋果的價格增加相同的值,則消費稅將對最終價格產生200倍大小的影響,蘋果的價格將產生2.2倍大小的影響。

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

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

相關文章

Rust Axum 快速上手指南(靜態網頁和動態網頁2024版)

本文基于 Axum 0.7.5(當前穩定版)、tower-http 0.5.2、MiniJinja 0.7.2 編寫,涵蓋生產環境核心場景:tower-http Layer 疊加與數據傳遞、靜態網頁服務、MiniJinja 動態模板渲染,并重點解析請求 / 應答在多 Layer 中的流…

Golang語言設計理念

起源 Golang語言始于2007年,是一門編譯型、靜態類型、并發友好 的語言,由Robert Griesemer( 羅伯特格里森、圖靈獎獲得者、C 語法聯合發明人、Unix 之父)、Rob Pike( 羅布派克、Plan 9 操作系統領導者、UTF-8 編碼的最…

深入掌握 nsenter:Linux命名空間操作的利器

#作者:朱雷 文章目錄1、簡介2、功能與用途2.1. 核心功能2.1.1. 進入命名空間2.1.2. 支持多種命名空間2.1.3. 容器調試3、安裝3.1. 依賴包3.2. 權限要求3.3. 命令用法與示例3.3.1. 基本語法3.3.2. 常用選項包括:3.3.3. 示例4、 應用場景與優勢4.1. 容器調…

Ubuntu Qt x64平臺搭建 arm64 編譯套件

環境: 主機平臺:Ubuntu22.04.5 x86_64 目標平臺:IMX8QM Ubuntu22.04.5 arm64 Qt版本:Qt6.5.3 LST GUI實現:QML 一、獲取Ubuntu22.04.5 x86_64 系統鏡像文件 1、鏡像下載與安裝 使用國內鏡像下載對應版本的Ubuntu鏡像…

mysql第五天學習 Mysql全局優化總結

Mysql全局優化總結 從上圖可以看出SQL及索引的優化效果是最好的,而且成本最低,所以工作中我們要在這塊花更多時間。 補充一點配置文件my.ini或my.cnf的全局參數: 假設服務器配置為: CPU:32核內存:64GDISK…

leetcode hot100 二叉搜索樹

二叉搜索樹的第k小的數class Solution:def kthSmallest(self, root: Optional[TreeNode], k: int) -> int:# 二叉搜索樹的中序遍歷是 升序排列的, 求第k小的,即第k個數self.res []def fun(root):if not root:returnfun(root.left)if root:self.res.a…

從Sonnet到Opus:一次解決RAG知識庫流式輸出難題的探索

又到周末,還得消耗消耗 ?? anyrouter 上的Claude資源,萬一哪天都不能用了,也是浪費。 2025/9/5,Claude AI 的母公司 Anthropic 發布了一項新政策:即日起,Anthropic將不再對中國控股公司及其海外子公司開放…

「數據獲取」中國科技統計年鑒(1991-2024)Excel

02、數據詳情數據名稱:《中國科技統計年鑒》(1991-2024年)數據年份:1991-202403、數據截圖 04、獲取方式(獲取方式看綁定的資源)

SimLingo:純視覺框架下的自動駕駛視覺 - 語言 - 動作融合模型

摘要 本文深入探討了 SimLingo,一個在自動駕駛領域具有開創性意義的視覺-語言-動作一體化模型。SimLingo 創新性地將自動駕駛、語言理解和指令感知控制整合到一個統一的純攝像頭框架中,顯著提升了自動駕駛系統在復雜環境中的感知、決策與執行能力。該模…

第五十四天(SQL注入數據類型參數格式JSONXML編碼加密符號閉合復盤報告)

#SQL注入產生原理: 代碼中執行的SQL語句存在可控變量導致 #常見SQL注入的利用過程: 1、判斷數據庫類型 2、判斷參數類型及格式 3、判斷數據格式及提交 4、判斷數據回顯及防護 5、獲取數據庫名,表名,列名 5、獲取對應數據及…

VMWare上搭建Hive集群

文章目錄1. MySQL安裝2. 安裝Hive集群3. 使用Hive客戶端4. 實戰總結本實戰在VMware上搭建Hive集群,集成MySQL作為元數據存儲,完成Hive環境配置、元數據初始化及HDFS倉庫目錄創建,實現Hive on Hadoop的SQL查詢能力,為大數據分析提供…

Android網絡之WIFI技術網絡模型概述

文章目錄術語1、WLAN與WIFI2、802.11 WIFI無線網絡標準演進3、WIFI5、WIFI6和WIFI7的最高速率對比4、WIFI網絡中的各個角色(元件)1)網絡拓撲架構圖5、802.11權威指南1)OSI與TCP/IP2)IEEE 802.11協議簇介紹3&#xff09…

游戲中的設計模式——第三篇 簡單工廠模式

5. 簡單工廠模式 5.1 簡單工廠模式的定義 簡單工廠模式的核心是定義一個創建對象的接口,將對象的創建和本身的業務邏輯分離,降低系統的耦合度,使得兩個修改起來相對容易些,當以后實現改變時,只需要修改工廠類即可。 5.…

基于SVN搭建企業內部知識庫系統實踐

一、準備工作 CentOS 7 服務器:確保你有 root 或 sudo 權限,可以訪問該服務器。Windows 客戶端:你將需要在 Windows 上安裝 TortoiseSVN 客戶端來與 SVN 服務器交互。防火墻:確保你的防火墻已開放 3690 端口,用于 SVN…

SQL注入7----(盲注與回顯)

一.前言 在我們的注入語句被帶入數據庫查詢但卻什么都沒有返回的情況我們該怎么辦?例如應用程序就會返回 一個"通用的"的頁面,或者重定向一個通用頁面(可能為網站首頁)。這時,我們之前學習的SQL注入辦 法就…

尚硅谷宋紅康JVM全套教程(詳解java虛擬機)

https://www.bilibili.com/opus/1071553679925968898 案例7:日均百萬訂單系統JVM參數設置 https://github.com/wei198621/jvm_by_atguigu https://github.com/xftxyz2001/atguigu-jvm/blob/main/JavaYouthdocsJVM/%E7%AC%AC1%E7%AB%A0-JVM%E4%B8%8EJava%E4%BD%…

鴻蒙NEXT開發實戰:圖片顯示、幾何圖形與自定義繪制詳解

探索HarmonyOS NEXT強大的圖形渲染能力,從圖片展示到自定義繪圖 HarmonyOS NEXT作為華為自主研發的操作系統,為開發者提供了一套豐富而強大的圖形渲染能力。無論是顯示圖片、繪制幾何圖形,還是實現復雜的自定義繪圖,鴻蒙都提供了簡…

python + Flask模塊學習 2 接收用戶請求并返回json數據

用到的模塊還是flask,用到的類有Flask, request, jsonfiy 🙂 目錄 1、GET請求 2、POST請求 1、表單格式 2、json格式 就醬,也比較簡單,下一篇說簡單的授權,簡單來說就是比如用戶付費買了服…

國內外常用的免費BUG管理工具選型

幫助用戶根據自身情況做決定,比如團隊規模、技術能力、是否需要移動端支持等。避免只是羅列工具,而是提供實際選擇的維度。 國內外常用的免費BUG管理工具選擇非常豐富,從輕量級到功能全面型都有覆蓋。我將它們分為幾類,并詳細介紹…

JavaScript的事件循環機制

1.事件循環的理解JavaScript是單線程的,意味著它一次只能執行一個任務。而事件循環就是去協調在JavaScript環境中運行的同步任務、異步任務(微任務、宏任務)的執行順序的一種機制。它是 JavaScript 實現單線程非阻塞異步執行的核心。2.事件循環的執行順序同步任務—…