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. 發起,及其當時任職公司(台灣雪豹科技)無償贊助場地及茶水點心。
去 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
- 白話文手把手帶你科普 GenAI:淺顯介紹生成式人工智慧核心概念,強調硬體資源和數據的重要性。
- 大型語言模型直接就打完收工?:回顧 LLM 領域探索歷程,討論硬體升級對 AI 開發的重要性。
- 檢索增強生成(RAG)不是萬靈丹之優化挑戰技巧:探討 RAG 技術應用與挑戰,提供實用經驗分享和工具建議。
- 大型語言模型 (LLM) 入門完整指南:原理、應用與未來:探討多種 LLM 工具的應用與挑戰,強調硬體資源的重要性。
- 解析探索大型語言模型:模型發展歷史、訓練及微調技術的 VRAM 估算:探討 LLM 的發展與應用,硬體資源在開發中的作用。
- Diffusion Model 完全解析:從原理、應用到實作 (AI 圖像生成);深入探討影像生成與分割技術的應用,強調硬體資源的重要性。
- ASR/TTS 開發避坑指南:語音辨識與合成的常見挑戰與對策:探討 ASR 和 TTS 技術應用中的問題,強調數據質量的重要性。
- 那些 NLP 踩的坑:分享 NLP 領域的實踐經驗,強調數據質量對模型效果的影響。
- 那些語音處理踩的坑:分享語音處理領域的實務經驗,強調資料品質對模型效果的影響。
- 手把手學深度學習安裝環境:詳細介紹在 Ubuntu 上安裝深度學習環境的步驟,分享實際操作經驗。
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: 卷積運算是對兩個函數(一個通常被視為輸入信號,另一個被視為濾波器或核)產生第三個函數(表示一個函數經過另一個函數「滑動」後的加權平均)的一種數學運算。
- 一維連續信號: 如果 x(t) 是輸入信號,w(a) 是核函數,它們的卷積 s(t) = (x * w)(t) 定義為: s(t) = ∫_{-∞}^{∞} x(a)w(t-a)da (積分遍及 a)
- 二維離散圖像: 如果 I 是輸入圖像,K 是核,它們的卷積 S(i,j) = (I * K)(i,j) 定義為: S(i,j) = Σ_m Σ_n I(m,n)K(i-m, j-n) (求和遍及所有可能的 m 和 n) Q: 卷積運算具有什麼重要的數學性質? A: 卷積運算具有 可交換性 (commutativity) ,即 x * w = w * x。這意味著我們可以翻轉輸入和核的角色,結果仍然相同。 Q: 機器學習庫中通常實現的「卷積」運算在數學上更準確地應該被稱為什麼?它與嚴格定義的卷積有何不同? A: 機器學習庫中通常實現的「卷積」運算在數學上更準確地應該被稱為 互相關 (cross-correlation) 。 它與嚴格定義的卷積的不同之處在於,互相關運算 不對核進行翻轉 (flip) 。 * 卷積: S(i,j) = Σ_m Σ_n I(m,n)K(i-m, j-n) (注意 K 的索引是 i-m, j-n) * 互相關: S(i,j) = Σ_m Σ_n I(i+m, j+n)K(m,n) (注意 I 的索引是 i+m, j+n) 或者等價地,互相關可以寫成 S(i,j) = Σ_m Σ_n I(m,n)K(m-i, n-j)(如果將求和中心對準輸出)。 由於在神經網路中,核的參數是通過學習得到的,所以核是否被翻轉通常並不影響模型的學習能力,只是學習到的核的權重會相應地不同。因此,出於實現的簡便性,許多庫直接實現互相關並稱之為卷積。
9.2 動機
重點摘要: 卷積運算通過三個重要的思想來幫助改進機器學習系統: 稀疏交互 (sparse interactions) 、 參數共享 (parameter sharing) 和 等變表示 (equivariant representations) 。
- 稀疏交互 (或稀疏連接、稀疏權重): 在傳統神經網路中,每個輸出單元與所有輸入單元交互(通過矩陣乘法)。卷積網路則具有稀疏交互的特性,這是通過使核的大小遠小於輸入的大小來實現的。例如,處理圖像時,輸入可能有數百萬像素,但我們可能檢測只占據幾十或幾百像素的有用特征,如邊緣。這意味著我們只需要存儲更少的參數,提高了模型的統計效率,並且計算量也更小。一個輸出單元的感受野 (receptive field) 是指輸入中影響該輸出單元的部分。
- 參數共享: 指在一個模型的不同部分使用相同的參數。在卷積網路中,核的每個元素都被應用於輸入的每個位置(通過滑動核)。這意味著用於在一個位置檢測邊緣的參數,也被用於在另一個位置檢測邊緣。這極大地減少了模型的參數數量,並提高了統計效率。傳統神經網路如果大小為 m 個輸入和 n 個輸出,則有 m x n 個參數;如果使用大小為 k 的核進行卷積,則只有 k 個可學習的參數(如果核是一維的且通道數為1)。
- 等變表示 (Equivariant Representations): 對於卷積,參數共享的特殊形式使得網路具有對輸入平移的等變性。如果輸入發生平移,輸出中的表示也會以相同的方式平移。如果一個函數 f(x) 滿足 f(g(x)) = g(f(x)),則稱 f 對變換 g 是等變的。對於卷積,如果 g 是一個平移函數,那麼卷積函數對 g 是等變的。這意味著模型在輸入的不同位置檢測到相同的特征時,會產生相似的激活模式,只是位置不同。
Q: 卷積網路利用了哪些核心思想來改進機器學習系統? A: 卷積網路主要利用了三個核心思想:
- 稀疏交互 (Sparse Interactions) / 稀疏連接 (Sparse Connectivity): 每個輸出單元只與輸入的一個局部區域(感受野)相連接,而不是與所有輸入單元相連。
- 參數共享 (Parameter Sharing): 同一個濾波器(核)的參數在輸入的不同位置是共享的,即用相同的濾波器去掃描整個輸入。
- 等變表示 (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 池化
重點摘要: 一個典型的卷積網路層通常包含三個階段:
- 卷積階段: 執行多個並行卷積,產生一組線性激活。
- 檢測器階段 (Detector Stage): 對線性激活應用一個非線性激活函數(如 ReLU)。
- 池化階段 (Pooling Stage): 修改輸出,使其對輸入的微小變換具有不變性。 池化 (Pooling) 函數使用某一位置的相鄰輸出的總體統計特征來替代網路在該位置的輸出。例如, 最大池化 (max pooling) (Zhou and Chellappa, 1988) 報告矩形鄰域內的最大輸出。其他常用的池化函數包括平均池化、L2 范數池化,或基於離中心像素距離的加權平均池化。 池化的主要作用是使表示對於輸入的微小變化(如平移)具有一定程度的 不變性 (invariance) 。如果輸入發生微小的平移,池化後的輸出通常保持不變(或變化很小)。這有助於模型識別一個對象,即使它在圖像中的確切位置發生了微小變化。 池化還有助於減少表示的維度(下採樣),從而減少後續層的計算量和參數數量,並有助於擴大更高層的感受野。圖 9.8, 9.9, 9.10 展示了池化的不變性和不同池化策略。
Q: 一個典型的卷積網路層通常包含哪三個階段? A: 通常包含三個階段:
- 卷積階段 (Convolution Stage): 網路執行多個並行的卷積操作(使用不同的濾波器)來產生一組線性激活(即特徵圖)。
- 檢測器階段 (Detector Stage): 對卷積階段產生的線性激活應用一個逐元素的非線性激活函數(例如 ReLU, sigmoid, tanh)。
- 池化階段 (Pooling Stage): 對檢測器階段的輸出進行降採樣或匯總操作,以引入一定程度的局部平移不變性並減小表示的維度。 Q: 什麼是池化 (pooling) 操作?它的主要目的是什麼? A: 池化操作是一種對神經網路(特別是卷積網路)中特徵圖進行降採樣或匯總的過程。它通常作用於特徵圖的一個小的局部鄰域(池化窗口),並用該鄰域內值的某個匯總統計量來替代這個鄰域的輸出。 主要目的包括: 1. 引入局部平移不變性 (Local Translation Invariance): 使得模型對輸入的微小平移不那麼敏感。如果在池化窗口內的主要特征發生微小平移但仍位於窗口內,池化後的輸出可能保持不變(如最大池化)或變化很小。 2. 降低表示的維度 (Dimensionality Reduction / Downsampling): 池化通常會減小特徵圖的空間尺寸,從而減少後續層的參數數量和計算量。 3. 擴大感受野 (Increasing Receptive Field): 由於降採樣,後續卷積層的濾波器在原始輸入圖像上對應的感受野會變得更大。 4. 增強表示的魯棒性: 通過對局部區域進行匯總,可以減少對精確位置的依賴,提高對噪聲或微小變形的魯棒性。
Q: 請列舉幾種常見的池化操作。 A: 常見的池化操作包括:
- 最大池化 (Max Pooling): 在池化窗口內取所有值的最大值作為輸出。
- 平均池化 (Average Pooling): 在池化窗口內取所有值的平均值作為輸出。
- L2 范數池化 (L2-Norm Pooling): 計算池化窗口內所有值的 L2 范數作為輸出。
- 加權平均池化 (Weighted Average Pooling): 根據離窗口中心的距離對窗口內的值進行加權平均。
- 隨機池化 (Stochastic Pooling): 根據池化窗口內激活值的機率分布進行隨機採樣。
- 全局池化 (Global Pooling): 例如全局平均池化 (Global Average Pooling, GAP) 或全局最大池化 (Global Max Pooling, GMP),它們將整個特徵圖縮減為單個值(或每個通道一個值),常用於在網路末端替代全連接層。 Q: 池化操作如何幫助實現對輸入微小變換的不變性? A: 池化操作通過對特徵圖的局部區域進行匯總來實現不變性。以最大池化為例,如果在一個池化窗口內,最強的激活(最大值)對應於某個特定的局部模式,那麼只要這個模式在輸入圖像中發生微小的平移,但其最強激活仍然位於同一個池化窗口內並保持為最大值,那麼最大池化的輸出就不會改變。這使得模型對這種微小平移具有不變性。平均池化等其他池化操作也具有類似的(儘管可能程度稍弱的)平滑或不變性效果。
9.4 卷積與池化作為一種無限強的先驗
重點摘要: 可以將卷積和池化視為在神經網路中引入了關於數據的 無限強的先驗 (infinitely strong prior) 。
- 卷積的先驗:
- 局部連接: 特徵是局部的。
- 平移等變性: 如果一個模式出現在圖像的一個部分,它也可能出現在圖像的任何其他部分(參數共享)。
- 池化的先驗:
- 局部平移不變性: 特徵的精確位置不如其相對位置重要。一個檢測到的特征在小範圍內的平移不應改變分類結果。 無限強的先驗是指,如果數據不滿足這些先驗假設,模型將無法學習。例如,如果一個任務需要處理像素的絕對位置信息(如識別圖像中心是否有特定物體,而不管物體是什麼),那麼具有大量池化的卷積網路可能表現不佳。 然而,在許多情況下,這些先驗與現實世界的數據(如自然圖像)的特性非常吻合,因此卷積網路非常有效。當先驗與數據不完全匹配時,模型仍然可以學習補償,例如,更高層的單元可以學習對位置更敏感的表示。
Q: 如何理解「卷積和池化作為一種無限強的先驗」這句話? A: 「無限強的先驗」意味著這些操作(卷積和池化)將某些假設硬編碼 (hard-coded) 到了模型的架構中。如果數據的真實生成過程完全不符合這些假設,那麼模型幾乎不可能學習到好的解,因為模型的結構本身就阻止了它去考慮那些與先驗相悖的可能性。模型對這些先驗的「信念」是無限強的,無法通過學習來完全改變。 例如: * 卷積的參數共享 強加了一個先驗,即在圖像不同位置檢測相同局部模式的參數應該是相同的。如果數據的真實模式是高度位置依賴的(即不同位置的相同視覺模式需要用不同的參數來檢測),那麼這個先驗就會成為一個很強的約束。 * 池化的局部平移不變性 強加了一個先驗,即一個特征的精確位置在一個小鄰域內是不重要的。如果任務恰好需要依賴於特征的精確位置,這個先驗就會有害。 Q: 卷積操作引入了哪些關於數據的先驗假設? A: 卷積操作主要引入了以下關於數據的先驗假設:
- 局部性 (Locality) / 稀疏交互 (Sparse Interactions): 假設有意義的特征可以從輸入數據的局部區域中提取出來。一個輸出特征只依賴於輸入的一個小的局部鄰域(感受野)。
- 平移等變性 (Translation Equivariance) / 參數共享 (Parameter Sharing): 假設在輸入數據的不同空間位置上檢測相同局部模式的統計特性是相似的。因此,可以用相同的濾波器(共享參數)去掃描整個輸入,從而在不同位置檢測相同的模式。
Q: 池化操作引入了哪些關於數據的先驗假設? A: 池化操作主要引入了以下關於數據的先驗假設:
- 局部平移不變性 (Local Translation Invariance): 假設一個被檢測到的特征在一個小的局部區域內的精確位置是不重要的,重要的是該特征是否存在於這個區域內。例如,最大池化意味著我們只關心這個區域內是否存在一個強的激活,而不關心這個強激活的確切像素位置。
- 特徵的匯總性: 假設可以通過對局部區域內的特征進行某種匯總(如取最大值、平均值)來得到一個有用的、更魯棒的表示,同時可以減少數據的維度。
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)。除了標準的卷積,還有一些重要的變體:
- 步幅 (Stride): 卷積核在輸入上滑動的步長。大於 1 的步幅可以實現下採樣。
- 填充 (Padding): 在輸入的邊界周圍添加額外的像素(通常是零填充),以控制輸出特徵圖的空間尺寸,並允許核在邊緣區域進行有效的卷積。常見的填充策略有 “valid”(不填充,輸出尺寸會縮小)和 “same”(填充使得輸出尺寸與輸入尺寸相同,如果步幅為1)。
- 非共享卷積 (Unshared Convolution) / 局部連接層 (Locally Connected Layer): 類似於卷積,但每個空間位置使用一組獨立的、不共享的權重。它具有稀疏交互,但沒有參數共享。
- 平鋪卷積 (Tiled Convolution): 介於標準卷積和局部連接層之間。它將輸入劃分為多個「塊 (tiles)」,在每個塊內使用一組共享的權重,但不同塊之間的權重是獨立的。這允許模型學習到一些空間變化的模式,同時仍然利用一定程度的參數共享。 Q: 在神經網路的卷積層中,輸入、核(濾波器)和輸出通常是什麼樣的數據結構(張量維度)? A:
- 輸入 V : 通常是一個四維張量,其維度可以表示為 (批量大小, 輸入通道數, 輸入高度, 輸入寬度)。例如,一批 RGB 圖像的輸入張量,輸入通道數為 3。
- 核 (Kernel / Filter) K : 也是一個四維張量,其維度可以表示為 (輸出通道數, 輸入通道數, 核高度, 核寬度)。輸出通道數決定了該卷積層產生多少個不同的特徵圖。輸入通道數必須與輸入數據的通道數匹配。
- 輸出 Z : 經過卷積操作後產生的特徵圖,也是一個四維張量,其維度可以表示為 (批量大小, 輸出通道數, 輸出高度, 輸出寬度)。輸出高度和寬度取決於輸入大小、核大小、步幅和填充。
Q: 什麼是卷積的「步幅 (stride)」?它如何影響輸出特徵圖的大小? A: 卷積的「步幅」是指卷積核在輸入數據上滑動時,每次移動的像素數量(在水平和垂直方向上)。
- 如果步幅為 1,核每次移動一個像素。
- 如果步幅大於 1(例如,步幅為 2),核每次移動多個像素。 步幅會影響輸出特徵圖的空間尺寸。較大的步幅會導致輸出特徵圖的尺寸比輸入尺寸更小,實際上實現了一種 下採樣 (downsampling) 的效果。 Q: 什麼是卷積的「填充 (padding)」?它有哪些常見的策略,各自有什麼效果? A: 卷積的「填充」是指在輸入數據的邊界周圍添加額外的像素(通常填充值為零,稱為零填充, zero-padding)。 常見的填充策略及其效果: 1. 有效填充 (Valid Padding) / 無填充 (No Padding): * 效果: 不進行任何填充。卷積核只能在完全位於輸入圖像內的位置進行操作。這會導致輸出特徵圖的空間尺寸比輸入尺寸小。具體來說,如果輸入寬度為 i_w,核寬度為 k_w,步幅為 s,則輸出寬度約為 (i_w - k_w) / s + 1。 2. 相同填充 (Same Padding): * 效果: 進行適當的零填充,使得當步幅為 1 時,輸出特徵圖的空間尺寸與輸入特徵圖的空間尺寸相同。這有助於保持特徵圖的空間維度在網路中傳播時不至於過快縮小,並允許卷積核更好地處理圖像邊緣的像素。 3. 全填充 (Full Padding): * 效果: 進行足夠的零填充,使得輸入圖像中的每個像素都至少作為卷積核中心一次。這會導致輸出特徵圖的尺寸比輸入尺寸大。這種策略在信號處理中較為常見,在深度學習的卷積網路中較少直接使用。
Q: 什麼是非共享卷積 (unshared convolution) 或局部連接層 (locally connected layer)?它與標準卷積有何不同? A: 非共享卷積(或局部連接層)是一種介於標準卷積和全連接層之間的層類型。
- 與標準卷積的不同:
- 參數共享: 標準卷積在整個輸入空間中使用 共享的 卷積核參數。
- 非共享卷積/局部連接層: 它仍然保持了 局部連接 的特性(即每個輸出單元只與輸入的一個局部區域相連),但它 不進行參數共享 。也就是說,輸入的不同空間位置使用 獨立的、不共享的 濾波器權重。 可以將其視為在輸入的每個局部感受野上都應用一個獨立的小型全連接層。
- 優缺點:
- 優點: 比全連接層參數少(因為連接是局部的),比標準卷積層具有更強的表達能力(因為權重不共享,可以學習到位置相關的特征)。
- 缺點: 參數數量遠多於標準卷積層,更容易過擬合,計算成本也更高。 Q: 什麼是平鋪卷積 (tiled convolution)?它如何平衡標準卷積和局部連接層的特性? A: 平鋪卷積是一種介於標準卷積(完全參數共享)和局部連接層(完全無參數共享)之間的折中方案。
- 工作原理: 它將輸入劃分為多個「平鋪塊 (tiles)」。在每個平鋪塊內部,使用一組共享的卷積核。但是,不同的平鋪塊之間可以使用不同的卷積核組。 可以看作是在輸入的不同宏觀區域使用不同的濾波器組,但在每個宏觀區域內部則進行參數共享。
- 平衡特性:
- 它比標準卷積具有更強的表達能力,因為它允許模型學習到一些隨空間位置變化的模式(即不同平鋪塊的模式可能不同)。
- 它比局部連接層具有更少的參數和更好的統計效率,因為在每個平鋪塊內部仍然存在參數共享。 平鋪卷積試圖在模型的表達能力和參數效率之間取得一個較好的平衡。
9.6 結構化輸出
重點摘要: 卷積網路可以用於產生高維的結構化輸出,而不僅僅是分類標籤。例如,在圖像分割任務中,網路需要為輸入圖像的每個像素預測一個類別標籤,輸出與輸入具有相同的空間網格結構。 當使用卷積網路進行結構化輸出時,通常需要仔細設計網路架構,以確保輸出具有期望的空間維度和結構。這可能涉及到:
- 避免或限制池化操作: 以保持空間解析度。
- 使用上採樣 (upsampling) 或反卷積 (deconvolution / transposed convolution): 將低解析度的特徵圖放大到期望的輸出解析度。
- 跳躍連接 (Skip Connections): 例如在 U-Net 架構中,將編碼器部分的淺層特徵圖與解碼器部分的深層特徵圖相結合,有助於恢復在下採樣過程中損失的空間細節。 Q: 卷積網路除了用於分類任務(輸出單個類別標籤),還可以用於哪些需要「結構化輸出」的任務?請舉例說明。 A: 「結構化輸出」是指模型的輸出不是一個簡單的標量或類別標籤,而是一個具有內部結構的複雜對象,例如一個序列、一個網格、一棵樹或一個圖。 卷積網路可以用於以下需要結構化輸出的任務: 1. 圖像分割 (Image Segmentation): * 語義分割 (Semantic Segmentation): 為輸入圖像中的每個像素分配一個類別標籤(例如,將像素分類為「道路」、「天空」、「汽車」、「行人」等)。輸出是一個與輸入圖像大小相同的標籤圖。 * 實例分割 (Instance Segmentation): 在語義分割的基礎上,進一步區分同一類別的不同實例(例如,識別出圖像中的每一輛獨立的汽車)。 2. 對象檢測 (Object Detection): 在圖像中定位不同對象的位置(通常用邊界框表示)並識別其類別。輸出是一系列邊界框及其對應的類別標籤。 3. 圖像標註 (Image Captioning): 為輸入圖像生成一段描述性的文本。輸出是一個詞語序列。 4. 圖像超解析度 (Image Super-Resolution): 將低解析度圖像轉換為高解析度圖像。輸出是一個高解析度圖像。 5. 圖像風格轉換 (Image Style Transfer): 將一張內容圖像的風格轉換為另一張風格圖像的風格。輸出是一張新的風格化圖像。 6. 深度估計 (Depth Estimation): 從單張或多張圖像中估計場景的深度信息。輸出是一個深度圖。
Q: 在設計用於結構化輸出任務(如圖像分割)的卷積網路時,需要考慮哪些架構上的調整以保持或恢復輸出的空間結構? A:
- 避免或減少池化/下採樣: 池化操作會減小特徵圖的空間解析度。對於需要像素級預測的任務,過多的池化會導致空間信息的損失。因此,可能需要使用步幅為 1 的卷積,或者完全避免池化,或者使用「空洞卷積/擴張卷積 (atrous/dilated convolution)」來在不降低解析度的情況下擴大感受野。
- 使用上採樣 (Upsampling) / 反卷積 (Deconvolution / Transposed Convolution): 在網路的後續部分(通常稱為解碼器或上採樣路徑),需要將編碼器部分產生的低解析度但語義信息豐富的特徵圖逐步上採樣回原始輸入圖像的解析度。反卷積(或更準確地說是轉置卷積)是一種可以學習的上採樣方法。也可以使用更簡單的插值方法(如雙線性插值)進行上採樣,然後再接卷積層。
- 跳躍連接 (Skip Connections): 為了彌補在編碼器下採樣過程中損失的空間細節信息,並幫助梯度更好地流動,通常會引入從編碼器部分的淺層(高解析度、低級別特征)到解碼器部分的對應深層(經過上採樣後解析度恢復的、高級別特征)的跳躍連接。U-Net 是一個廣泛使用這種跳躍連接的圖像分割架構。這些連接將低級別的精細紋理和邊緣信息與高級別的語義信息相結合,有助於產生更精確的分割結果。
9.7 數據類型
重點摘要: 卷積網路處理的數據通常包含多個通道,每個通道是在時間或空間中某一點的某種觀測。
- 時間序列數據 (1D): 例如,音頻信號在每個時間點有一個幅值(單通道),或者金融數據在每個時間點有多個指標(多通道)。
- 圖像數據 (2D): 例如,灰度圖像在每個像素位置有一個亮度值(單通道),彩色圖像(如 RGB)在每個像素位置有三個顏色通道的值(多通道)。
- 視頻數據 (3D 或更高維): 可以看作是圖像幀的時間序列。一個視頻片段在每個時間點的每個像素位置都有顏色通道的值。如果使用 3D 卷積,核也會有時間維度。
- 體積數據 (3D): 例如,醫學成像(如 CT、MRI 掃描)產生的是三維體積數據,每個體素有一個值(單通道或多通道,如果有多種成像模式)。 卷積運算可以自然地推廣到處理這些不同維度的多通道數據。核的輸入通道數必須與輸入數據的通道數匹配,而核的輸出通道數則決定了該卷積層產生多少個輸出特徵圖(通道)。
Q: 卷積網路可以處理哪些不同類型的數據?請結合「通道 (channel)」的概念進行說明。 A: 卷積網路可以處理多種類型的具有網格結構的數據,並且能夠處理多通道輸入。
- 時間序列數據 (1D 數據):
- 單通道: 例如,一段音頻信號,每個時間點有一個幅值。
- 多通道: 例如,加速度計數據,每個時間點有 x, y, z 三個方向的加速度值(3個通道);或者股票市場數據,每個時間點有開盤價、收盤價、最高價、最低價、成交量等多個指標(多個通道)。
- 圖像數據 (2D 數據):
- 單通道: 例如,灰度圖像,每個像素位置只有一個亮度值。
- 多通道: 例如,彩色 RGB 圖像,每個像素位置有紅色 (R)、綠色 (G)、藍色 (B) 三個通道的值。醫學圖像也可能有多個通道,對應不同的成像模態。
- 視頻數據 (通常視為 2D 圖像序列或 3D 數據):
- 可以將視頻看作是一系列圖像幀在時間維度上的序列。每一幀都是一個多通道的圖像(例如 RGB)。如果使用 2D CNN 逐幀處理,然後用 RNN 處理時間序列;或者直接使用 3D CNN,其卷積核也具有時間維度,可以直接在 (高度, 寬度, 時間) 的網格上操作。
- 體積數據 (3D 數據):
- 例如,醫學 CT 或 MRI 掃描產生的數據是三維的體素網格,每個體素有一個值(例如,組織密度)。如果有多種掃描序列或成像模式,也可以是多通道的。3D CNN 可以直接處理這種體積數據。 「通道」指的是在網格的每個空間(或時間)位置上,有多少個不同的觀測值或特征。卷積操作能夠自然地處理多通道輸入,並產生多通道輸出。
9.8 高效的卷積算法
重點摘要: 儘管卷積運算在概念上很直觀,但其直接實現(特別是在多個輸入輸出通道、大圖像和多個濾波器時)計算成本可能很高。有許多算法旨在提高卷積的計算效率。
- 基於傅里葉變換的卷積: 根據卷積定理,兩個函數的卷積的傅里葉變換等於它們各自傅里葉變換的乘積。因此,可以通過以下步驟計算卷積:
- 對輸入和核進行傅里葉變換 (FFT)。
- 在頻域中進行逐元素相乘。
- 對結果進行傅里葉逆變換 (IFFT)。 這種方法在核較大時可能比直接卷積更快,但對於深度學習中常用的小核(如 3x3, 5x5)和特定的硬件(如 GPU),其優勢可能不明顯,且可能引入額外的數值精度問題或內存開銷。
- 其他快速卷積算法: 如 Winograd 算法、Strassen 算法(用於矩陣乘法,而卷積可以轉換為矩陣乘法)等,它們試圖通過更少的乘法操作來計算卷積。這些算法通常在特定的核大小和硬件上才能發揮最佳效果。 現代深度學習框架(如 TensorFlow, PyTorch)的底層庫(如 cuDNN, MIOpen)通常會根據輸入大小、核大小、硬件特性等自動選擇或實現最優的卷積算法。
Q: 除了直接按照定義滑動卷積核進行計算,還有哪些方法可以更高效地計算卷積?請簡述基於傅里葉變換的方法。 A:
- 基於傅里葉變換的卷積:
- 原理: 利用卷積定理,該定理指出「時域(或空域)的卷積等於頻域的乘積」。
- 步驟: a. 對輸入數據(例如圖像)和卷積核都進行快速傅里葉變換 (FFT),將它們轉換到頻域。 b. 在頻域中,將它們的傅里葉變換結果進行逐元素的點乘。 c. 對點乘的結果進行快速傅里葉逆變換 (IFFT),得到原始卷積的結果。
- 優缺點: 對於較大的卷積核,這種方法在理論上可以減少計算複雜度(從 O(N²k²) 到 O(N²logN),其中 N 是圖像邊長,k 是核邊長)。但在深度學習中,常用的卷積核通常較小(如 3x3, 5x5),並且現代 GPU 對直接卷積進行了高度優化,因此基於 FFT 的卷積在這些情況下不一定更快,反而可能因為 FFT 本身的開銷、數據轉換的開銷以及數值精度問題而變得不那麼有吸引力。此外,它通常需要對輸入和核進行適當的零填充以處理循環卷積的問題。
- Winograd 算法: 一種通過更少的乘法操作來計算小卷積核(如 2x2, 3x3 作用於小的輸入塊)的算法。它在許多現代深度學習庫中被用於加速小核卷積。
- 將卷積轉換為矩陣乘法 (im2col/kn2row + GEMM):
- 原理: 可以通過重新排列輸入數據的局部塊(im2col 操作,將每個感受野區域拉平成一個列向量)和卷積核的權重(kn2row 操作,將每個濾波器拉平成一個行向量),將卷積運算轉換為一個大規模的通用矩陣乘法 (GEMM) 操作。
- 優勢: 現代 CPU 和 GPU 都對 GEMM 操作進行了高度優化,因此這種方法可以利用這些優化庫(如 BLAS, cuBLAS)來實現高效的卷積計算。這是許多深度學習框架中實現卷積的常用底層方法。
9.9 隨機或無監督的特征
重點摘要: 在卷積網路的背景下,一種有趣的策略是使用 隨機初始化且固定的卷積核 ,或者通過 無監督學習 (如 K-均值聚類、稀疏編碼、RBM、自編碼器)從未標註數據中學習卷積核,然後將這些預訓練好的或隨機的核作為固定的特征提取器,只訓練網路的後續部分(如全連接分類層)。
- 優點:
- 減少訓練成本: 如果大部分卷積層的權重是固定的,那麼需要訓練的參數數量會大大減少。
- 利用未標註數據: 無監督預訓練可以從大量未標註數據中學習有用的低級特征。
- 缺點:
- 性能可能不如端到端訓練: 隨機核或未針對特定監督任務優化的無監督核可能不如通過端到端反向傳播學習到的核那麼有效。 儘管端到端的有監督訓練通常能達到最佳性能,但在某些資源受限或標註數據稀缺的情況下,使用隨機或無監督特征仍然是一種可行的策略,或者可以作為一個較好的初始化。 Q: 什麼是使用「隨機或無監督特征」的卷積網路策略?它是如何工作的? A: 這種策略是指不對卷積網路的所有層(特別是早期的卷積層)的權重進行端到端的監督學習,而是:
- 隨機特征: 將卷積層的濾波器(核)的權重隨機初始化(例如,從某個固定的機率分佈中採樣),然後在整個訓練過程中保持這些權重固定不變。這些固定的隨機濾波器作為一種通用的特征提取器。
- 無監督特征: 首先在大量未標註的圖像數據上使用無監督學習算法(例如,K-均值聚類作用於圖像塊、稀疏編碼、自編碼器、RBM)來學習一組濾波器。然後,將這些通過無監督學習得到的濾波器作為卷積層的固定權重。 在這兩種情況下,只有網路的後續部分(例如,更深層的卷積層、全連接層或最終的分類器)的權重是通過監督學習(基於標註數據)進行訓練的。
Q: 使用隨機或無監督特征的策略有哪些潛在的優點和缺點?
A:
- 潛在優點:
- 減少訓練成本和複雜性: 如果大部分卷積層的權重是固定的,那麼需要通過梯度下降學習的參數數量會大大減少,從而可能加速訓練過程並降低對計算資源的需求。
- 利用未標註數據 (對於無監督特征): 無監督預訓練可以從大規模的、易於獲取的未標註數據中學習到一些通用的、有用的低級和中級圖像特征,這些特征可能對後續的監督任務有益,尤其是在標註數據稀缺的情況下。
- 簡化模型設計: 在某些情況下,可以作為一種快速搭建原型或評估後續層設計的方法。 * 潛在缺點:
- 性能可能受限: 隨機生成的濾波器或者通過與目標監督任務無直接關聯的無監督任務學習到的濾波器,其提取的特征可能不如通過端到端的、針對特定監督任務優化的濾波器那麼有效和具有判別性。因此,最終模型的性能可能會低於完全監督訓練的模型。
- 次優的特征表示: 固定的特征提取器可能無法適應特定任務的細微差別。
- 無監督學習本身的挑戰: 有效地進行無監督特征學習本身也是一個具有挑戰性的研究課題。
9.10 卷積網路的神經科學基礎
重點摘要: 卷積網路的設計在很大程度上受到了對哺乳動物視覺系統(特別是初級視覺皮層 V1)的研究的啟發。
- Hubel 和 Wiesel 的經典工作 (1959, 1962, 1968): 他們的研究發現貓和猴子的 V1 區域的神經元對視野中的特定局部朝向的邊緣或條紋具有選擇性響應。這些神經元的感受野是局部的。
- 簡單細胞 (Simple Cells) 和複雜細胞 (Complex Cells):
- 簡單細胞: 對特定位置、特定朝向的刺激反應最強。其響應可以大致用線性濾波器(類似 Gabor 濾波器)後加一個非線性閾值來建模。
- 複雜細胞: 也對特定朝向的刺激有選擇性,但其響應在一個較小的局部區域內對刺激的確切位置不那麼敏感(具有一定的平移不變性)。複雜細胞的響應可以被認為是對多個簡單細胞(具有相同朝向偏好但在感受野內位置略有不同)的響應進行某種形式的池化(例如,取最大值)。
- 層次化處理: 視覺信息在視覺皮層中是層次化處理的,從 V1 區域的簡單特征(邊緣、角點)到更高層次的視覺區域(如 V2, V4, IT 皮層)的更複雜的形狀和對象表示。 卷積網路的架構(局部感受野的卷積層、非線性激活、池化層、多層堆疊)在概念上與視覺皮層的這些特性有一定的對應關係。例如,卷積濾波器類似於簡單細胞的感受野,池化操作類似於複雜細胞實現的局部不變性,而網路的深度則對應於視覺通路的層次化處理。 Gabor 濾波器 (公式 9.16) 是一種在數學上能夠很好地模擬 V1 簡單細胞感受野特性的函數。
Q: 卷積神經網路的設計受到了哺乳動物視覺系統的哪些關鍵發現的啟發? A: 主要受到了以下關鍵發現的啟發:
- 局部感受野 (Local Receptive Fields): David Hubel 和 Torsten Wiesel 的研究表明,初級視覺皮層 (V1) 中的神經元只對視野中的一個小的局部區域內的刺激做出響應。這啟發了 CNN 中卷積核只作用於輸入的局部區域。
- 朝向選擇性 (Orientation Selectivity): V1 中的許多神經元(稱為簡單細胞和複雜細胞)對特定朝向的邊緣或條紋刺激反應最強。這啟發了 CNN 中的濾波器學習檢測特定的局部模式,如邊緣。
- 簡單細胞 (Simple Cells) 和複雜細胞 (Complex Cells):
- 簡單細胞: 對刺激的精確位置和朝向敏感。這類似於 CNN 中卷積層的線性濾波操作加非線性激活。
- 複雜細胞: 對刺激的朝向敏感,但在一個小範圍內對其精確位置不敏感(具有局部平移不變性)。這啟發了 CNN 中的池化操作。
- 層次化處理 (Hierarchical Processing): 視覺信息在視覺皮層中是逐級處理的,從低級別的簡單特征(如 V1 中的邊緣)到高級別的複雜特征和對象表示(如在 IT 皮層中)。這啟發了 CNN 的多層堆疊架構。
Q: 什麼是簡單細胞 (simple cell) 和複雜細胞 (complex cell)?它們在視覺信息處理中各自扮演什麼角色?它們與 CNN 中的哪些操作相對應? A:
- 簡單細胞:
- 角色: 主要檢測視野中特定位置、特定朝向的簡單視覺刺激,如亮條、暗條或邊緣。它們的感受野通常可以被劃分為興奮性區域和抑制性區域。
- 對應 CNN 操作: 類似於卷積層中的 線性濾波操作 (卷積核可以被看作是匹配特定模式的模板)後接一個 非線性激活函數 。
- 複雜細胞:
- 角色: 也對特定朝向的刺激有選擇性,但與簡單細胞不同,它們的響應在一個較大的感受野內的局部區域對刺激的確切位置不那麼敏感,即具有一定的 局部平移不變性 。它們通常接收來自多個具有相似朝向偏好但在感受野內位置略有不同的簡單細胞的輸入。
- 對應 CNN 操作: 類似於 池化 (pooling) 操作(特別是最大池化)。池化操作通過對一個局部區域內的特征激活進行匯總(如取最大值),來實現對微小平移的不變性。 Q: Gabor 濾波器與 V1 簡單細胞的感受野有什麼關係? A: Gabor 濾波器是一種在數學上被廣泛用於模擬哺乳動物初级視覺皮層 (V1) 中簡單細胞感受野響應特性的函數。Gabor 濾波器本質上是一個高斯包絡下的正弦平面波,它具有局部性(由高斯包絡決定)、朝向選擇性(由正弦波的方向決定)和空間頻率選擇性(由正弦波的頻率決定)的特性,這些特性與實驗觀察到的 V1 簡單細胞的感受野特性非常吻合。在早期的計算機視覺和一些 CNN 研究中,Gabor 濾波器有時被用作手工設計的或初始化的特征提取器。
9.11 卷積網路與深度學習的歷史
重點摘要: 卷積網路在深度學習的歷史中扮演了至關重要的角色,並且是最早成功應用的深度模型之一。
- 早期工作 (Neocognitron): Fukushima (1980) 提出的 Neocognitron 被認為是現代卷積網路的一個重要前身,它已經包含了類似於卷積和下採樣(池化)的思想。
- LeCun 等人的工作 (1989, 1998 - LeNet): Yann LeCun 及其合作者在 20 世紀 80 年代末和 90 年代對卷積網路的發展做出了奠基性的貢獻。他們將反向傳播算法成功應用於訓練卷積網路,並開發了著名的 LeNet-5 架構,用於手寫數字識別(如支票讀取),取得了商業上的成功。LeNet 架構已經具備了現代 CNN 的許多核心組件:卷積層、池化層、全連接層。
- 沉寂與復興: 在 20 世紀 90 年代末和 21 世紀初,由於支持向量機 (SVM) 等其他機器學習方法的興起以及訓練深度網路的困難,卷積網路的研究相對沉寂。然而,隨著計算能力的增強(特別是 GPU 的出現)、更大規模標註數據集(如 ImageNet)的出現以及深度學習訓練技術的進步(如更好的優化算法、正則化方法),卷積網路在 2010 年左右開始迎來復興。
- ImageNet 競賽的突破 (AlexNet - 2012): Krizhevsky, Sutskever, and Hinton (2012) 開發的 AlexNet 模型在 2012 年的 ImageNet 大規模視覺識別挑戰賽 (ILSVRC) 中取得了遠超傳統方法的突破性成果,這被認為是深度學習(特別是卷積網路)在計算機視覺領域取得主導地位的里程碑事件。AlexNet 使用了更深的卷積網路結構、ReLU 激活函數、Dropout 正則化,並在 GPU 上進行了高效訓練。
- 後續發展: 自 AlexNet 以來,卷積網路的架構不斷演進,出現了許多更深、更複雜、性能更好的模型,如 VGG, GoogLeNet (Inception), ResNet, DenseNet 等,它們在各種計算機視覺任務上持續刷新記錄。 卷積網路是第一個能夠使用反向傳播進行有效訓練的深度網路之一。
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 引入了以下重要的改進或特性:
- 更深的網絡結構: AlexNet 比 LeNet 更深,包含了更多的卷積層和全連接層,使其具有更強的表達能力。
- 使用 ReLU 激活函數: 替換了傳統的 sigmoid 或 tanh 激活函數。ReLU 能夠加速訓練收斂並在一定程度上緩解梯度消失問題。
- 使用 Dropout 正則化: 在全連接層中使用了 Dropout 來防止過擬合,這對於在 ImageNet 這樣的大規模數據集上訓練大型模型至關重要。
- 數據增強: 採用了多種數據增強技術(如圖像平移、翻轉、顏色抖動)來擴大訓練數據集,提高模型的泛化能力。
- 在 GPU 上進行高效訓練: 利用 GPU 的並行計算能力來加速大型卷積網路的訓練過程,使得在 ImageNet 這樣的大規模數據集上進行訓練成為可能。
- 局部響應歸一化 (Local Response Normalization, LRN): 雖然現在較少使用,但在當時被認為有助於提高性能。
- 重疊池化 (Overlapping Pooling): 使用的池化窗口的步幅小於窗口大小,使得相鄰的池化窗口之間存在重疊。
卷積神經網路學習指南
卷積神經網路(CNN)學習指南 這份學習指南旨在幫助您複習卷積神經網路的相關概念,主要根據提供的來源材料進行整理。 一、 測驗題 (十題,每題約 2-3 句話作答)
- 卷積神經網路(CNN)為何特別適合處理圖像數據?
- 請用物理學的角度簡要解釋什麼是卷積 (convolution)。
- 請用數學的角度簡要解釋什麼是卷積 (convolution),特別提到 filter 和 shift 的概念。
- 傳統機器學習中的卷積 (convolution) 和互相關 (cross-correlation) 有什麼關係?
- 描述卷積神經網路的基本架構流程,包含主要層的順序。
- 卷積層中 “local connectivity” 或稱 “sparse interaction” 的特性是什麼意思?
- 卷積層中 “parameter sharing” 的特性是什麼意思?這有什麼好處?
- 請列出卷積層中需要注意的三個超參數 (hyperparameter)。
- 池化層 (pooling layer) 的主要目的是什麼?它對圖像的哪個維度會造成影響?
- 卷積神經網路訓練中,使用隨機或無監督特徵有哪些潛在優點?
二、 申論題 (五題,不提供答案)
- 詳細比較並對比傳統機器學習中的卷積 (convolution) 和互相關 (cross-correlation),並解釋為什麼在深度學習中這兩種操作常常被統稱為卷積。
- 深入探討卷積神經網路的 local connectivity 和 parameter sharing 特性如何有效地減少模型的參數數量,並與全連接神經網路進行比較。
- 解釋池化層 (pooling layer) 的 invariance 特性如何有助於提升模型的穩健性,並討論不同類型的池化操作(如 max pooling 和 average pooling)在實際應用中的潛在優劣。
- 詳細闡述使用尺寸較小的濾波器 (filter) 但層數較多的卷積層作為網路架構的優勢,並解釋其背後的原理,包含 receptive field 的變化和參數數量的影響。
- 探討卷積神經網路和全連接神經網路之間的相互轉換機制,並說明這種轉換在處理不同大小圖像時的應用和優勢。
三、 關鍵詞彙表 (附定義)
- 卷積神經網路 (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 (等變性): 模型的輸出隨著輸入數據的變化以一種可預測的方式變化(例如輸入圖像平移,輸出特徵圖也平移)。
四、 測驗答案
- CNN 特別適合處理圖像數據,因為圖像本身是 3D 的 Volume (長、寬、深度如 RGB),而 CNN 的結構可以有效地處理這種 3D 數據,並且透過局部連接和權重共享的特性來提取圖像的局部特徵。
- 從物理學角度看,卷積可以比喻為訊號通過一個 Channel。例如,無線通訊中傳輸的訊號會受到延遲和衰減的影響,接收端收到的訊號是原始訊號和其延遲衰減版本的疊加,這個疊加過程類似於卷積。
- 從數學角度看,卷積是一個 Operation,通常可以表示為輸入訊號與 Filter 翻轉後再做 Shift 後的點積相加。這包含了將 Filter 反向 (Flip) 和在輸入上移動 (Shift) 的過程。
- 傳統機器學習中的卷積和互相關在數學定義上略有不同(互相關沒有翻轉濾波器),但在深度學習中,由於濾波器的權重是學習得到的,這兩者在功能上是等效的,通常都被稱為卷積。
- 卷積神經網路的基本架構流程通常包含:Input Layer -> Convolutional Layer -> Activation Function (e.g., ReLU) -> Pooling Layer -> Fully Connected Layer -> Output Layer (for classification). 中間的卷積、激活和池化層組合可以重複多次。
- Local connectivity 或 sparse interaction 指的是卷積層的每個輸出單元只與輸入圖像的一個小區域(稱為 receptive field)連接,而不是與整個輸入圖像連接。
- Parameter sharing 指的是在同一卷積層中,同一個濾波器在輸入數據的不同位置使用相同的權重。這樣可以大大減少模型的參數數量,並假設某些特徵(如邊緣)在圖像的不同位置都可能出現。
- 卷積層的三個主要超參數是 Depth (濾波器的數量)、Stride (濾波器滑動的步長) 和 Zero Padding (在輸入邊緣填充的零數量)。
- 池化層的主要目的是減小空間尺寸(寬度和高度),從而減少計算量和參數數量,並提供一定程度的平移不變性。它只會對長和寬這兩個維度造成影響,深度維度不會改變。
- 使用隨機或無監督特徵的潛在優點包括:減少訓練成本和複雜性(參數較少),可以利用大規模未標註數據(對於無監督特徵),以及簡化模型設計和原型開發。
卷積神經網路核心概念
卷積神經網路(Convolutional Neural Network, CNN)是一種特別適合處理具有網格狀拓撲數據(例如圖像)的神經網路。它有別於傳統的全連接神經網路,主要利用了卷積層(Convolutional Layer)、激活函數(Activation Function,如 ReLU)、池化層(Pooling Layer)和最後的全連接層(Fully Connected Layer)來提取特徵並進行分類或其他任務。CNN 之所以特別適合圖像處理,是因為圖像具有長、寬和深度(如 RGB 色彩通道)等三維結構,而 CNN 的卷積操作能夠有效地處理這種結構。 卷積操作是 CNN 的核心。它可以從物理或數學的角度來理解。從物理角度看,可以想像訊號經過一個頻道或系統的影響。從數學角度看,它是一個將濾波器(Filter 或 Kernel)與輸入數據進行點積(Dot Product)並滑動的操作。具體來說,就是將一個小的濾波器在輸入數據上滑動,在每個位置與對應的輸入數據區域進行逐元素的乘法後相加,得到輸出的一個值。這個濾波器會捕捉輸入數據中的局部特徵。傳統意義上的卷積包含翻轉濾波器,而機器學習中常用的是互相關(Cross-correlation),但不論是傳統卷積或互相關,在機器學習中都常被統稱為卷積。
卷積層主要有三個特點:
- 局部連接(Local Connectivity / Sparse Interaction): 卷積層中的每個輸出單元只與輸入數據中的一小塊區域(稱為感受野 Receptive Field)相連,而不是與整個輸入相連。這模仿了生物視覺系統對局部區域的處理。
- 參數共享(Parameter Sharing): 在同一卷積層中的同一個深度切片內,所有輸出單元都使用相同的濾波器權重和偏差值。這大大減少了需要學習的參數數量,並使得模型能夠捕捉圖像中的相同特徵,無論該特徵出現在圖像的哪個位置。
- 池化(Pooling): 雖然池化是獨立的一層,但通常緊隨卷積層。它的主要目的是降採樣(Downsampling),減少數據的空間尺寸(長和寬),從而減少計算量和參數,同時增加模型對輸入數據變化的魯棒性。 卷積層的感受野是指輸出數據中的一個單元對應到原始輸入數據中的區域大小。雖然單個卷積層只處理輸入數據的局部區域,但隨著網路層數的增加,更高層的輸出單元對應的感受野會越來越大。這意味著深層卷積層能夠學習到更複雜、更抽象的高層特徵,例如物體的形狀、部位(眼睛、鼻子)甚至整張臉,而淺層卷積層則學習到更簡單的低層特徵,如邊緣或顏色變化。
卷積層有幾個重要的超參數需要設定:
- 深度(Depth): 指的是卷積層使用的濾波器數量,每個濾波器會提取一種特定的特徵。增加深度可以讓模型學習到更多種類的特徵。
- 步長(Stride): 指的是濾波器在輸入數據上滑動的步長。較大的步長會減少輸出數據的尺寸,從而降低計算量和參數數量。
- 零填充(Zero Padding): 在輸入數據的邊緣填充零,以控制輸出數據的空間尺寸,常見的用途是保持輸出尺寸與輸入尺寸相同,避免尺寸在深層網路中快速縮減。
一個典型的 CNN 架構通常包含以下幾個部分串聯而成:
- 輸入層(Input Layer): 接收原始數據,如圖像。
- 卷積層(Convolutional Layers): 通過濾波器提取局部特徵,並通常會有多層。
- 激活函數(Activation Function): 通常使用 ReLU(Rectified Linear Unit),為網路引入非線性。
- 池化層(Pooling Layers): 減少空間尺寸,增加魯棒性。
- 全連接層(Fully Connected Layers): 將前一層提取的特徵壓平成一個向量,並進行最終的分類或回歸任務。
- 輸出層(Output Layer): 輸出最終的結果,例如各類別的機率。 這個架構通常是卷積-激活-池化模塊的重複組合,最後接上全連接層。研究也發現,使用較小尺寸的濾波器但堆疊更多層的卷積層通常能獲得更好的性能,因為這增加了模型的非線性表達能力並減少了參數數量。
卷積層和全連接層在結構上有所不同,但功能上可以相互轉換。全連接層的每個單元與前一層的所有單元相連,而卷積層則只與前一層的局部區域相連並使用參數共享。然而,一個全連接層可以被視為一個特殊的卷積層,其濾波器尺寸與輸入尺寸相同,步長為 1。反之,卷積層也可以展開(Flatten)後連接到全連接層。這種轉換的優點在於,將全連接層轉換為卷積層後,可以處理任意尺寸的輸入圖像,並通過滑動視窗的方式在更大的圖像上高效地進行推斷,這對於需要處理不同尺寸圖像或在圖像中定位特定對象的任務特別有用。 訓練 CNN 時,初始化卷積層的權重是一個重要的步驟。除了最常用的隨機初始化(使用梯度下降進行端到端訓練)外,還有一些其他策略,例如:
- 隨機特徵: 將濾波器權重隨機初始化,並在訓練過程中保持固定。這些固定濾波器用於提取特徵,只有網路後續部分的權重進行訓練。這種方法的優點是訓練成本和複雜性降低,但性能可能受限,且固定特徵提取器可能無法適應特定任務。
- 無監督特徵: 首先使用無監督學習算法在大量未標註數據上學習濾波器權重,然後將這些權重固定,只訓練網路後續部分的權重。這種方法可以利用未標註數據並學習通用特徵,尤其在標註數據稀缺時有用。然而,性能可能受限,且無監督學習本身也具挑戰性。 這些策略旨在利用不同的數據源和學習範式來初始化和訓練模型,以期在特定情況下達到更好的效果或更低的計算成本。
卷積神經網路核心概念與技術
好的,這份詳細的簡報文件將整合您提供的兩份來源,回顧其中主要的主題、最重要的概念和事實,並包含適當的原文引用。
簡報文件:卷積神經網路 (Convolutional Networks, CNNs) 概覽 日期: 2023年10月26日 來源:
- Excerpts from “No. 06 @ Chapter 9 @ Convolutional Networks @ Deep Learning 101” (來源一)
- Excerpts from “PDF9.md” (來源二) 核心概念: 卷積神經網路 (CNN) 是一種特別適用於處理網格狀資料(如圖像、音訊波形、文字序列)的深度學習模型。它主要由卷積層 (Convolutional Layer)、激活函數 (Activation Function,通常使用 ReLU)、池化層 (Pooling Layer) 和全連接層 (Fully Connected Layer, FC Layer) 組成。CNN 的核心優勢在於其對圖像等資料結構的特定假設和操作,使其在圖像識別等任務上表現出色。
主要主題與重點:
- CNN 的適用性與基本結構:
- 來源一強調 CNN 非常適合處理圖像資料,因為圖像可以被視為 3D 的體積 (volume),包含長、寬和深度 (depths,例如 RGB 通道)。
- CNN 的基本結構包含:輸入層 (Input)、卷積層 (Convolutional layer)、激活函數 (Activation function,如 ReLU)、池化層 (Pooling layer) 和全連接層 (Fully connected network)。
- 最終的全連接層通常用於執行任務,例如圖像分類,輸出各類別的機率。
- 卷積 (Convolution) 操作:
- 來源一從兩種角度解釋卷積:
- 物理角度(通訊領域類比): 將訊號 (x) 透過通道 (w) 傳輸,接收到的訊號是原始訊號及其延遲版本的疊加(加權和)。這類似於訊號在不同路徑傳輸後產生的延遲和衰減效應。
- 數學角度: 將輸入 (X) 與一個稱為「濾波器」(filter 或 kernel) 的函數 (w) 進行卷積。數學上,這可以理解為將濾波器翻轉 (flip) 後再進行滑動 (shift) 和 pointwise 相乘然後相加。
- 來源一也提到了 交叉相關 (Cross-correlation) ,其數學表達式與卷積類似,但不包含濾波器的翻轉步驟。在機器學習領域,通常這兩種操作都被稱為卷積,除非特別強調翻轉的步驟。
- 「基本上 convolution 的 Operation 就主要是這樣子。」 (來源一)
- 2D 卷積的操作類似於 1D 卷積,只是在兩個空間維度上進行。
- 來源一從兩種角度解釋卷積:
- 卷積層的關鍵特性 (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 是步幅。並提到輸出的尺寸必須是整數。
- 來源一詳細闡述了卷積層的幾個重要特性和超參數:
- 池化 (Pooling) 操作:
- 池化層主要用於執行「降採樣」(downsampling) 的操作。
- 「Pooling layer… 主要的目的其實就做 downsampling。」 (來源一)
- 池化操作只會減小空間尺寸(長和寬),不會改變深度。
- 最常用的池化方法是 最大池化 (Max Pooling) ,即在一個小的區域內取最大值作為該區域的輸出。
- 池化具有一定的「平移不變性」(invariance) 和「轉換不變性」(invariance to transformation),即對輸入的微小變化(如平移或小的旋轉)不太敏感。
- 「這個 Pooling 它這個特性就是它其實是可以就是它有一個 invariance 的特性… 它其實會對 local 的 translation 其實是會 invariant。」 (來源一)
- 「另外一種就是 invariance 是說,它可以去對 transformation 做 invariant。」 (來源一)
- CNN 的架構設計考量:
- 來源一指出,在設計 CNN 架構時,通常偏好使用較小的濾波器尺寸 (如 3x3) 和較多層的卷積層,而不是較大的濾波器和較少的層。
- 這樣做的好處包括:
- 增加模型的非線性 (non-linearity),因為每一層都經過激活函數。
- 學習更豐富和具有表達力的特徵 (more expressive features)。
- 減少總體的參數數量。
- 越深的卷積層能夠學習到越抽象和高級的特徵 (high-level features)。
- 「convolutional layer 越來越深的時候,它其實學的東西是可以從一開始的簡單慢慢學到就是比較 high level 的。」 (來源一)
- 「越到後面的 layer,它看到的圖其實局部,它看到的東西其實越來越廣,所以它可以越到後面它學得 layer 就是 Level 就 high Level 的 feature。」 (來源一)
- 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 的時候,它其實可以更有效率。」 (來源一)
- CNN 的訓練與反向傳播 (Backpropagation):
- 來源一提到 CNN 中的反向傳播操作也是一種卷積。具體來說,在計算權重梯度時,需要對前一層的輸入和後一層的誤差信號進行卷積。在計算誤差信號時,需要對下一層的誤差信號和濾波器的翻轉版本進行卷積。
- 「在做 backpropagation 的時候,他其實也是一個 convolution。」 (來源一)
- 「Backpropagation 它其實也是一個 convolution,那它的 convolution 只是說它的 filter 是 flip 過來。」 (來源一)
- 由於權重共享,在反向傳播時,同一濾波器在不同位置計算出的梯度會被累加起來,然後用於更新該濾波器的權重。
- 池化層的反向傳播相對簡單,通常只將誤差信號傳遞給在正向傳播時貢獻最大值的那個位置 (Max Pooling)。
- 來源一提到 CNN 中的反向傳播操作也是一種卷積。具體來說,在計算權重梯度時,需要對前一層的輸入和後一層的誤差信號進行卷積。在計算誤差信號時,需要對下一層的誤差信號和濾波器的翻轉版本進行卷積。
- CNN 的效能優化:
- 來源一簡要提到了提高 CNN 訓練效率的方法,包括:
- 利用傅立葉變換 (Fourier Transform),在頻域中卷積變成簡單的 pointwise 相乘。
- 利用可分離濾波器 (Separable Filter),將高維卷積分解為低維卷積。
- 來源一簡要提到了提高 CNN 訓練效率的方法,包括:
- CNN 濾波器的初始化策略 (Filter Initialization):
- 來源一和來源二都提到了 CNN 濾波器的初始化。
- 來源二詳細列出了兩種初始化策略:
- 隨機特徵 (Random Features): 濾波器的權重隨機初始化並固定不變。只有網路的後續部分(如全連接層)進行訓練。
- 無監督特徵 (Unsupervised Features): 首先使用無監督學習方法在大量未標註數據上學習濾波器,然後將這些濾波器固定,只訓練網路的後續部分。
- 來源一也提到了初始化權重的幾種方式,包括隨機產生 (randomly generate) 和手動設計 (design by hand)。手動設計的濾波器可能針對某些特定的低級特徵(如邊緣)。
- 潛在優點: 來源二指出這兩種策略可以減少訓練成本和複雜性(因為參數少),無監督特徵還可以利用未標註數據。
- 潛在缺點: 來源二指出性能可能受限,因為固定的濾波器可能不如端到端訓練的濾波器有效,且無法適應特定任務的細微差別。
- 實際應用與技巧:
- 來源一提到 AlexNet 的例子,說明了實際 CNN 架構中的層堆疊方式以及 FC 層到 CNN 的轉換。
- 來源一後半部分分享了訓練 CNN 的一些實際經驗和挑戰,包括:
- 硬體需求:GPU 對於 CNN 訓練非常重要,不同型號的 GPU 效能差距很大。
- 軟體框架的挑戰:安裝和配置深度學習框架(如 TensorFlow、Caffe)及其依賴(如 CUDA、cuDNN)可能遇到許多「地雷」,特別是在不同版本和硬體配置之間。
- 數據的重要性:大量數據對於訓練高性能的深度學習模型至關重要。
- 遷移學習 (Transfer Learning):使用預訓練模型(在大型數據集上訓練好的模型)並在自己的數據上進行微調,可以在數據量不大的情況下獲得不錯的效果。
- 架構的演進:討論了 Inception (如 InceptionV3) 等更先進的 CNN 架構設計,這些架構可能同時使用不同尺寸的濾波器並將它們的輸出合併。
總結: 綜合兩份來源,CNN 是一種強大的神經網路架構,通過局部連接和權重共享實現了參數的高效利用,並通過卷積和池化操作層層提取圖像特徵。其核心機制和設計考量對理解其在計算機視覺領域的成功至關重要。雖然端到端的監督學習訓練是最常見和有效的方法,但在特定情況下,使用隨機或無監督學習得到的固定濾波器也可以作為一種替代策略。然而,實際應用中,模型的效能、硬體軟體配置以及數據量等因素都需要仔細考慮。
卷積神經網路發展與技術要點
好的,以下是根據您提供的來源整理的詳細時間線和角色列表: 詳細時間線:
- 未知時間點 (傳統影像處理時期): 存在兩種操作都被稱為 Convolution (卷積),一種是真正的 convolution (包含翻轉 (fliip)),另一種是 cross-correlation (不包含翻轉)。在機器學習領域,這兩種通常都被稱為 convolution,除非特別提到翻轉才會區分。
- 未知時間點 (傳統神經網路時期): 全連接神經網路 (Fully Connected Network, FC) 是一種常見的神經網路架構,其中每個單元都與下一層的所有單元連接。
- 未知時間點 (Convolutional Network 發展初期): 卷積神經網路 (Convolutional Network, CN) 開始發展,其核心特性是局部連接 (local connectivity) 和參數共享 (parameter sharing)。這使得 CN 在處理圖像等具有空間結構的數據時更為有效。
- 局部連接: 卷積核只與輸入圖像的一個小區域 (receptive field) 進行交互。
- 參數共享: 同一層深度的所有位置使用相同的卷積核 (filter)。
- 未知時間點 (Convolutional Network 應用與架構): 典型的 CN 架構包括輸入層、多個卷積層、激活函數 (例如 ReLU)、池化層 (pooling layer) 以及最後的全連接層用於分類或其他任務。
- 卷積層: 進行卷積操作,提取局部特徵。
- 激活函數: 引入非線性。
- 池化層: 進行降採樣 (downsampling),減少參數數量並增加模型的平移不變性 (invariance)。最常用的池化方法是 Max Pooling。
- 全連接層: 對提取的特徵進行最終處理,例如分類。
- 未知時間點 (Convolutional Network 訓練): 使用梯度下降 (gradient descent) 和反向傳播 (backpropagation) 算法進行訓練。反向傳播在卷積層中也可以表示為一種卷積操作,但濾波器是翻轉的。
- 未知時間點 (Convolutional Network 優化技術): 為了提高訓練效率,發展了一些優化技術,例如使用快速傅立葉轉換 (FFT) 進行卷積,以及利用可分離濾波器 (separable filters)。
- 未知時間點 (Convolutional Network 初始化策略): 討論了幾種卷積核初始化策略:
- 隨機初始化 (Random Feature): 隨機生成濾波器權重並固定,僅訓練後續層。優點是訓練成本降低,缺點是性能可能受限,特徵表示次優。
- 無監督預訓練 (Unsupervised Feature): 在未標註數據上學習濾波器,然後固定,再用標註數據訓練後續層。優點是利用未標註數據,簡化模型設計,缺點是性能可能受限,無監督學習本身具挑戰。
- 有監督學習 (Supervised Learning): 透過監督學習從頭開始訓練所有層的權重。通常能達到最佳性能,但需要大量標註數據和計算資源。
- 未知時間點 (Convolutional Network 架構演進): 發展了使用較小濾波器尺寸和更多卷積層的架構,以提高模型的非線性表達能力和減少參數數量。例如,討論了使用三個 3x3 卷積層可以達到類似一個 7x7 卷積層的感受野 (receptive field),但參數更少。
- 未知時間點 (Convolutional Network 和全連接層的轉換): 發現可以在 CN 和 FC 層之間進行相互轉換。
- CN 轉 FC: 透過將 CN 的輸出展平為向量,並將卷積核轉換為稀疏權重矩陣。
- FC 轉 CN: 透過將 FC 層轉換為卷積層,其中卷積核的尺寸與輸入尺寸相同,步長 (stride) 為 1,沒有 Zero Padding。例如,AlexNet 的最後三層 FC 層可以轉換為卷積層。
- 未知時間點 (針對特殊位置的 CNN 應用): 將 FC 層轉換為 CN 後,可以處理變大的輸入圖像,並在圖像中不同位置生成分類分數,這對於對圖像中特定區域進行定位或分類非常有用。
- 未知時間點 (訓練工具和挑戰): 討論了訓練 CN 的工具和遇到的挑戰:
- TensorFlow (TF): 一個常用的深度學習框架。
- Caffe: 另一個深度學習框架。
- Digits: NVIDIA 提供的一個用於簡化深度學習開發的工具。
- 硬體挑戰: GPU 性能對訓練速度的影響很大,討論了不同 GPU (例如 GTX 960, 980, 1080, 1080 Ti) 的性能差異。
- 軟體挑戰: 遇到框架版本不相容、驅動問題 (例如 NVIDIA 驅動與 Ubuntu 的相容性問題)、CUDA 和 cuDNN 版本搭配問題等雷點。
- 數據挑戰: 缺乏足夠的標註數據會嚴重影響模型性能。
角色列表:
- 卷積核 (Filter / Kernel): CN 中的基本組成部分,用於對輸入圖像進行卷積操作,提取特徵。
- 激活函數 (Activation Function): 在神經元中引入非線性,使得神經網路可以學習更複雜的函數。來源中提到了 ReLU。
- 池化層 (Pooling Layer): 對卷積層的輸出進行降採樣,減少參數和計算量,並增加模型的平移不變性。來源中提到了 Max Pooling 和 Average Pooling。
- 全連接層 (Fully Connected Layer / FC): 傳統的神經網路層,每個輸入單元都與每個輸出單元連接。在 CN 中通常用於最後的分類或回歸任務。
- Input / Input Image: 輸入到 CN 中的數據,通常是圖像。
- Output / Output Volume: 卷積層或池化層的輸出,是一個三維體積 (volume),包含長度、寬度和深度 (depth)。
- 深度 (Depth): CN 輸出體積的第三個維度,通常表示不同濾波器提取的特徵數量。
- Zero Padding (零填充): 在輸入圖像周圍添加零,以控制輸出尺寸並確保邊緣像素也能被充分處理。
- Stride (步長): 卷積核在輸入圖像上滑動的步長。
- Receptive Field (感受野): 輸入圖像中一個卷積核或一個神經元所能「看到」的區域。
- Parameter Sharing (參數共享): 同一層深度的所有位置使用相同的卷積核權重,減少了參數數量。
- Local Connectivity (局部連接) / Sparse Interaction (稀疏互動): 卷積核只與輸入圖像的一個小區域連接。
- Cross-correlation (互相關): 一種類似卷積的操作,但不包含翻轉濾波器。在機器學習中常被稱為 convolution。
- AlexNet: 一個經典的卷積神經網路架構,來源中提到了其 FC 層可以轉換為 CN 的形式。
- InceptionV3: 一種 Inception 架構的神經網路,來源中提到了其設計中的多尺寸濾波器並行處理。
- VGG: 一種卷積神經網路架構,以使用多個 3x3 卷積層而聞名。
- TensorFlow (TF): 一個開源的深度學習框架。
- Caffe: 另一個開源的深度學習框架。
- Digits: NVIDIA 開發的一個深度學習開發工具。
- NVIDIA: GPU 硬體製造商,其 GPU 在深度學習訓練中常用。
- CUDA: NVIDIA 開發的平行計算平台和編程模型,用於 GPU 加速計算。
- cuDNN: NVIDIA 開發的用於深度神經網路的 GPU 加速函式庫。
- Ubuntu: 一個常用的 Linux 作業系統,在深度學習開發中常見。
- SGD (Stochastic Gradient Descent): 一種常用的最佳化算法,用於訓練神經網路。
- AdaGrad: 一種自適應學習率最佳化算法。
- TensorBoard: TensorFlow 自帶的一個可視化工具,用於查看訓練過程中的指標和模型結構。
- TFRecord: TensorFlow 中用於存儲訓練數據的一種格式。
- GeForce Experience (GFE): NVIDIA 提供的一個軟體,用於管理驅動和優化遊戲設置,可能與驅動問題有關。