Deep Learning 101, Taiwan’s pioneering and highest deep learning meetup, launched on 2016/11/11 @ 83F, Taipei 101

AI是一條孤獨且充滿惶恐及未知的旅程,花俏絢麗的收費課程或活動絕非通往成功的捷徑。
衷心感謝當時來自不同單位的AI同好參與者實名分享的寶貴經驗;如欲移除資訊還請告知。
TonTon Huang Ph.D. 發起,及其當時任職公司(台灣雪豹科技)無償贊助場地及茶水點心。

Deep Learning 101 Buy Me A Coffee

去 YouTube 訂閱 | Facebook | 回 GitHub Pages | 到 GitHub 點星 | 網站 | 到 Hugging Face Space 按愛心


大語言模型 語音處理 自然語言處理 電腦視覺
Large Language Model Speech Processing Natural Language Processing, NLP Computer Vision

用 AI 懂 AI

AI 技術 體驗/分享

手把手帶你一起踩 AI 坑https://www.twman.org/AI


AI 技術 開源/試用

第九章 卷積網路

2017/04/14, Convolutional Neural Networks @ Deep Learning Book Chapter 9

重點摘要: 卷積神經網路 (Convolutional Neural Network, CNN),有時也叫做卷積網路 (convolutional network),是一類專門用來處理具有類似網格結構的數據的神經網路。例如,時間序列數據(可以認為是在時間軸上規律採樣形成的一維網格)和圖像數據(可以看作是二維的像素網格)。卷積網路在諸多應用領域都表現優異。「卷積神經網路」一詞表明該網路使用了 卷積 (convolution) 這種數學運算。卷積是一種特殊的線性運算。卷積網路是指那些至少在網路的一層中使用卷積運算來替代一般矩陣乘法運算的神經網路。 本章將首先說明什麼是卷積運算,接著解釋在神經網路中使用卷積運算的動機。然後介紹 池化 (pooling) ,這是一種幾乎所有的卷積網路都會用到的操作。通常來說,卷積神經網路中用到的卷積運算和其他領域(例如工程領域以及純數學領域)中的定義並不完全一致。我們會對神經網路實踐中廣泛應用的幾種卷積函數的變體進行說明。也會說明如何在多種不同維數的數據上使用卷積運算,之後討論使得卷積運算更加高效的一些方法。

Q: 什麼是卷積神經網路 (CNN)?它主要用於處理什麼類型的數據? A: 卷積神經網路 (CNN) 是一類專門設計用來處理具有類似網格結構的數據的神經網路。最常見的例子是圖像數據(可以看作是二維像素網格),以及時間序列數據(可以看作是一維網格)。 Q: 「卷積網路」這個名稱來源於什麼?它與傳統神經網路在運算上有什麼主要區別? A: 「卷積網路」這個名稱來源於它在網路的至少一層中使用了 卷積 (convolution) 這種數學運算。 與傳統神經網路(如全連接網路)的主要區別在於,傳統神經網路通常使用一般的矩陣乘法來進行層與層之間的線性變換,而卷積網路則使用卷積運算作為其主要的線性運算方式。 Q: 本章除了卷積運算本身,還會介紹卷積網路中的哪個常用操作? A: 本章還會介紹 池化 (pooling) 操作,這是一種幾乎所有卷積網路都會用到的操作,通常用於降低特徵圖的維度和增加感受野。


9.1 卷積運算

重點摘要: 在通常形式中,卷積是對兩個實變函數的一種數學運算。如果我們有一個一維信號輸入 x(t) 和一個濾波器(或核函數)w(a),它們的卷積 s(t) = (x * w)(t) 定義為: s(t) = ∫ x(a)w(t-a)da (公式 9.1) 在機器學習的應用中,輸入通常是多維數組的數據,而核通常是由學習算法優化得到的多維數組的參數。這些多維數組被稱為張量。 對於離散的二維圖像 I 和二維核 K,卷積定義為: S(i,j) = (I * K)(i,j) = Σ_m Σ_n I(m,n)K(i-m, j-n) (公式 9.4) 卷積運算是可交換的。在機器學習庫中,通常實現的是 互相關 (cross-correlation) 運算,它與卷積非常相似,但不對核進行翻轉: S(i,j) = (I ☆ K)(i,j) = Σ_m Σ_n I(i+m, j+n)K(m,n) (公式 9.6) 許多機器學習庫將互相關函數稱為卷積,儘管嚴格來說它們不同。由於核是學習得到的,這種差異通常不重要。互相關運算可以通過等效的、涉及稀疏 Toeplitz 矩陣(或雙塊循環矩陣)的矩陣乘法來實現。

Q: 什麼是卷積運算?請給出其在一維連續信號和二維離散圖像上的定義。 A: 卷積運算是對兩個函數(一個通常被視為輸入信號,另一個被視為濾波器或核)產生第三個函數(表示一個函數經過另一個函數「滑動」後的加權平均)的一種數學運算。


9.2 動機

重點摘要: 卷積運算通過三個重要的思想來幫助改進機器學習系統: 稀疏交互 (sparse interactions)參數共享 (parameter sharing)等變表示 (equivariant representations)

  1. 稀疏交互 (或稀疏連接、稀疏權重): 在傳統神經網路中,每個輸出單元與所有輸入單元交互(通過矩陣乘法)。卷積網路則具有稀疏交互的特性,這是通過使核的大小遠小於輸入的大小來實現的。例如,處理圖像時,輸入可能有數百萬像素,但我們可能檢測只占據幾十或幾百像素的有用特征,如邊緣。這意味著我們只需要存儲更少的參數,提高了模型的統計效率,並且計算量也更小。一個輸出單元的感受野 (receptive field) 是指輸入中影響該輸出單元的部分。
  2. 參數共享: 指在一個模型的不同部分使用相同的參數。在卷積網路中,核的每個元素都被應用於輸入的每個位置(通過滑動核)。這意味著用於在一個位置檢測邊緣的參數,也被用於在另一個位置檢測邊緣。這極大地減少了模型的參數數量,並提高了統計效率。傳統神經網路如果大小為 m 個輸入和 n 個輸出,則有 m x n 個參數;如果使用大小為 k 的核進行卷積,則只有 k 個可學習的參數(如果核是一維的且通道數為1)。
  3. 等變表示 (Equivariant Representations): 對於卷積,參數共享的特殊形式使得網路具有對輸入平移的等變性。如果輸入發生平移,輸出中的表示也會以相同的方式平移。如果一個函數 f(x) 滿足 f(g(x)) = g(f(x)),則稱 f 對變換 g 是等變的。對於卷積,如果 g 是一個平移函數,那麼卷積函數對 g 是等變的。這意味著模型在輸入的不同位置檢測到相同的特征時,會產生相似的激活模式,只是位置不同。

Q: 卷積網路利用了哪些核心思想來改進機器學習系統? A: 卷積網路主要利用了三個核心思想:

  1. 稀疏交互 (Sparse Interactions) / 稀疏連接 (Sparse Connectivity): 每個輸出單元只與輸入的一個局部區域(感受野)相連接,而不是與所有輸入單元相連。
  2. 參數共享 (Parameter Sharing): 同一個濾波器(核)的參數在輸入的不同位置是共享的,即用相同的濾波器去掃描整個輸入。
  3. 等變表示 (Equivariant Representations): 由於參數共享,如果輸入發生平移,輸出中的表示也會以相同的方式平移。 Q: 什麼是「稀疏交互」?它在卷積網路中是如何實現的?它有什麼好處? A: 「稀疏交互」是指在神經網路中,一個輸出單元的計算只依賴於輸入單元的一個小子集,而不是所有輸入單元。 在卷積網路中,這是通過使用遠小於輸入尺寸的 卷積核 (kernel) 來實現的。當卷積核在輸入上滑動時,每個輸出特徵圖上的單元只由輸入圖像中一個與核大小相同的局部區域(稱為該輸出單元的 感受野 receptive field )計算得到。 好處包括: * 減少參數數量: 由於連接是局部的,模型需要學習的參數數量大大減少。 * 提高統計效率: 模型更容易從有限的數據中學習,因為它專注於學習局部模式。 * 降低計算成本: 每個輸出的計算量減少。

Q: 什麼是「參數共享」?它在卷積網路中是如何體現的?它為什麼能顯著減少模型參數數量? A: 「參數共享」是指在模型的不同部分使用相同的參數集。 在卷積網路中,這是通過讓 同一個卷積核(濾波器)在整個輸入數據的不同空間位置上重複使用 來體現的。也就是說,用於檢測輸入某個位置的特定模式(例如,一個垂直邊緣)的權重,也被用於在輸入其他所有位置的相同模式。 它能顯著減少模型參數數量,因為我們不需要為輸入的每個位置都學習一套獨立的檢測相同模式的權重。無論輸入圖像有多大,一個特定濾波器的參數數量只取決於濾波器本身的大小,而不是輸入的大小。 Q: 什麼是「等變表示」?卷積運算對什麼樣的變換具有等變性?這對模型學習有什麼意義? A: 如果一個函數 f 對於一個變換 g 滿足 f(g(x)) = g(f(x)),那麼我們說函數 f 對變換 g 具有 等變性 (equivariance) 。 卷積運算對 平移 (translation) 變換具有等變性。這意味著如果我們將輸入圖像平移一定的距離,那麼卷積的輸出(特徵圖)也會被平移相同的距離,而特徵圖的模式本身不會改變(除了邊界效應)。 這對模型學習的意義是: * 位置無關的特征檢測: 模型可以在圖像的不同位置檢測到相同的特征,而不需要為每個位置單獨學習檢測器。例如,一旦模型學會了識別貓的耳朵,它就能在圖像的任何位置識別出貓的耳朵。 * 提高泛化能力: 模型更容易將在一個位置學到的知識泛化到其他位置。


9.3 池化

重點摘要: 一個典型的卷積網路層通常包含三個階段:

  1. 卷積階段: 執行多個並行卷積,產生一組線性激活。
  2. 檢測器階段 (Detector Stage): 對線性激活應用一個非線性激活函數(如 ReLU)。
  3. 池化階段 (Pooling Stage): 修改輸出,使其對輸入的微小變換具有不變性。 池化 (Pooling) 函數使用某一位置的相鄰輸出的總體統計特征來替代網路在該位置的輸出。例如, 最大池化 (max pooling) (Zhou and Chellappa, 1988) 報告矩形鄰域內的最大輸出。其他常用的池化函數包括平均池化、L2 范數池化,或基於離中心像素距離的加權平均池化。 池化的主要作用是使表示對於輸入的微小變化(如平移)具有一定程度的 不變性 (invariance) 。如果輸入發生微小的平移,池化後的輸出通常保持不變(或變化很小)。這有助於模型識別一個對象,即使它在圖像中的確切位置發生了微小變化。 池化還有助於減少表示的維度(下採樣),從而減少後續層的計算量和參數數量,並有助於擴大更高層的感受野。圖 9.8, 9.9, 9.10 展示了池化的不變性和不同池化策略。

Q: 一個典型的卷積網路層通常包含哪三個階段? A: 通常包含三個階段:

  1. 卷積階段 (Convolution Stage): 網路執行多個並行的卷積操作(使用不同的濾波器)來產生一組線性激活(即特徵圖)。
  2. 檢測器階段 (Detector Stage): 對卷積階段產生的線性激活應用一個逐元素的非線性激活函數(例如 ReLU, sigmoid, tanh)。
  3. 池化階段 (Pooling Stage): 對檢測器階段的輸出進行降採樣或匯總操作,以引入一定程度的局部平移不變性並減小表示的維度。 Q: 什麼是池化 (pooling) 操作?它的主要目的是什麼? A: 池化操作是一種對神經網路(特別是卷積網路)中特徵圖進行降採樣或匯總的過程。它通常作用於特徵圖的一個小的局部鄰域(池化窗口),並用該鄰域內值的某個匯總統計量來替代這個鄰域的輸出。 主要目的包括: 1. 引入局部平移不變性 (Local Translation Invariance): 使得模型對輸入的微小平移不那麼敏感。如果在池化窗口內的主要特征發生微小平移但仍位於窗口內,池化後的輸出可能保持不變(如最大池化)或變化很小。 2. 降低表示的維度 (Dimensionality Reduction / Downsampling): 池化通常會減小特徵圖的空間尺寸,從而減少後續層的參數數量和計算量。 3. 擴大感受野 (Increasing Receptive Field): 由於降採樣,後續卷積層的濾波器在原始輸入圖像上對應的感受野會變得更大。 4. 增強表示的魯棒性: 通過對局部區域進行匯總,可以減少對精確位置的依賴,提高對噪聲或微小變形的魯棒性。

Q: 請列舉幾種常見的池化操作。 A: 常見的池化操作包括:

  1. 最大池化 (Max Pooling): 在池化窗口內取所有值的最大值作為輸出。
  2. 平均池化 (Average Pooling): 在池化窗口內取所有值的平均值作為輸出。
  3. L2 范數池化 (L2-Norm Pooling): 計算池化窗口內所有值的 L2 范數作為輸出。
  4. 加權平均池化 (Weighted Average Pooling): 根據離窗口中心的距離對窗口內的值進行加權平均。
  5. 隨機池化 (Stochastic Pooling): 根據池化窗口內激活值的機率分布進行隨機採樣。
  6. 全局池化 (Global Pooling): 例如全局平均池化 (Global Average Pooling, GAP) 或全局最大池化 (Global Max Pooling, GMP),它們將整個特徵圖縮減為單個值(或每個通道一個值),常用於在網路末端替代全連接層。 Q: 池化操作如何幫助實現對輸入微小變換的不變性? A: 池化操作通過對特徵圖的局部區域進行匯總來實現不變性。以最大池化為例,如果在一個池化窗口內,最強的激活(最大值)對應於某個特定的局部模式,那麼只要這個模式在輸入圖像中發生微小的平移,但其最強激活仍然位於同一個池化窗口內並保持為最大值,那麼最大池化的輸出就不會改變。這使得模型對這種微小平移具有不變性。平均池化等其他池化操作也具有類似的(儘管可能程度稍弱的)平滑或不變性效果。

9.4 卷積與池化作為一種無限強的先驗

重點摘要: 可以將卷積和池化視為在神經網路中引入了關於數據的 無限強的先驗 (infinitely strong prior)

Q: 如何理解「卷積和池化作為一種無限強的先驗」這句話? A: 「無限強的先驗」意味著這些操作(卷積和池化)將某些假設硬編碼 (hard-coded) 到了模型的架構中。如果數據的真實生成過程完全不符合這些假設,那麼模型幾乎不可能學習到好的解,因為模型的結構本身就阻止了它去考慮那些與先驗相悖的可能性。模型對這些先驗的「信念」是無限強的,無法通過學習來完全改變。 例如: * 卷積的參數共享 強加了一個先驗,即在圖像不同位置檢測相同局部模式的參數應該是相同的。如果數據的真實模式是高度位置依賴的(即不同位置的相同視覺模式需要用不同的參數來檢測),那麼這個先驗就會成為一個很強的約束。 * 池化的局部平移不變性 強加了一個先驗,即一個特征的精確位置在一個小鄰域內是不重要的。如果任務恰好需要依賴於特征的精確位置,這個先驗就會有害。 Q: 卷積操作引入了哪些關於數據的先驗假設? A: 卷積操作主要引入了以下關於數據的先驗假設:

  1. 局部性 (Locality) / 稀疏交互 (Sparse Interactions): 假設有意義的特征可以從輸入數據的局部區域中提取出來。一個輸出特征只依賴於輸入的一個小的局部鄰域(感受野)。
  2. 平移等變性 (Translation Equivariance) / 參數共享 (Parameter Sharing): 假設在輸入數據的不同空間位置上檢測相同局部模式的統計特性是相似的。因此,可以用相同的濾波器(共享參數)去掃描整個輸入,從而在不同位置檢測相同的模式。

Q: 池化操作引入了哪些關於數據的先驗假設? A: 池化操作主要引入了以下關於數據的先驗假設:

  1. 局部平移不變性 (Local Translation Invariance): 假設一個被檢測到的特征在一個小的局部區域內的精確位置是不重要的,重要的是該特征是否存在於這個區域內。例如,最大池化意味著我們只關心這個區域內是否存在一個強的激活,而不關心這個強激活的確切像素位置。
  2. 特徵的匯總性: 假設可以通過對局部區域內的特征進行某種匯總(如取最大值、平均值)來得到一個有用的、更魯棒的表示,同時可以減少數據的維度。 Q: 在什麼情況下,卷積和池化引入的這些強先驗可能不適用或有害? A: 當數據的真實生成過程或任務需求與這些先驗假設相悖時,它們可能不適用或有害。例如:
    • 需要精確位置信息的任務: 如果任務的目標是判斷一個物體是否出現在圖像的特定絕對位置(例如,圖像中心的數字識別),那麼池化操作引入的平移不變性可能會丟失關鍵的位置信息。
    • 全局結構比局部模式更重要的任務: 如果數據中的重要模式是全局性的,而不是由局部模式組合而成,那麼過於依賴局部卷積和池化可能不是最優的。
    • 非平移不變的模式: 如果數據中相同視覺模式在不同位置具有不同的含義或需要用不同的方式處理(即不滿足平移等變性),那麼卷積的參數共享就可能不合適。
    • 數據量極其巨大且多樣化: 如果有足夠多的數據能夠覆蓋所有可能的變換,模型也許可以自己學習到這些不變性,而不需要硬編碼的先驗。然而,在實踐中,這些先驗通常能帶來巨大的統計效率提升。

9.5 基本卷積函數的變體

重點摘要: 在神經網路的上下文中,卷積通常指的是多個並行執行的、作用於多個輸入通道和產生多個輸出通道的離散卷積操作。 一個典型的卷積層的計算涉及一個四維的核張量 K 和一個四維的輸入張量 V。如果 K 的維度是 (輸出通道數 m, 輸入通道數 n, 核高度 k_h, 核寬度 k_w),V 的維度是 (批量大小 b, 輸入通道數 n, 輸入高度 i_h, 輸入寬度 i_w),那麼輸出的特徵圖 Z 的維度將是 (批量大小 b, 輸出通道數 m, 輸出高度 o_h, 輸出寬度 o_w)。 輸出 Z_{i,j,k,l} (第 i 個樣本,第 j 個輸出通道,在 (k,l) 位置的激活) 的計算公式為: Z_{i,j,k,l} = Σ_{m,n,p} V_{i,m, (j-1)s+n, (k-1)s+p} K_{l,m,n,p} (類似公式 9.7,但更通用地考慮了步幅 s 和多通道) 其中 s 是步幅 (stride)。除了標準的卷積,還有一些重要的變體:

Q: 什麼是卷積的「步幅 (stride)」?它如何影響輸出特徵圖的大小? A: 卷積的「步幅」是指卷積核在輸入數據上滑動時,每次移動的像素數量(在水平和垂直方向上)。

Q: 什麼是非共享卷積 (unshared convolution) 或局部連接層 (locally connected layer)?它與標準卷積有何不同? A: 非共享卷積(或局部連接層)是一種介於標準卷積和全連接層之間的層類型。


9.6 結構化輸出

重點摘要: 卷積網路可以用於產生高維的結構化輸出,而不僅僅是分類標籤。例如,在圖像分割任務中,網路需要為輸入圖像的每個像素預測一個類別標籤,輸出與輸入具有相同的空間網格結構。 當使用卷積網路進行結構化輸出時,通常需要仔細設計網路架構,以確保輸出具有期望的空間維度和結構。這可能涉及到:

Q: 在設計用於結構化輸出任務(如圖像分割)的卷積網路時,需要考慮哪些架構上的調整以保持或恢復輸出的空間結構? A:

  1. 避免或減少池化/下採樣: 池化操作會減小特徵圖的空間解析度。對於需要像素級預測的任務,過多的池化會導致空間信息的損失。因此,可能需要使用步幅為 1 的卷積,或者完全避免池化,或者使用「空洞卷積/擴張卷積 (atrous/dilated convolution)」來在不降低解析度的情況下擴大感受野。
  2. 使用上採樣 (Upsampling) / 反卷積 (Deconvolution / Transposed Convolution): 在網路的後續部分(通常稱為解碼器或上採樣路徑),需要將編碼器部分產生的低解析度但語義信息豐富的特徵圖逐步上採樣回原始輸入圖像的解析度。反卷積(或更準確地說是轉置卷積)是一種可以學習的上採樣方法。也可以使用更簡單的插值方法(如雙線性插值)進行上採樣,然後再接卷積層。
  3. 跳躍連接 (Skip Connections): 為了彌補在編碼器下採樣過程中損失的空間細節信息,並幫助梯度更好地流動,通常會引入從編碼器部分的淺層(高解析度、低級別特征)到解碼器部分的對應深層(經過上採樣後解析度恢復的、高級別特征)的跳躍連接。U-Net 是一個廣泛使用這種跳躍連接的圖像分割架構。這些連接將低級別的精細紋理和邊緣信息與高級別的語義信息相結合,有助於產生更精確的分割結果。

9.7 數據類型

重點摘要: 卷積網路處理的數據通常包含多個通道,每個通道是在時間或空間中某一點的某種觀測。

Q: 卷積網路可以處理哪些不同類型的數據?請結合「通道 (channel)」的概念進行說明。 A: 卷積網路可以處理多種類型的具有網格結構的數據,並且能夠處理多通道輸入。

  1. 時間序列數據 (1D 數據):
    • 單通道: 例如,一段音頻信號,每個時間點有一個幅值。
    • 多通道: 例如,加速度計數據,每個時間點有 x, y, z 三個方向的加速度值(3個通道);或者股票市場數據,每個時間點有開盤價、收盤價、最高價、最低價、成交量等多個指標(多個通道)。
  2. 圖像數據 (2D 數據):
    • 單通道: 例如,灰度圖像,每個像素位置只有一個亮度值。
    • 多通道: 例如,彩色 RGB 圖像,每個像素位置有紅色 (R)、綠色 (G)、藍色 (B) 三個通道的值。醫學圖像也可能有多個通道,對應不同的成像模態。
  3. 視頻數據 (通常視為 2D 圖像序列或 3D 數據):
    • 可以將視頻看作是一系列圖像幀在時間維度上的序列。每一幀都是一個多通道的圖像(例如 RGB)。如果使用 2D CNN 逐幀處理,然後用 RNN 處理時間序列;或者直接使用 3D CNN,其卷積核也具有時間維度,可以直接在 (高度, 寬度, 時間) 的網格上操作。
  4. 體積數據 (3D 數據):
    • 例如,醫學 CT 或 MRI 掃描產生的數據是三維的體素網格,每個體素有一個值(例如,組織密度)。如果有多種掃描序列或成像模式,也可以是多通道的。3D CNN 可以直接處理這種體積數據。 「通道」指的是在網格的每個空間(或時間)位置上,有多少個不同的觀測值或特征。卷積操作能夠自然地處理多通道輸入,並產生多通道輸出。

9.8 高效的卷積算法

重點摘要: 儘管卷積運算在概念上很直觀,但其直接實現(特別是在多個輸入輸出通道、大圖像和多個濾波器時)計算成本可能很高。有許多算法旨在提高卷積的計算效率。

Q: 除了直接按照定義滑動卷積核進行計算,還有哪些方法可以更高效地計算卷積?請簡述基於傅里葉變換的方法。 A:

  1. 基於傅里葉變換的卷積:
    • 原理: 利用卷積定理,該定理指出「時域(或空域)的卷積等於頻域的乘積」。
    • 步驟: a. 對輸入數據(例如圖像)和卷積核都進行快速傅里葉變換 (FFT),將它們轉換到頻域。 b. 在頻域中,將它們的傅里葉變換結果進行逐元素的點乘。 c. 對點乘的結果進行快速傅里葉逆變換 (IFFT),得到原始卷積的結果。
    • 優缺點: 對於較大的卷積核,這種方法在理論上可以減少計算複雜度(從 O(N²k²) 到 O(N²logN),其中 N 是圖像邊長,k 是核邊長)。但在深度學習中,常用的卷積核通常較小(如 3x3, 5x5),並且現代 GPU 對直接卷積進行了高度優化,因此基於 FFT 的卷積在這些情況下不一定更快,反而可能因為 FFT 本身的開銷、數據轉換的開銷以及數值精度問題而變得不那麼有吸引力。此外,它通常需要對輸入和核進行適當的零填充以處理循環卷積的問題。
  2. Winograd 算法: 一種通過更少的乘法操作來計算小卷積核(如 2x2, 3x3 作用於小的輸入塊)的算法。它在許多現代深度學習庫中被用於加速小核卷積。
  3. 將卷積轉換為矩陣乘法 (im2col/kn2row + GEMM):
    • 原理: 可以通過重新排列輸入數據的局部塊(im2col 操作,將每個感受野區域拉平成一個列向量)和卷積核的權重(kn2row 操作,將每個濾波器拉平成一個行向量),將卷積運算轉換為一個大規模的通用矩陣乘法 (GEMM) 操作。
    • 優勢: 現代 CPU 和 GPU 都對 GEMM 操作進行了高度優化,因此這種方法可以利用這些優化庫(如 BLAS, cuBLAS)來實現高效的卷積計算。這是許多深度學習框架中實現卷積的常用底層方法。

9.9 隨機或無監督的特征

重點摘要: 在卷積網路的背景下,一種有趣的策略是使用 隨機初始化且固定的卷積核 ,或者通過 無監督學習 (如 K-均值聚類、稀疏編碼、RBM、自編碼器)從未標註數據中學習卷積核,然後將這些預訓練好的或隨機的核作為固定的特征提取器,只訓練網路的後續部分(如全連接分類層)。

  1. 隨機特征: 將卷積層的濾波器(核)的權重隨機初始化(例如,從某個固定的機率分佈中採樣),然後在整個訓練過程中保持這些權重固定不變。這些固定的隨機濾波器作為一種通用的特征提取器。
  2. 無監督特征: 首先在大量未標註的圖像數據上使用無監督學習算法(例如,K-均值聚類作用於圖像塊、稀疏編碼、自編碼器、RBM)來學習一組濾波器。然後,將這些通過無監督學習得到的濾波器作為卷積層的固定權重。 在這兩種情況下,只有網路的後續部分(例如,更深層的卷積層、全連接層或最終的分類器)的權重是通過監督學習(基於標註數據)進行訓練的。 Q: 使用隨機或無監督特征的策略有哪些潛在的優點和缺點? A:
    • 潛在優點:
    1. 減少訓練成本和複雜性: 如果大部分卷積層的權重是固定的,那麼需要通過梯度下降學習的參數數量會大大減少,從而可能加速訓練過程並降低對計算資源的需求。
    2. 利用未標註數據 (對於無監督特征): 無監督預訓練可以從大規模的、易於獲取的未標註數據中學習到一些通用的、有用的低級和中級圖像特征,這些特征可能對後續的監督任務有益,尤其是在標註數據稀缺的情況下。
    3. 簡化模型設計: 在某些情況下,可以作為一種快速搭建原型或評估後續層設計的方法。 * 潛在缺點:
    4. 性能可能受限: 隨機生成的濾波器或者通過與目標監督任務無直接關聯的無監督任務學習到的濾波器,其提取的特征可能不如通過端到端的、針對特定監督任務優化的濾波器那麼有效和具有判別性。因此,最終模型的性能可能會低於完全監督訓練的模型。
    5. 次優的特征表示: 固定的特征提取器可能無法適應特定任務的細微差別。
    6. 無監督學習本身的挑戰: 有效地進行無監督特征學習本身也是一個具有挑戰性的研究課題。

9.10 卷積網路的神經科學基礎

重點摘要: 卷積網路的設計在很大程度上受到了對哺乳動物視覺系統(特別是初級視覺皮層 V1)的研究的啟發。

Q: 卷積神經網路的設計受到了哺乳動物視覺系統的哪些關鍵發現的啟發? A: 主要受到了以下關鍵發現的啟發:

  1. 局部感受野 (Local Receptive Fields): David Hubel 和 Torsten Wiesel 的研究表明,初級視覺皮層 (V1) 中的神經元只對視野中的一個小的局部區域內的刺激做出響應。這啟發了 CNN 中卷積核只作用於輸入的局部區域。
  2. 朝向選擇性 (Orientation Selectivity): V1 中的許多神經元(稱為簡單細胞和複雜細胞)對特定朝向的邊緣或條紋刺激反應最強。這啟發了 CNN 中的濾波器學習檢測特定的局部模式,如邊緣。
  3. 簡單細胞 (Simple Cells) 和複雜細胞 (Complex Cells):
    • 簡單細胞: 對刺激的精確位置和朝向敏感。這類似於 CNN 中卷積層的線性濾波操作加非線性激活。
    • 複雜細胞: 對刺激的朝向敏感,但在一個小範圍內對其精確位置不敏感(具有局部平移不變性)。這啟發了 CNN 中的池化操作。
  4. 層次化處理 (Hierarchical Processing): 視覺信息在視覺皮層中是逐級處理的,從低級別的簡單特征(如 V1 中的邊緣)到高級別的複雜特征和對象表示(如在 IT 皮層中)。這啟發了 CNN 的多層堆疊架構。

Q: 什麼是簡單細胞 (simple cell) 和複雜細胞 (complex cell)?它們在視覺信息處理中各自扮演什麼角色?它們與 CNN 中的哪些操作相對應? A:


9.11 卷積網路與深度學習的歷史

重點摘要: 卷積網路在深度學習的歷史中扮演了至關重要的角色,並且是最早成功應用的深度模型之一。

Q: 誰被認為是現代卷積網路的主要奠基人之一?他們開發的哪個早期 CNN 架構非常著名? A: Yann LeCun 及其合作者被認為是現代卷積網路的主要奠基人之一。他們開發的 LeNet-5 架構非常著名,主要用於手寫數字識別任務(例如,應用於銀行的支票自動讀取系統)。 Q: 什麼事件被認為是卷積網路(和深度學習)在計算機視覺領域取得主導地位的里程碑?哪個模型在其中扮演了關鍵角色? A: 2012 年的 ImageNet 大規模視覺識別挑戰賽 (ILSVRC) 被認為是卷積網路(和深度學習)在計算機視覺領域取得主導地位的里程碑事件。 由 Alex Krizhevsky, Ilya Sutskever, 和 Geoffrey Hinton 開發的 AlexNet 模型在該競賽中以遠超傳統計算機視覺方法的巨大優勢獲勝,極大地推動了深度學習和卷積網路的普及與發展。 Q: AlexNet 模型相較於早期的 LeNet 架構,引入了哪些重要的改進或特性,使其能夠在 ImageNet 這樣的大規模數據集上取得成功? A: AlexNet 相較于 LeNet 引入了以下重要的改進或特性:

  1. 更深的網絡結構: AlexNet 比 LeNet 更深,包含了更多的卷積層和全連接層,使其具有更強的表達能力。
  2. 使用 ReLU 激活函數: 替換了傳統的 sigmoid 或 tanh 激活函數。ReLU 能夠加速訓練收斂並在一定程度上緩解梯度消失問題。
  3. 使用 Dropout 正則化: 在全連接層中使用了 Dropout 來防止過擬合,這對於在 ImageNet 這樣的大規模數據集上訓練大型模型至關重要。
  4. 數據增強: 採用了多種數據增強技術(如圖像平移、翻轉、顏色抖動)來擴大訓練數據集,提高模型的泛化能力。
  5. 在 GPU 上進行高效訓練: 利用 GPU 的並行計算能力來加速大型卷積網路的訓練過程,使得在 ImageNet 這樣的大規模數據集上進行訓練成為可能。
  6. 局部響應歸一化 (Local Response Normalization, LRN): 雖然現在較少使用,但在當時被認為有助於提高性能。
  7. 重疊池化 (Overlapping Pooling): 使用的池化窗口的步幅小於窗口大小,使得相鄰的池化窗口之間存在重疊。


卷積神經網路學習指南

卷積神經網路(CNN)學習指南 這份學習指南旨在幫助您複習卷積神經網路的相關概念,主要根據提供的來源材料進行整理。 一、 測驗題 (十題,每題約 2-3 句話作答)

  1. 卷積神經網路(CNN)為何特別適合處理圖像數據?
  2. 請用物理學的角度簡要解釋什麼是卷積 (convolution)。
  3. 請用數學的角度簡要解釋什麼是卷積 (convolution),特別提到 filter 和 shift 的概念。
  4. 傳統機器學習中的卷積 (convolution) 和互相關 (cross-correlation) 有什麼關係?
  5. 描述卷積神經網路的基本架構流程,包含主要層的順序。
  6. 卷積層中 “local connectivity” 或稱 “sparse interaction” 的特性是什麼意思?
  7. 卷積層中 “parameter sharing” 的特性是什麼意思?這有什麼好處?
  8. 請列出卷積層中需要注意的三個超參數 (hyperparameter)。
  9. 池化層 (pooling layer) 的主要目的是什麼?它對圖像的哪個維度會造成影響?
  10. 卷積神經網路訓練中,使用隨機或無監督特徵有哪些潛在優點?

二、 申論題 (五題,不提供答案)

  1. 詳細比較並對比傳統機器學習中的卷積 (convolution) 和互相關 (cross-correlation),並解釋為什麼在深度學習中這兩種操作常常被統稱為卷積。
  2. 深入探討卷積神經網路的 local connectivity 和 parameter sharing 特性如何有效地減少模型的參數數量,並與全連接神經網路進行比較。
  3. 解釋池化層 (pooling layer) 的 invariance 特性如何有助於提升模型的穩健性,並討論不同類型的池化操作(如 max pooling 和 average pooling)在實際應用中的潛在優劣。
  4. 詳細闡述使用尺寸較小的濾波器 (filter) 但層數較多的卷積層作為網路架構的優勢,並解釋其背後的原理,包含 receptive field 的變化和參數數量的影響。
  5. 探討卷積神經網路和全連接神經網路之間的相互轉換機制,並說明這種轉換在處理不同大小圖像時的應用和優勢。 三、 關鍵詞彙表 (附定義)
    • 卷積神經網路 (Convolutional Neural Network, CNN): 一種專門用於處理具有網格狀拓撲數據的神經網路,例如圖像數據。
    • 卷積 (Convolution): 一種數學運算,在 CNN 中通常指濾波器(kernel)在輸入數據上滑動並計算點積的過程。
    • 濾波器 (Filter / Kernel): 在卷積層中用於掃描輸入數據以提取特定特徵的小型矩陣。
    • 感受野 (Receptive Field): 卷積層中的一個輸出單元對應於輸入圖像中的一個局部區域。
    • 局部連接 (Local Connectivity / Sparse Interaction): 卷積層中的每個輸出單元僅與輸入數據的一個局部區域相連。
    • 權重共享 (Parameter Sharing): 在卷積層中,同一個濾波器在輸入數據的不同位置使用相同的權重進行計算。
    • 超參數 (Hyperparameter): 在模型訓練之前需要手動設定的參數,例如濾波器尺寸、步長和填充。
    • 深度 (Depth): 在 CNN 中,通常指輸入數據的第三個維度(例如圖像的 RGB 通道數)或卷積層輸出的特徵圖數量。
    • 步長 (Stride): 卷積層中濾波器在輸入數據上滑動的步進大小。
    • 填充 (Padding): 在輸入數據的邊緣添加額外的像素(通常為零),以控制輸出尺寸或保留邊緣信息。
    • 池化層 (Pooling Layer): 卷積層之後常用的層,用於減小空間尺寸(寬度和高度)並減少計算量。
    • 最大池化 (Max Pooling): 在池化窗口內取最大值作為輸出。
    • 平均池化 (Average Pooling): 在池化窗口內計算平均值作為輸出。
    • 激活函數 (Activation Function): 在神經網路中引入非線性,例如 ReLU(Rectified Linear Unit)。
    • 全連接層 (Fully Connected Layer, FC): 神經網路中每個輸入單元都與每個輸出單元相連的層。
    • 互相關 (Cross-correlation): 與卷積類似的操作,但在計算點積之前不會翻轉濾波器。在深度學習中常與卷積互換使用。
    • 稀疏交互 (Sparse Interaction): 與 Local Connectivity 同義,指輸出單元僅與輸入數據的局部區域交互。
    • 參數數量 (Number of Parameters): 模型中需要學習的權重和偏差的總數。
    • 下採樣 (Downsampling): 通過池化等操作減小數據的空間尺寸。
    • 前饋 (Feedforward): 數據在網路中從輸入層向輸出層傳播的過程。
    • 隨機特徵 (Random Features): 卷積層的權重在訓練前隨機初始化並保持固定。
    • 無監督特徵 (Unsupervised Features): 卷積層的權重通過無監督學習在大規模未標註數據上學習得到並保持固定。
    • 端到端訓練 (End-to-end Training): 模型的所有參數都通過監督學習任務的梯度下降進行訓練。
    • Invariance (不變性): 模型對輸入數據的某些變化(例如局部平移)具有魯棒性。
    • Equivariance (等變性): 模型的輸出隨著輸入數據的變化以一種可預測的方式變化(例如輸入圖像平移,輸出特徵圖也平移)。

四、 測驗答案

  1. CNN 特別適合處理圖像數據,因為圖像本身是 3D 的 Volume (長、寬、深度如 RGB),而 CNN 的結構可以有效地處理這種 3D 數據,並且透過局部連接和權重共享的特性來提取圖像的局部特徵。
  2. 從物理學角度看,卷積可以比喻為訊號通過一個 Channel。例如,無線通訊中傳輸的訊號會受到延遲和衰減的影響,接收端收到的訊號是原始訊號和其延遲衰減版本的疊加,這個疊加過程類似於卷積。
  3. 從數學角度看,卷積是一個 Operation,通常可以表示為輸入訊號與 Filter 翻轉後再做 Shift 後的點積相加。這包含了將 Filter 反向 (Flip) 和在輸入上移動 (Shift) 的過程。
  4. 傳統機器學習中的卷積和互相關在數學定義上略有不同(互相關沒有翻轉濾波器),但在深度學習中,由於濾波器的權重是學習得到的,這兩者在功能上是等效的,通常都被稱為卷積。
  5. 卷積神經網路的基本架構流程通常包含:Input Layer -> Convolutional Layer -> Activation Function (e.g., ReLU) -> Pooling Layer -> Fully Connected Layer -> Output Layer (for classification). 中間的卷積、激活和池化層組合可以重複多次。
  6. Local connectivity 或 sparse interaction 指的是卷積層的每個輸出單元只與輸入圖像的一個小區域(稱為 receptive field)連接,而不是與整個輸入圖像連接。
  7. Parameter sharing 指的是在同一卷積層中,同一個濾波器在輸入數據的不同位置使用相同的權重。這樣可以大大減少模型的參數數量,並假設某些特徵(如邊緣)在圖像的不同位置都可能出現。
  8. 卷積層的三個主要超參數是 Depth (濾波器的數量)、Stride (濾波器滑動的步長) 和 Zero Padding (在輸入邊緣填充的零數量)。
  9. 池化層的主要目的是減小空間尺寸(寬度和高度),從而減少計算量和參數數量,並提供一定程度的平移不變性。它只會對長和寬這兩個維度造成影響,深度維度不會改變。
  10. 使用隨機或無監督特徵的潛在優點包括:減少訓練成本和複雜性(參數較少),可以利用大規模未標註數據(對於無監督特徵),以及簡化模型設計和原型開發。


卷積神經網路核心概念

卷積神經網路(Convolutional Neural Network, CNN)是一種特別適合處理具有網格狀拓撲數據(例如圖像)的神經網路。它有別於傳統的全連接神經網路,主要利用了卷積層(Convolutional Layer)、激活函數(Activation Function,如 ReLU)、池化層(Pooling Layer)和最後的全連接層(Fully Connected Layer)來提取特徵並進行分類或其他任務。CNN 之所以特別適合圖像處理,是因為圖像具有長、寬和深度(如 RGB 色彩通道)等三維結構,而 CNN 的卷積操作能夠有效地處理這種結構。 卷積操作是 CNN 的核心。它可以從物理或數學的角度來理解。從物理角度看,可以想像訊號經過一個頻道或系統的影響。從數學角度看,它是一個將濾波器(Filter 或 Kernel)與輸入數據進行點積(Dot Product)並滑動的操作。具體來說,就是將一個小的濾波器在輸入數據上滑動,在每個位置與對應的輸入數據區域進行逐元素的乘法後相加,得到輸出的一個值。這個濾波器會捕捉輸入數據中的局部特徵。傳統意義上的卷積包含翻轉濾波器,而機器學習中常用的是互相關(Cross-correlation),但不論是傳統卷積或互相關,在機器學習中都常被統稱為卷積。

卷積層主要有三個特點:

  1. 局部連接(Local Connectivity / Sparse Interaction): 卷積層中的每個輸出單元只與輸入數據中的一小塊區域(稱為感受野 Receptive Field)相連,而不是與整個輸入相連。這模仿了生物視覺系統對局部區域的處理。
  2. 參數共享(Parameter Sharing): 在同一卷積層中的同一個深度切片內,所有輸出單元都使用相同的濾波器權重和偏差值。這大大減少了需要學習的參數數量,並使得模型能夠捕捉圖像中的相同特徵,無論該特徵出現在圖像的哪個位置。
  3. 池化(Pooling): 雖然池化是獨立的一層,但通常緊隨卷積層。它的主要目的是降採樣(Downsampling),減少數據的空間尺寸(長和寬),從而減少計算量和參數,同時增加模型對輸入數據變化的魯棒性。 卷積層的感受野是指輸出數據中的一個單元對應到原始輸入數據中的區域大小。雖然單個卷積層只處理輸入數據的局部區域,但隨著網路層數的增加,更高層的輸出單元對應的感受野會越來越大。這意味著深層卷積層能夠學習到更複雜、更抽象的高層特徵,例如物體的形狀、部位(眼睛、鼻子)甚至整張臉,而淺層卷積層則學習到更簡單的低層特徵,如邊緣或顏色變化。

卷積層有幾個重要的超參數需要設定:

  1. 深度(Depth): 指的是卷積層使用的濾波器數量,每個濾波器會提取一種特定的特徵。增加深度可以讓模型學習到更多種類的特徵。
  2. 步長(Stride): 指的是濾波器在輸入數據上滑動的步長。較大的步長會減少輸出數據的尺寸,從而降低計算量和參數數量。
  3. 零填充(Zero Padding): 在輸入數據的邊緣填充零,以控制輸出數據的空間尺寸,常見的用途是保持輸出尺寸與輸入尺寸相同,避免尺寸在深層網路中快速縮減。 一個典型的 CNN 架構通常包含以下幾個部分串聯而成:
    • 輸入層(Input Layer): 接收原始數據,如圖像。
    • 卷積層(Convolutional Layers): 通過濾波器提取局部特徵,並通常會有多層。
    • 激活函數(Activation Function): 通常使用 ReLU(Rectified Linear Unit),為網路引入非線性。
    • 池化層(Pooling Layers): 減少空間尺寸,增加魯棒性。
    • 全連接層(Fully Connected Layers): 將前一層提取的特徵壓平成一個向量,並進行最終的分類或回歸任務。
    • 輸出層(Output Layer): 輸出最終的結果,例如各類別的機率。 這個架構通常是卷積-激活-池化模塊的重複組合,最後接上全連接層。研究也發現,使用較小尺寸的濾波器但堆疊更多層的卷積層通常能獲得更好的性能,因為這增加了模型的非線性表達能力並減少了參數數量。

卷積層和全連接層在結構上有所不同,但功能上可以相互轉換。全連接層的每個單元與前一層的所有單元相連,而卷積層則只與前一層的局部區域相連並使用參數共享。然而,一個全連接層可以被視為一個特殊的卷積層,其濾波器尺寸與輸入尺寸相同,步長為 1。反之,卷積層也可以展開(Flatten)後連接到全連接層。這種轉換的優點在於,將全連接層轉換為卷積層後,可以處理任意尺寸的輸入圖像,並通過滑動視窗的方式在更大的圖像上高效地進行推斷,這對於需要處理不同尺寸圖像或在圖像中定位特定對象的任務特別有用。 訓練 CNN 時,初始化卷積層的權重是一個重要的步驟。除了最常用的隨機初始化(使用梯度下降進行端到端訓練)外,還有一些其他策略,例如:

  1. 隨機特徵: 將濾波器權重隨機初始化,並在訓練過程中保持固定。這些固定濾波器用於提取特徵,只有網路後續部分的權重進行訓練。這種方法的優點是訓練成本和複雜性降低,但性能可能受限,且固定特徵提取器可能無法適應特定任務。
  2. 無監督特徵: 首先使用無監督學習算法在大量未標註數據上學習濾波器權重,然後將這些權重固定,只訓練網路後續部分的權重。這種方法可以利用未標註數據並學習通用特徵,尤其在標註數據稀缺時有用。然而,性能可能受限,且無監督學習本身也具挑戰性。 這些策略旨在利用不同的數據源和學習範式來初始化和訓練模型,以期在特定情況下達到更好的效果或更低的計算成本。


卷積神經網路核心概念與技術

好的,這份詳細的簡報文件將整合您提供的兩份來源,回顧其中主要的主題、最重要的概念和事實,並包含適當的原文引用。


簡報文件:卷積神經網路 (Convolutional Networks, CNNs) 概覽 日期: 2023年10月26日 來源:

  1. Excerpts from “No. 06 @ Chapter 9 @ Convolutional Networks @ Deep Learning 101” (來源一)
  2. Excerpts from “PDF9.md” (來源二) 核心概念: 卷積神經網路 (CNN) 是一種特別適用於處理網格狀資料(如圖像、音訊波形、文字序列)的深度學習模型。它主要由卷積層 (Convolutional Layer)、激活函數 (Activation Function,通常使用 ReLU)、池化層 (Pooling Layer) 和全連接層 (Fully Connected Layer, FC Layer) 組成。CNN 的核心優勢在於其對圖像等資料結構的特定假設和操作,使其在圖像識別等任務上表現出色。

主要主題與重點:

  1. CNN 的適用性與基本結構:
    • 來源一強調 CNN 非常適合處理圖像資料,因為圖像可以被視為 3D 的體積 (volume),包含長、寬和深度 (depths,例如 RGB 通道)。
    • CNN 的基本結構包含:輸入層 (Input)、卷積層 (Convolutional layer)、激活函數 (Activation function,如 ReLU)、池化層 (Pooling layer) 和全連接層 (Fully connected network)。
    • 最終的全連接層通常用於執行任務,例如圖像分類,輸出各類別的機率。
  2. 卷積 (Convolution) 操作:
    • 來源一從兩種角度解釋卷積:
      • 物理角度(通訊領域類比): 將訊號 (x) 透過通道 (w) 傳輸,接收到的訊號是原始訊號及其延遲版本的疊加(加權和)。這類似於訊號在不同路徑傳輸後產生的延遲和衰減效應。
      • 數學角度: 將輸入 (X) 與一個稱為「濾波器」(filter 或 kernel) 的函數 (w) 進行卷積。數學上,這可以理解為將濾波器翻轉 (flip) 後再進行滑動 (shift) 和 pointwise 相乘然後相加。
    • 來源一也提到了 交叉相關 (Cross-correlation) ,其數學表達式與卷積類似,但不包含濾波器的翻轉步驟。在機器學習領域,通常這兩種操作都被稱為卷積,除非特別強調翻轉的步驟。
    • 「基本上 convolution 的 Operation 就主要是這樣子。」 (來源一)
    • 2D 卷積的操作類似於 1D 卷積,只是在兩個空間維度上進行。
  3. 卷積層的關鍵特性 (Hyperparameters & Characteristics):
    • 來源一詳細闡述了卷積層的幾個重要特性和超參數:
      • 局部連接 (Local Connectivity / Sparse Interaction): 卷積層中的每一個輸出單元只與輸入圖像中的一個小的局部區域 (local region) 相連,這個小區域稱為「感受野」(receptive field)。這與全連接網路不同,全連接網路中的每個單元都與前一層的所有單元相連。
      • 「所謂 local connectivity 的意思就是說,它就是一張圖很大,但是它一次只會跟裡面的其中一小塊區域去做做 convolution。」 (來源一)
      • 在深度 (depths) 維度上,濾波器通常與輸入的整個深度相連。
      • 權重共享 (Parameter Sharing): 同一個濾波器(即一組權重)在整個輸入圖像上滑動並重複使用。這大大減少了模型的參數數量。
      • 「所謂的 parameter sharing 的意思就是說,它就是剛剛前面… 它的每一個 depths 每一個層裡面它的 filter 呢用的全部都是同樣的值。」 (來源一)
      • 權重共享基於的假設是,圖像中的特徵(如邊緣)與其在圖像中的位置無關。
      • 權重共享的優點是「它可以減少那個 weight number」。 (來源一)
      • 深度 (Depth): 卷積層的輸出深度(或稱作輸出的通道數)等於使用的濾波器數量。每一個濾波器可以提取輸入圖像中的一種特定特徵。
      • 「這個 filter 的那個 depths 呢,它其實每一個 depths 它就是 extract 一個 feature 出來。」 (來源一)
      • 步幅 (Stride): 濾波器在輸入圖像上滑動的步長。較大的步幅會減小輸出尺寸。
      • 「Stride 就是說,我在做…就是一直這樣滑過去,那 Stride 就是說我,我在做就是滑過去的時候,我要滑多大步這樣。」 (來源一)
      • 零填充 (Zero Padding): 在輸入圖像的邊緣填充零。這樣做的主要目的是為了控制輸出尺寸,通常用來維持輸出尺寸與輸入尺寸相同,防止尺寸在深層網路中過快縮小。
      • 「Zero Padding 的目的就是…讓我的 output size 跟 Input size 是一模一樣大的。」 (來源一)
    • 來源一還提到了卷積層輸出的尺寸計算公式:(W - F + 2P) / S + 1,其中 W 是輸入尺寸,F 是濾波器尺寸,P 是零填充數,S 是步幅。並提到輸出的尺寸必須是整數。
  4. 池化 (Pooling) 操作:
    • 池化層主要用於執行「降採樣」(downsampling) 的操作。
    • 「Pooling layer… 主要的目的其實就做 downsampling。」 (來源一)
    • 池化操作只會減小空間尺寸(長和寬),不會改變深度。
    • 最常用的池化方法是 最大池化 (Max Pooling) ,即在一個小的區域內取最大值作為該區域的輸出。
    • 池化具有一定的「平移不變性」(invariance) 和「轉換不變性」(invariance to transformation),即對輸入的微小變化(如平移或小的旋轉)不太敏感。
      • 「這個 Pooling 它這個特性就是它其實是可以就是它有一個 invariance 的特性… 它其實會對 local 的 translation 其實是會 invariant。」 (來源一)
      • 「另外一種就是 invariance 是說,它可以去對 transformation 做 invariant。」 (來源一)
  5. CNN 的架構設計考量:
    • 來源一指出,在設計 CNN 架構時,通常偏好使用較小的濾波器尺寸 (如 3x3) 和較多層的卷積層,而不是較大的濾波器和較少的層。
    • 這樣做的好處包括:
      • 增加模型的非線性 (non-linearity),因為每一層都經過激活函數。
      • 學習更豐富和具有表達力的特徵 (more expressive features)。
      • 減少總體的參數數量。
    • 越深的卷積層能夠學習到越抽象和高級的特徵 (high-level features)。
      • 「convolutional layer 越來越深的時候,它其實學的東西是可以從一開始的簡單慢慢學到就是比較 high level 的。」 (來源一)
      • 「越到後面的 layer,它看到的圖其實局部,它看到的東西其實越來越廣,所以它可以越到後面它學得 layer 就是 Level 就 high Level 的 feature。」 (來源一)
  6. CNN 與全連接網路 (FC Network) 的轉換:
    • 來源一說明了 CNN 和 FC 層之間可以相互轉換。
    • 從 CNN 轉換為 FC 層,相當於將 CNN 的輸出展平 (flatten) 成一個向量,然後連接到 FC 層。由於 CNN 的局部連接和權重共享特性,這個等效的 FC 層會有大量的零權重 (sparse weights)。
      • 「其實 CNN 在轉到就是 fully connected network 的時候,其實就是為什麼叫做 sparse connection 就是你只有少數的地方有值,那剩下的地方都是 0。」 (來源一)
    • 從 FC 層轉換為 CNN 層也是可能的。例如,AlexNet 最後的三層 FC 層可以轉換為卷積層,其濾波器尺寸設定為與前一層輸入的空間尺寸相同,步幅為 1,並且不使用零填充。這種轉換在處理尺寸更大的圖像時更有效率,可以在圖像中的多個位置計算分類得分。
      • 「這這樣子轉換的話,其實對於 Many spatial position,就是我如果圖片變大的話,它其實在就是最後得算出那個 class 的時候,它其實可以更有效率。」 (來源一)
  7. CNN 的訓練與反向傳播 (Backpropagation):
    • 來源一提到 CNN 中的反向傳播操作也是一種卷積。具體來說,在計算權重梯度時,需要對前一層的輸入和後一層的誤差信號進行卷積。在計算誤差信號時,需要對下一層的誤差信號和濾波器的翻轉版本進行卷積。
      • 「在做 backpropagation 的時候,他其實也是一個 convolution。」 (來源一)
      • 「Backpropagation 它其實也是一個 convolution,那它的 convolution 只是說它的 filter 是 flip 過來。」 (來源一)
    • 由於權重共享,在反向傳播時,同一濾波器在不同位置計算出的梯度會被累加起來,然後用於更新該濾波器的權重。
    • 池化層的反向傳播相對簡單,通常只將誤差信號傳遞給在正向傳播時貢獻最大值的那個位置 (Max Pooling)。
  8. CNN 的效能優化:
    • 來源一簡要提到了提高 CNN 訓練效率的方法,包括:
      • 利用傅立葉變換 (Fourier Transform),在頻域中卷積變成簡單的 pointwise 相乘。
      • 利用可分離濾波器 (Separable Filter),將高維卷積分解為低維卷積。
  9. CNN 濾波器的初始化策略 (Filter Initialization):
    • 來源一和來源二都提到了 CNN 濾波器的初始化。
    • 來源二詳細列出了兩種初始化策略:
      • 隨機特徵 (Random Features): 濾波器的權重隨機初始化並固定不變。只有網路的後續部分(如全連接層)進行訓練。
      • 無監督特徵 (Unsupervised Features): 首先使用無監督學習方法在大量未標註數據上學習濾波器,然後將這些濾波器固定,只訓練網路的後續部分。
    • 來源一也提到了初始化權重的幾種方式,包括隨機產生 (randomly generate) 和手動設計 (design by hand)。手動設計的濾波器可能針對某些特定的低級特徵(如邊緣)。
    • 潛在優點: 來源二指出這兩種策略可以減少訓練成本和複雜性(因為參數少),無監督特徵還可以利用未標註數據。
    • 潛在缺點: 來源二指出性能可能受限,因為固定的濾波器可能不如端到端訓練的濾波器有效,且無法適應特定任務的細微差別。
  10. 實際應用與技巧:
    • 來源一提到 AlexNet 的例子,說明了實際 CNN 架構中的層堆疊方式以及 FC 層到 CNN 的轉換。

總結: 綜合兩份來源,CNN 是一種強大的神經網路架構,通過局部連接和權重共享實現了參數的高效利用,並通過卷積和池化操作層層提取圖像特徵。其核心機制和設計考量對理解其在計算機視覺領域的成功至關重要。雖然端到端的監督學習訓練是最常見和有效的方法,但在特定情況下,使用隨機或無監督學習得到的固定濾波器也可以作為一種替代策略。然而,實際應用中,模型的效能、硬體軟體配置以及數據量等因素都需要仔細考慮。



卷積神經網路發展與技術要點

好的,以下是根據您提供的來源整理的詳細時間線和角色列表: 詳細時間線:

角色列表: