深度學習 | CNN 基本原理

目錄

    • 1?什么是 CNN
    • 2?輸入層
    • 3?卷積層
      • 3.1?卷積操作
      • 3.2?Padding 零填充
      • 3.3?處理彩色圖像
    • 4?池化層
      • 4.1?池化操作
      • 4.2?池化的平移不變性
    • 5?全連接層
    • 6?輸出層


前言

  • 這篇博客不夠詳細,因為沒有介紹卷積操作的具體計算;
  • 但是它介紹了 CNN 各層次的功能,提供了一個全局的視野。

參考博客

  • 卷積神經網絡(CNN)詳細介紹及其原理詳解


1?什么是 CNN

卷積神經網絡 CNN 通常被用于圖像處理,比如下圖的手寫數字辨識過程:

在這里插入圖片描述

可以看出,整個過程由以下幾層組成:

  • 輸入層:輸入圖像等信息;
  • 卷積層:用于提取圖像的底層特征;
  • 池化層:防止過擬合,即將數據的維度減小;
  • 全連接層:匯總卷積層和池化層得到的圖像的底層特征和信息;
  • 輸出層:根據全連接層的信息得到概率最大的結果。

其中最重要的就是卷積層,這也是卷積神經網絡名稱的由來。接下來,我們將對這些層進行詳細的介紹。

個人理解:上圖中的紅色方框表明,黑色線所指向位置的元素是由紅色方框內的元素計算出來的。



2?輸入層

CNN 的輸入層用于將輸入的圖像轉換為由像素值構成的二維矩陣,并存儲該二維矩陣以等待后續操作。與人眼不同,計算機能夠處理的圖像是一個二維矩陣,該二維矩陣是由圖像的每一個像素的像素值組成的。如下圖所示,手寫數字 8 8 8 的圖像被計算機讀取為一個二維矩陣:

在這里插入圖片描述
圖 (a) 是一個灰度圖像,這是因為其每個像素值的范圍在 [ 0 , 255 ] [0,255] [0,255] 之間,表示其顏色的強弱程度。除灰度圖像外還有黑白圖像,黑白圖像的每個像素值要么是 0 0 0,要么是 255 255 255。而日常生活中最常見的是 R G B \mathrm{RGB} RGB 圖像,這種圖像有三個通道,分別是:紅色、綠色、藍色。每個通道的每個像素值的范圍也是在 [ 0 , 255 ] [0,255] [0,255] 之間,表示其顏色的強弱程度。

由于灰度圖像的值范圍較小、顏色較單一,因此比較好操作,所以我們通常處理的都是灰度圖像。在某些情況下, R G B \mathrm{RGB} RGB 圖像在輸入神經網絡之前也會被轉化為灰度圖像,這就是因為處理三個通道的計算量非常大。不過隨著計算機性能的高速發展,現在有些神經網絡也可以直接處理 R G B \mathrm{RGB} RGB 圖像。



3?卷積層

一旦圖片被輸入網絡,它將被轉換成一個二維矩陣。為了提取該矩陣中的特征,卷積操作被應用于該矩陣。該操作通過計算每個像素與卷積核(Convolution Kernel)的點積,為圖像中具有特征的區域賦予高值,為不具有特征的區域賦予低值。

注意:想要提取什么樣的特征,就要使用什么樣的卷積核。比如:想要提取原始圖像中眼睛這一特征,就要使用具有眼睛特征的卷積核。

3.1?卷積操作

卷積核本質上也是一個二維矩陣,其尺寸通常小于或等于輸入圖像的二維矩陣。在卷積操作中,卷積核在輸入圖像矩陣上逐像素移動,并在每次移動后執行像素值的點積運算。將所有這些點積的和賦予當前卷積核位置對應的輸出矩陣中的相應像素值。如下圖所示:

在這里插入圖片描述

通過卷積核不斷地移動和計算(逐元素相乘再相加),我們得到了一個新的二維矩陣,該二維矩陣被稱為特征圖(Feature Map),也就是圖像中最有用的特征。此外,不難看出卷積操作是一個降維的過程,因為特征圖的維度比原始圖像的二維矩陣小。

在上圖中,紅色矩陣是圖像的二維矩陣,藍色矩陣是卷積核,紫色矩陣是特征圖。

為了進行更加生動形象的說明,我們以提取人臉圖像中的眼睛為例,選取眼睛作為卷積核,并在整個頭部圖像上移動,以識別和定位眼睛的位置。如下圖 (a)(b)(c) 所示:

在這里插入圖片描述

為了強調我們提取到的人眼特征,我們可以假設高值為白色,低值為黑色,并對特征圖進行上色處理,如上圖 (d) 所示。說明:由于黑色實在是太辣眼睛了,因此我實際上用的是灰色。

由向量乘法的幾何意義可知,兩個向量越相似,其乘積結果越大。因此當卷積核移動到眼睛部分時,它們的卷積結果較大,即上圖中的 100 100 100



3.2?Padding 零填充

可以從上一節的動圖看出,邊緣的像素只被計算了一次,而中間的像素被計算了多次,從而造成了邊緣特征的丟失。為了克服這一問題,通常在原始輸入圖像的二維矩陣周圍添加額外的邊緣像素,即進行零填充(Padding)。如此一來,每個像素都能夠獲得相同的計算機會,確保了特征圖不會丟失邊緣區域的重要特征。

P a d d i n g = 1 \mathrm{Padding = 1} Padding=1,即擴展 1 1 1

在這里插入圖片描述

P a d d i n g = 2 \mathrm{Padding = 2} Padding=2,即擴展 2 2 2

在這里插入圖片描述

注意:上面兩張動圖中,藍色矩陣是圖像的二維矩陣,透明灰色矩陣是卷積核,綠色矩陣是特征圖。



3.3?處理彩色圖像

已知每張彩色圖像都有三個通道,即三個二維矩陣。假設我們使用兩組卷積核來提取圖像特征,如下圖所示:

在這里插入圖片描述

其中一組卷積核對應提取出一個特征圖,每組中的一個卷積核對應提取一個通道的特征。不難看出,有多少組卷積核就會有多少個特征圖。特征圖中的一個元素,等于三個通道的卷積結果之和,再加上偏置項。比如:上圖中的 1 1 1 等于 1 + ( ? 1 ) + 0 + 1 1+(-1)+0+1 1+(?1)+0+1。偏置項 b i a s \mathrm{bias} bias 就是每組最后的那個 1 × 1 1\times 1 1×1 矩陣。

注意:特征圖的個數等于卷積核的組數,而不是卷積核的個數!



4?池化層

在上一節中,我們講到有多少組卷積核就會有多少個特征圖。但是隨著特征圖的增多,我們必須考慮一個重要的問題:并非所有的特征圖都是必需的。而且多余的特征圖可能會帶來如下兩個問題:

  • 過擬合
  • 維度過高

為了解決這個問題,我們使用了池化層。

4.1?池化操作

池化層又稱為下采樣,其作用在于在卷積操作之后對特征圖進行降維,通過提取最顯著的特征信息來減少數據量,從而起到減小過擬合和降低維度的作用。

池化過程類似于卷積過程,也是讓一個固定大小的窗口在圖片上進行移動,每次我們選取窗口內最具代表性的特征。那么如何提取出最具代表性的特征呢?通常有以下兩種方法。

最大池化

最大池化是指每次選取窗口內所有值的最大值,認為這個最大值就是當前位置最具代表性的特征。該過程如下圖所示:
在這里插入圖片描述
參數說明:

  • k e r n e l ? s i z e = 2 \mathrm{kernel_{-}size} = 2 kernel??size=2:是指窗口的維度為 2 × 2 2\times2 2×2
  • s t r i d e = 2 \mathrm{stride} = 2 stride=2:是指窗口每次移動兩格位置;
  • p a d d i n g = 0 \mathrm{padding} = 0 padding=0:是指零填充的圈數,如果值為 0 0 0 則表明沒有擴展。

平均池化

平均池化是指每次選取窗口內所有值的平均值,即考慮了每個位置的值對該位置特征的影響。該過程如下圖所示:

在這里插入圖片描述
池化層的優點總結如下:

  • 減少參數量的同時保留圖像的原始特征;
  • 有效地防止過擬合;
  • 為 CNN 帶來平移不變性;

前兩個優點我們之前已經介紹過了,那么什么又是平移不變性呢?



4.2?池化的平移不變性

如圖 (a) 所示,兩張圖片的內容都是人臉,但是下圖的人臉稍稍左移了一點。如圖 (b) 所示,經過卷積操作后得到各自的特征圖。

在這里插入圖片描述

其中上圖的眼睛特征的位置正常,下圖的眼睛特征的位置稍稍左移了一點。盡管人類能夠識別出眼睛的位置,但是當通過神經網絡進行計算時,可能會引入誤差,原因是網絡未能在預期位置上正確地識別出眼睛。針對這種情況,應當采取何種措施呢?

如圖 (c) 所示,使用池化層執行池化處理后,觀察到盡管在池化前兩張圖像的眼睛特征位于不同位置,但經過池化處理后,這些特征的位置均統一。這極大地便利了后續神經網絡的計算,并且體現了池化操作的平移不變性。



5?全連接層

假設在上述頭部圖像示例中,我們已經通過卷積操作和池化操作提取了眼睛、鼻子和嘴巴的特征。若要利用這些特征來判斷圖像是否為人體頭部,需要對所有提取出的特征圖進行 “展平” 操作,即將其維度轉換為 1 × n 1\times n 1×n 的形式,該過程被稱為全連接。如下圖所示:

在這里插入圖片描述

也就是說,全連接層將提取出的特征圖展開成一維向量。隨后通過計算產生一個概率值,該值表示原始圖像是人體頭部圖像的概率。

個人理解:上圖中每個特征圖的維度是 5 × 5 5\times 5 5×5,展開成一維向量后的維度是 1 × 25 1\times 25 1×25,拼接起來送入神經元時的維度是 1 × 75 1\times 75 1×75



6?輸出層

輸出層用于對全連接層輸出的一維向量進行計算,如下圖所示:

在這里插入圖片描述

其中的計算可能是線性的,也可能是非線性的。在深度學習中,鑒于通常需要處理多分類任務,輸出層每個位置都會產生一個概率值,代表屬于當前位置對應類別的概率。選擇概率值最大的類別作為最終的識別結果。在訓練過程中,通過不斷調整網絡的參數,提高識別的準確率。



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

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

相關文章

golang AST語法樹解析

1. 源碼示例 package mainimport ("context" )// Foo 結構體 type Foo struct {i int }// Bar 接口 type Bar interface {Do(ctx context.Context) error }// main方法 func main() {a : 1 }2. Golang中的AST golang官方提供的幾個包,可以幫助我們進行A…

[雜談] 關于 Mac 電腦使用 Logitech 鼠標導致 Vscode 側鍵無法進行代碼前進、回退的問題

我個人使用的是一臺 14 寸的 Mac_Apple_M1,外接鍵盤顯示器羅技的 MX Master 3 for Mac 的鼠標。 之前一直使用的 GoLand 開發,查看代碼時進行代碼跳轉就很方便,滾輪鍵 進入函數方法,鼠標側鍵進行前進、后退。看代碼完全可以右手單…

【大模型入門】LLM-AI大模型介紹

大語言模型 (LLM) 背景 🍹大語言模型 (Large Language Model) 是一種人工智能模型, 它們通常包含數千億甚至更多的參數,并在大規模數據集上進行訓練。大語言模型可以處理多種自然語言任務,如文本分類、問答、翻譯、對話等等。 自然語言模型…

qt explicit 啥意思

explicit 在 Qt 和 C 中是一個關鍵字,主要用于修飾類的構造函數。其含義和用法可以歸納為以下幾點: 意義: explicit 英文直譯為“明確的”、“顯式的”。在 C 中,當一個構造函數只接受一個參數時,它可能會被編譯器用于…

【Nail it】ROS1 ROS2 通信(ros2/ros1_bridge)

情況說明:目標是實現ros2容器和ros1主機的通信,可以起一個ros1容器作為橋梁(若是在一個主機同時包含ros1&ros2,配置更加方便). 1.起一個 noetic 的容器 docker run -it --network host --name my_bridge ros:noe…

Java中的成員內部類

Java中的成員內部類(也稱為非靜態內部類)是定義在另一個類(外部類)內部的類。 這種內部類與它的外部類之間有著緊密的聯系,主要體現在幾個方面:它可以訪問外部類的所有成員(包括私有成員&#…

C++小白Python選手2小時入門C++

學習鏈接:C入門/2小時從C到C快速入門(2018,C教程) C在C語言的基礎上增加了面向對象和通用算法語言特征。 C頭文件不必是.h結尾,C頭文件舉例:cmath、cstdio注釋:單行//、多行/**/為了防止名字沖…

MQ基礎1

對應B站視頻: MQ入門-01.MQ課程介紹_嗶哩嗶哩_bilibili 微服務一旦拆分,必然涉及到服務之間的相互調用,目前我們服務之間調用采用的都是基于OpenFeign的調用。這種調用中,調用者發起請求后需要等待服務提供者執行業務返回結果后…

【JavaScript腳本宇宙】強大的自然語言處理:六款JavaScript庫詳解

從語義到實體:深入了解JavaScript自然語言處理庫 前言 隨著人工智能和自然語言處理技術的飛速發展,JavaScript在這一領域也有了越來越多的應用。本文將介紹幾個優秀的JavaScript庫,它們專注于處理英語文本,并提供了豐富的功能和…

求立方體面積體積以及判斷(c++)

代碼&#xff1a; #include<iostream> using namespace std;class Cube { public:void setL(int l){m_L l;}int getL(){return m_L;}void setW(int w){m_W w;}int getW(){return m_W;}void setH(int h){m_H h;}int getH(){return m_H;}int calculateS(){return 2 * (…

netdata 監控軟件安裝與學習

netdata官網 netdata操作文檔 前言&#xff1a; netdata是一款監控軟件&#xff0c;可以監控多臺主機也可以監控單臺主機&#xff0c;監控單臺主機時&#xff0c;開箱即用&#xff0c;web ui很棒。 環境&#xff1a; [root192 ~]# cat /etc/system-release CentOS Linux rel…

徹底清理Conda環境:使用conda remove命令的終極指南

徹底清理Conda環境&#xff1a;使用conda remove命令的終極指南 在Conda環境中&#xff0c;隨著時間的推移&#xff0c;可能會積累大量不再需要的包和它們的依賴項。這不僅會占用寶貴的磁盤空間&#xff0c;還可能影響環境的性能。conda remove命令是Conda提供的一個強大工具&…

GD32F407VET6新建固件庫工程并下載運行

零、所需文件及環境&#xff1a; 1、固件庫的壓縮包 GD32F4xx_Firmware_Library_V3.2.0.7z 官網 2、GD32F407的keil支持包 官網 兆易創新GigaDevice-資料下載兆易創新GD32 MCU 2、 keilkilll.bat 用來刪除編譯過程文件 可以不要 &#xff08;原子、野火資料里都有&…

LeetCode熱題100(JavaScript)

哈希 兩數之和 暴力解法 /*** param {number[]} nums* param {number} target* return {number[]}*/ var twoSum function(nums, target) {for(let i 0;i<nums.length;i){let x1 nums[i]for(let j 0 ; j<nums.length;j){if(i!j){let x2 nums[j]if(x1x2target){ret…

算法金 | 來了,pandas 2.0

大俠幸會&#xff0c;在下全網同名「算法金」 0 基礎轉 AI 上岸&#xff0c;多個算法賽 Top 「日更萬日&#xff0c;讓更多人享受智能樂趣」 今日 210/10000 Pandas 是一個強大的數據分析庫&#xff0c;廣泛應用于科學研究、金融分析、商業智能等領域。它提供了高效的數據結構…

[WUSTCTF2020]level4題解 入土為安的第三天

二叉樹 Practice my Data Structure code..... Typing....Struct.....char....*left....*right............emmmmm...OK! Traversal! Traversal type 1:2f0t02T{hcsiI_SwA__r7Ee} Traversal type 2:20f0Th{2tsIS_icArE}e7__w Traversal type 3: //type3(&x[22]); No w…

samba服務、安裝-smbpasswd工具、pdbedit工具、testparm工具

在Windows構建的網絡生態里&#xff0c;各主機間的文件及打印資源共享&#xff0c;主要依賴微軟專有的SMB/CIFS網絡協議來達成。SMB&#xff08;即Server Message Block&#xff0c;服務消息塊&#xff09;與CIFS&#xff08;全稱Common Internet File System&#xff0c;通用互…

ShardingSphere的項目應用

1. 事情的起因 最近,隨著業務的發展,我們的項目面臨著日益增長的數據挑戰。系統使用的數據庫是mysql,每天的增量差不多在百萬左右,由于沒有進行分庫分表,以前設置的單表保存已經越發不能滿足需求,所以想維持表的性能,甲方考慮對這些大數據量的表進行分表操作,同時也采…

MySQL left join、right join以及inner join的區別 ?

LEFT JOIN&#xff08;左連接&#xff09;、RIGHT JOIN&#xff08;右連接&#xff09;和INNER JOIN&#xff08;內連接&#xff09;是SQL中用于連接兩個或多個表以檢索數據的重要操作。它們之間的主要區別在于如何處理那些在連接條件下沒有匹配的行。下面通過具體的例子來說明…

掃地機器人如何解決安全性與隱私保護

掃地機器人在解決安全性與隱私保護方面&#xff0c;需要從多個角度入手&#xff0c;包括產品設計、技術實現、用戶教育以及法律法規遵守等方面。以下是具體的解決方案&#xff1a; 一、安全性解決方案 1.提升避障能力&#xff1a;使用先進的傳感器技術&#xff0c;如激光雷達、…