--- tags: cs231 --- # Lecture 5: Convolutional Neural Networks ## NN的歷史 ### 1943 MP 模型 神經生理學家沃倫·麥克洛克(Warren McCulloch)和數學家沃爾特·皮茨(Walter Pitts)建立MP(McCulloch-Pitts)模型。 醫學知識告訴他,大腦中的每一個神經元細胞,只有當外部刺激超過最小閾值時,才被激發,否則就處於靜默狀態。 <center> ![](https://i.imgur.com/fMfYpFx.png) </center> 神經元激活與否(水管流出與否)取決於某一閾值電平(水位高度),即只有當其輸入總和超過閾值$\theta_j$時,神經元才被激活而發放脈衝,否則神經元不會發生輸出信號。 公式: $$ y_j=f(\sum_{i=1}^nw_{ij}x_{i}-\theta_j) \\ $$ 其中激活函數 $f$ 為: $$ \begin{align*} y_{j} = \left\{ \begin{matrix} & 1 &\text{for} &\sum_{i=1}^nw_{ij}x_{i}\geq\theta_j \\ & 0 &\text{for} &\sum_{i=1}^nw_{ij}x_{i}<\theta_j \end{matrix} \right. \end{align*} $$ 功能對照 ![](https://i.imgur.com/8BgV5XX.png) ### 1958 感知器 Perceptron MP模型類似於電路開關,沒有學習的方式。 Rosenblatt提出感知器(Perceptron),將神經元帶入了人工智慧的領域。 ![](https://i.imgur.com/jutkcKB.png) ### 1960-1986 MLP(Multiple Layer Perceptron) - Perceptron 無法學習線性不可分的例子。 - 1960年,開始就有人提出MLP的概念,但礙於無法實現所以沉寂了一段時間。 - 1986年,Hinton 等人提出「反向傳播算法」(Backpropagation) 訓練神經網路, 使得MLP的可能露出一絲曙光。讓神經網路紅極一時。 - 發現MLP有梯度消失的問題後又沒落了下去,甚至當時學界只要看到出現「神經網路」字眼的論文或研究計畫,便會立刻貶斥。 ### 1992-1998 SVM(Support Vector Machine) - 1992年,一部分的學者轉向研究SVM,因為SVM有更好的數學性質,例如Convex等特性。 - 1998年,提出了SMO演算法,至此業界也開始使用SVM。 ### 2006 Hinton - 【Reducing the Dimensionality of Data with Neural Networks】 文主要講述通過神經網絡對數據進行降維優於傳統的PCA。 神經網絡中不能隨機初始化參數,而是利用RBM(Restricted Boltzmann machine)有一個預訓練的過程,將訓練出來的參數作為神經網絡的初始化參數。 - 【A Fast Learning Algorithm for Deep Belief Nets】 DBN(Deep Belief Nets)是一種生成模型,通過訓練其神經元間的權重,我們可以讓整個神經網路按照最大概率來生成訓練資料。 :::info <center>將神經網路稱為『深度學習』後回到幕前</center> ::: ## CNN的歷史 ### 1962 Receptive Fields 透過對貓咪^ↀᴥↀ^的視覺皮層研究,提出了感受野(Receptive Fields)的概念。 ![](https://i.imgur.com/rBhlLRs.png) ### 1979 CNN第一次問世 Kunihiko Fukushima 基於感受野提出了神經感知機([Neocognitron](https://www.rctn.org/bruno/public/papers/Fukushima1980.pdf)),是卷積神經網路的第一個實現。 ![](https://i.imgur.com/Fe1VlCu.png) ### 1989 LeNet LeCun 將 BP(Backpropagation)與 Neocognitron 結合使用。 :::info <center>CNN 開始走向各個領域中。</center> ::: ## 卷積 卷積能夠保存輸入的**空間結構** 基本定義 $$ (f*g)(t) = \int_{\infty}^{\infty} f(\tau) g(t-\tau) d\tau $$ $x = \tau \\ y=t-\tau \\ x+y=t$ <center> ![](https://i.imgur.com/Anxp0u7.gif) </center> ### 卷積與互相關的比較 <center> ![](https://i.imgur.com/QOtr0XC.png =500x) </center> ## 卷積的運算 ![](https://i.imgur.com/1GzXoXf.gif) ## Filter(Kernel) 目的:保留圖像的空間訊息且提取局部的特徵 每個不同的filter都在抓取不同的特徵(權重共享)。 ### Filter只能是正方形的嗎? Text-CNN 所使用的就是長方形的 filter ![](https://i.imgur.com/8L8yvyI.png =600x) ### Filter大小怎麼決定? 看你是想提取小局部特徵還是較大局部特徵。 :::info <center>在相同效果之下,使用小但深的filter可降低參數量</center> ::: ### Filter的大小目前看到都是奇數? 1. 為了達到利用padding去維持Feature Map與原圖大小相同 $W_{2}=(W_{1}-F+2P)/S+1$ 令 $W_{2}=W_{1}$ 且 $S=1$ 則 $P=(F-1)/2$ ==> $F$ 需為奇數 2. 有中心點,對邊界更加敏感。 3. 避免訊息偏移(?。 ### 為什麼filter的數量通常是偶數? 因為計算方便,計算機計算$2^n$比較快(攻殺小 >>Linear algebra libraries tend to work optimally with powers of two. >>They are also a nice “round” number for computer scientists. ## Stride 卷積運算時移動的幅度,stride是個可調參數。 - 通常會設置為$1$ or $2$。 - 太小的話計算效率低落。 - 太大可能造成訊息遺漏。 - 但大小還是要綜合filter去選擇。 - 若大於1可視為下採樣(downsampling)。 ![](https://i.imgur.com/O21Ynd4.gif) ### stride數值愈小、使用zero padding會得出較大的activation map,這對模型在訓練上有什麼影響? (e.g., 訓練時間、overfitting…)? 計算效率低落,但還是需要綜合filter size去看der。 ## Pooling - pooling為二次採樣(subsampling),也就是進一步的特徵篩選(對Receptive Fields) - 若迅速的將圖片變小,可能會損失掉過多的訊息 - 目的是為了保持某種不變性(旋轉、平移、伸縮等)。 - 無法通過學習去決定。 ### 各pooling的優缺點 - Maxpooling - 優點:再區域內選出最能代表邊緣的值。 - 缺點:可能丟失一些重要訊息。 - Average Pooling - 優點:減小誤差,保存圖片的背景訊息。 - 缺點:稀釋特徵的程度。 | 池化類型 | 示意圖 |<center>作用</center> | |:------------------------------------:|:------------------------------:|------------| | 一般池化(General Pooling) | ![max_pooling](https://i.imgur.com/OG34AeS.png) | 通常包括最大池化(Max Pooling)和平均池化(Mean Pooling)。<br>以最大池化為例,池化範圍$(2\times2)$和滑窗步長$(stride=2)$ 相同,僅提取一次相同區域的範化特徵。 | | 重叠池化(Overlapping Pooling)) | ![overlap_pooling](https://i.imgur.com/gOOza7a.png) | 與一般池化操作相同,但是池化範圍$P_{size}$與滑窗步長$stride$關係為$P_{size}>stride$同一區域內的像素特徵可以參與多次滑窗提取,得到的特徵表達能力更強,但計算量更大。| | 空間金字塔池化(Spatial Pyramid Pooling)| ![spatial_pooling](https://i.imgur.com/oznwIPI.png) |在進行多尺度目標的訓練時,卷積層允許輸入的圖像特徵尺度是可變的,緊接的池化層若採用一般的池化方法會使得不同的輸入特徵輸出相應變化尺度的特徵,而卷積神經網絡中最後的全連接層則無法對可變尺度進行運算,因此需要對不同尺度的輸出特徵採樣到相同輸出尺度。| ### 可以先做池化層再做卷積嗎?(一定要先卷積再池化嗎) 以操作上來說,當然可以,但你了解池化層的用意之後,還會想這麼做嗎? ### 如果一個 CNN 沒有 pooling layer 會怎麼樣呢? - pooling layer的目的是為了減少參數,如果參數過多的話,就會需要更多的樣本數,才能有好的估計。所以如果有其他方法可以減少參數個數的話,也是可行的,例如增加stride的步伐或增大filter的大小。 - 過於執著局部的特徵,忽略了全局,對**整體**的訊息較少。 - 複雜度高,速度慢。 ## Padding 1. 維持輸入圖片的大小 2. 維持邊緣的訊息 3. 避免快速地縮小feature map的大小 ![](https://i.imgur.com/YczAEPc.gif) ## Filter v.s Pooling | | 卷積層 | 池化層 | | :--------: | :------------------------------------: | :------------------------------: | | **結構** | 零填充時輸出維度不變,而通道數改變 | 通常特徵維度會降低,通道數不變 | | **穩定性** | 輸入特徵發生細微改變時,輸出結果會改變| 感受域內的細微變化不影響輸出結果 | | **作用** | 感受域內提取局部關聯特徵 | 感受域內提取泛化特徵,降低維度 | | **參數量** | 與卷積核尺寸、卷積核個數相關 | 不引入額外參數 | ## 問題 ### 為什麼中間都有一個RELU層?加這一層的用意是? 這不是跟我們上一章學的一樣ㄇ=.,= - 引入非線性 - 解決梯度消失(AlexNet引領風潮) ![](https://i.imgur.com/W6CvjDP.png) #### 使用Relu函數去掉負值,更能淬煉出物體的形狀 一個為負數的神經元有機會會一直影響到後面神經元的值變小(變黑) ![](https://i.imgur.com/epBaeQq.png =340x) ![](https://i.imgur.com/fJ4zLmZ.png =340x) ### 可以大概說明一下其他照片怎麼複製星夜的風格嗎? ![](https://i.imgur.com/zPlH5la.png) 1. 初始化一個輸入圖片大小的噪聲圖像$x$ 2. 同時將三張圖片$(a, p, x)$輸入進三個相同的網絡 3. 然後保持CNN參數不變 4. 對$a$求出風格特徵,對$p$求出內容特徵,然後對$x$求導,$x$就會在內容上越來越趨近於$p$,得到的$x$就有$a$的風格和$p$的內容。 ## 原始問題 | 組別 | <center> 問題 </center>| |:-----------------------------:| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 第一組 | 1. stride數值愈小、使用zero padding會得出較大的activation map,這對模型在訓練上有什麼影響? (e.g., 訓練時間、overfitting...)<br>2.Filter大小怎麼決定<br>3. pooling layer 的意思就很像 feature selection 嗎?<br>4. 如果一個 CNN 沒有 pooling layer 為怎麼樣呢? <br>5. 為什麼 K 通常是power of 2?![](https://i.imgur.com/assvcuc.jpg) | 第二組 | 1. AlexNet、VGG、ResNet皆為CNN模型,其差異以及目前皆使用ResNet?<br>2. zero padding除了維持一樣的size,是否還有其他原因決定使用zero padding?<br>3. filter的大小目前看到都是奇數(3.5.7),有特別的意涵嗎? | | 第三組 | 1.可以先做池化層再做卷積嗎?(一定要先卷積再池化嗎)<br>2.為摸中間都有一個RELU層?加這一層的用意是?![](https://i.imgur.com/vSTdYim.jpg)<br>3.可大概說明一下其他照片怎麼複製星夜的風格嗎?![](https://i.imgur.com/llENBP5.png)<br>4.filter該如何訂?它實際上的意義是什麼?為什麼要有多filter?<br>5.stride的用途是什麼?數字越大代表?<br>6.Pooling layer除了max還有什麼其他方法,用途為何? | | 第四組|<center>報告組</center>|