卷積神經網絡 - 參數學習

本文我們通過兩個簡化的例子,展示如何從前向傳播、損失計算,到反向傳播推導梯度,再到參數更新,完整地描述卷積層的參數學習過程。

一、例子一

我們構造一個非常簡單的卷積神經網絡,其結構僅包含一個卷積層和一個輸出(不使用激活函數,為了便于數學推導),損失函數采用均方誤差(MSE)。

1. 設定問題

輸入數據
假設輸入為一幅小的灰度圖像 X:

例如,令

卷積核
使用一個 2×2 的卷積核 W:

并設有偏置 b。

卷積操作
采用“valid”卷積(不填充),在這種情況下,由于輸入和核大小都為2×2,卷積操作僅得到一個輸出標量 O:

O=(w1?x11+w2?x12+w3?x21+w4?x22)+b.

我們為了簡化,不使用激活函數(即線性激活),這樣前向計算就很直觀。

目標輸出
設定目標值為 y(比如標簽值),假設 y=10。

損失函數
我們使用均方誤差(MSE):

2. 前向傳播計算

代入示例數據:

  • 初始假設卷積核權重和偏置(假設初始值為):

計算輸出 O:

損失:

3. 梯度推導(反向傳播)

我們需要計算損失 L?關于每個參數的梯度,即

步驟1:計算損失對輸出 O?的梯度

代入數據:O?y=4.5?10=?5.5.

步驟2:計算輸出 O?關于各參數的梯度

步驟3:鏈式法則計算損失對各參數的梯度

根據鏈式法則:

代入數值:

4. 參數更新(梯度下降)

設定學習率 η,例如 η=0.01,則更新規則為:

更新后的參數:

更新后,新的卷積核參數為:

5. 訓練過程總結

整個訓練過程如下:

  1. 前向傳播:對輸入圖像進行卷積計算,得到輸出 O。
  2. 計算損失:利用損失函數(MSE)計算模型輸出與目標值之間的誤差 L。
  3. 反向傳播:根據鏈式法則計算損失對各參數(卷積核權重和偏置)的梯度。
  4. 參數更新:使用梯度下降(或其他優化算法)更新參數,向降低損失的方向調整。
  5. 迭代訓練:重復上述步驟,遍歷整個訓練數據集,直到損失收斂或達到設定的迭代次數。

這個例子雖然非常簡單(只有一個卷積層,一個輸出單元),但它清楚展示了如何從前向傳播計算輸出、如何利用損失函數計算誤差、如何通過反向傳播推導每個參數的梯度,并最終利用梯度下降更新參數。實際的卷積神經網絡通常包含多個卷積層、池化層和全連接層,但每個部分的參數學習原理都是類似的——都是通過不斷地計算梯度并更新參數,使得模型能夠更好地擬合數據,從而實現準確的圖像分類、檢測等任務。

二、例子二

以下是一個具體的卷積神經網絡(CNN)訓練過程示例,詳細展示前向傳播、損失計算、反向傳播、參數更新的每個步驟。我們以簡單的數字識別任務為例,使用極簡網絡結構便于手動驗證。

示例設定

1. 輸入數據
  • 輸入圖像:2×2的灰度圖像,表示數字“1”

  • 真實標簽:y_true=[1,0](二分類,索引0為“非1”,索引1為“是1”)

2. 網絡結構
  • 卷積層:1個2×2卷積核,無填充,步長=1

    • 初始權重:

    • 激活函數:ReLU(ReLU(x)=max?(0,x))

  • 全連接層:輸入1個神經元 → 輸出2個神經元

    • 初始權重:

    • 激活函數:Softmax(輸出概率)

3. 超參數
  • 學習率:η=0.1

  • 損失函數:交叉熵損失(Cross-Entropy Loss)

(一)前向傳播(Forward Pass)

1. 卷積層計算
  • 卷積操作
    輸入?X?與卷積核?W_conv 逐元素相乘后求和,加偏置:

    Conv輸出=(0.2×0.5+0.8×(?0.3)+0.6×0.2+0.1×0.4)+0.1=0.1?0.24+0.12+0.04+0.1=0.12
  • ReLU激活

    Aconv=ReLU(0.12)=0.12
2. 全連接層計算
  • 線性變換

  • Softmax激活

    預測結果:類別1(“是1”)的概率為0.628,類別0為0.372。

(二)損失計算(Loss Calculation)

  • 交叉熵損失

(三)反向傳播(Backward Pass)

1. 全連接層梯度
  • Softmax梯度

  • 權重梯度

  • 偏置梯度

2. 卷積層梯度
  • ReLU梯度

  • 傳遞到卷積層的梯度

  • 卷積核權重梯度

  • 卷積層偏置梯度

(四)參數更新(Parameter Update)

1. 全連接層參數
  • 權重更新

  • 偏置更新

2. 卷積層參數
  • 權重更新

  • 偏置更新

(五)更新后效果驗證

1. 前向傳播再計算
  • 新卷積輸出

    Conv輸出=(0.2×0.4933+0.8×(?0.3268)+0.6×0.1799+0.1×0.3967)+0.0665≈0.0987

    ReLU激活后:Aconv=0.0987

  • 新全連接輸出

    Softmax概率:

2. 新損失值

New?Loss=?log?(0.581)≈0.542(比原始損失0.465反而增大)

(六)結果分析

  1. 損失未下降的原因

    • 單步更新局限性:梯度下降可能需要多步迭代才能收斂。

    • 學習率過大:學習率?η=0.1 可能跳過最優解,可嘗試更小值(如0.05)。

    • 網絡容量限制:極簡模型可能無法有效擬合復雜模式。

  2. 參數學習方向驗證

(七)關鍵總結

  • 前向傳播:數據從輸入到輸出的逐層變換。

  • 反向傳播:通過鏈式法則計算梯度,明確參數調整方向。

  • 參數更新:沿負梯度方向微調參數,逐步逼近最優解。

  • 迭代優化:需多次迭代(Epoch)才能顯著降低損失。

通過這個極簡示例,可直觀理解CNN參數學習的動態過程。實際訓練中需結合批量數據、更復雜網絡結構和優化策略(如Adam、學習率衰減)提升效果。

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

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

相關文章

.NET三層架構詳解

.NET三層架構詳解 文章目錄 .NET三層架構詳解引言什么是三層架構表示層(Presentation Layer)業務邏輯層(Business Logic Layer,BLL)數據訪問層(Data Access Layer,DAL) .NET三層架構…

Redis實戰常用二、緩存的使用

一、什么是緩存 在實際開發中,系統需要"避震器",防止過高的數據訪問猛沖系統,導致其操作線程無法及時處理信息而癱瘓. 這在實際開發中對企業講,對產品口碑,用戶評價都是致命的。所以企業非常重視緩存技術; 緩存(Cache):就是數據交換的緩沖區&…

STM32八股【2】-----ARM架構

1、架構包含哪幾部分內容 寄存器處理模式流水線MMU指令集中斷FPU總線架構 2、以STM32為例進行介紹 2.1 寄存器 寄存器名稱作用R0-R3通用寄存器用于數據傳遞、計算及函數參數傳遞;R0 也用于存儲函數返回值。R4-R12通用寄存器用于存儲局部變量,減少頻繁…

effective Java 學習筆記(第二彈)

effective Java 學習筆記(第一彈) 整理自《effective Java 中文第3版》 本篇筆記整理第3,4章的內容。 重寫equals方法需要注意的地方 自反性:對于任何非空引用 x,x.equals(x) 必須返回 true。對稱性:對于…

mac命令行快捷鍵

光標移動 Ctrl A: 將光標移動到行首。Ctrl E: 將光標移動到行尾。Option 左箭頭: 向左移動一個單詞。Option 右箭頭: 向右移動一個單詞。 刪除和修改 Ctrl K: 刪除從光標到行尾的所有內容。Ctrl U: 刪除從光標到行首的所有內容。Ctrl W: 刪除光標前的一個單詞。Ctrl …

CentOS 7部署主域名服務器 DNS

1. 安裝 BIND 服務和工具 yum install -y bind bind-utils 2. 配置 BIND 服務 vim /etc/named.conf 修改以下配置項: listen-on port 53 { any; }; # 監聽所有接口allow-query { any; }; # 允許所有設備查詢 3 . 添加你的域名區域配置 …

優化 SQL 語句方向和提升性能技巧

優化 SQL 語句是提升 MySQL 性能的關鍵步驟之一。通過優化 SQL 語句,可以減少查詢時間、降低服務器負載、提高系統吞吐量。以下是優化 SQL 語句的方法、策略和技巧: 一、優化 SQL 語句的方法 1. 使用 EXPLAIN 分析查詢 作用:查看 SQL 語句的執行計劃,了解查詢是如何執行的…

C++ 多線程簡要講解

std::thread是 C11 標準庫中用于多線程編程的核心類,提供線程的創建、管理和同步功能。下面我們一一講解。 一.構造函數 官網的構造函數如下: 1.默認構造函數和線程創建 thread() noexcept; 作用:創建一個 std::thread 對象,但…

Vscode HTML5新增元素及屬性

一、?HTML5 語義化標簽 HTML5 語義化標簽&#xff08;Semantic Elements&#xff09;是一組 ?具有明確含義的 HTML 元素?&#xff0c;通過標簽名稱直接描述其內容或結構的功能&#xff0c;而非僅作為樣式容器&#xff08;如 <div> 或 <span>&#xff09;。它們旨…

【PostgreSQL教程】PostgreSQL 特別篇之 語言接口Python

博主介紹:?全網粉絲22W+,CSDN博客專家、Java領域優質創作者,掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域? 技術范圍:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大數據、物聯網、機器學習等設計與開發。 感興趣的可…

Three學習入門(四)

9-Three.js 貼圖與材質學習指南 環境準備 <!DOCTYPE html> <html> <head><title>Three.js Texture Demo</title><style> body { margin: 0; } </style> </head> <body><script src"https://cdnjs.cloudflare.…

前端NVM安裝

https://v0.dev/chat/settings 本地啟動環境 1安裝 nvm 2安裝node nvm install v18.19.0 nvm install v20.9.0 nvm use 18 node -v 3安裝 pnpm npm install -g pnpm 或者 npm i -g pnpm 4啟動 代碼 目錄下 執行 pnpm i pnpm run dev 4.1到代碼目錄下 4.2直接cmd…

藍橋杯算法精講:二分查找實戰與變種解析

適合人群&#xff1a;藍橋杯備考生 | 算法競賽入門者 | 二分查找進階學習者 目錄 一、二分查找核心要點 1. 算法思想 2. 適用條件 3. 算法模板 二、藍橋杯真題實戰 例題&#xff1a;分巧克力&#xff08;藍橋杯2017省賽&#xff09; 三、二分查找變種與技巧 1. 查找左邊…

cmd命令查看電腦的CPU、內存、存儲量

目錄 獲取計算機硬件的相關信息的命令分別的功能結果展示結果說明獲取計算機硬件的相關信息的命令 wmic cpu get name wmic memorychip get capacity wmic diskdrive get model,size,mediaType分別的功能 獲取計算機中央處理器(CPU)的名稱 獲取計算機內存(RAM)芯片的容量…

SCI論文閱讀指令(特征工程)

下面是一個SCI論文閱讀特征工程V3.0&#xff0c;把指令輸入大模型中&#xff0c;并上傳PDF論文&#xff0c;就可以幫你快速閱讀論文。 優先推薦kimi&#xff0c;當然DeepSeek、QwQ-32B等大語言模型也可以。測試了一下總結的還不錯&#xff0c;很詳細。 請仔細并深入地閱讀所提…

如何監控 SQL Server

監控 SQL Server 對于維護數據庫性能、確保數據可用性和最大限度地減少停機時間至關重要。隨著企業越來越依賴數據驅動的決策&#xff0c;高效的SQL Server監控策略能顯著提升組織生產力和用戶滿意度。 為什么要監控 SQL Server SQL Server 是許多關鍵應用程序的支柱&#xf…

python腳本處理excel文件

1.對比perl和python 分別嘗試用perl和python處理excel文件&#xff0c;發現perl的比較復雜&#xff0c;比如說read excel就有很多方式 Spreadsheet::Read use Spreadsheet::ParseExcel 不同的method&#xff0c;對應的取sheet的cell方式也不一樣。更復雜的是處理含有中文內…

3、pytest實現參數化

在 pytest 中&#xff0c;參數化&#xff08;parametrization&#xff09;是一種強大的功能&#xff0c;可以讓你用不同的輸入數據重復執行同一個測試函數。這種功能非常有用&#xff0c;可以幫助你顯著減少重復代碼并提高測試覆蓋率。 參數化的主要作用是&#xff1a; 測試多…

Cursor:超強AI變成神器

是一個強大的 AI 編程助手&#xff0c;可以幫助開發者快速地編寫、編輯和討論代碼&#xff0c;支持 Python、Java、C# 等多種編程語言&#xff0c;并且可以與 GitHub、Slack 等平臺集成。 Cursor 是什么&#xff1f; 想象一下&#xff0c;你有一個能把你的創意變成現實的造夢 …

畫秒殺系統流程圖

秒殺系統流程圖 秒殺系統關鍵點 高并發處理: 使用網關&#xff08;如 Nginx&#xff09;進行流量限流&#xff0c;避免過載。分布式鎖或 Redis 原子操作控制并發。 活動狀態檢查: Redis 存儲活動狀態&#xff08;如 seckill:activity:1:status&#xff09;&#xff0c;快速…