卷積神經網絡 + 機器視覺: L5_卷積層_Pooling Mechanism (斯坦福CS231n)

完整的視頻課堂鏈接如下:

完整的視頻課堂投影片連接:

前一課堂筆記連結:

 

1. 準確率 Accuracy,2. 查全率 Recall,3. 查準率 Precision

這是個一般機器學習的時候很常用到的計算方法與概念,這邊做一個補充。

  預測爲正確 預測爲錯誤
實際爲正確 TP(True positives) FP(False positive)
實際爲錯誤 FN(False negative) TN(True negative)

1. 準確率:被預測的結果是正確的比例佔總體的預測結果有多少比重。 Proportion of correct classifications (true positives and negatives) from overall number of cases. The formula goes like this:

 

        Accuracy = (TP + TN) / (TP + TN + FP + FN)

 

2. 查全率:預測結果爲 positive 的情況下,真的是 positive 的比率是多少。Proportion of correct positive classifications (true positives) from cases that actually positive. The formula goes like this:

        Recall = TP / (TP + FN)

3. 查準率:真的是 positive 的情況下,多少比率是真的被預測出來是對的的比率。Proportion of correct positive classifications (true positives) from cases that are predicted as positive. The formula goes like this:

        Precision = TP / (TP + FP)

一般來說,我們無法既查全又查準,因爲這兩個參數天生就是對頭,我們在設計模型的時候只能夠根據當下面臨的問題找到一個均衡點。

以下是這系列介紹的補充資料鏈接

 o  https://baike.baidu.com/item/%E6%9F%A5%E5%85%A8%E7%8E%87%E4%B8%8E%E6%9F%A5%E5%87%86%E7%8E%87/424630?fr=aladdin

 

Neural Network 的歷史

1957s,第一個感知器被做出來,有了初步的權重輸出(F(x) = Wx) 的概念,但是當時並沒有反向傳播的概念
1960s,第一次把這些線性關係的層,拼起來變成多層的網狀結構
1986s,反向傳播的理論被 Rumelhart 所提出,並且 chain rule 的方程式也因此被應用在模型裏面
2006s,深度學習框架被提及,但是它還需要非常小心的初始化過程,不然就會產生梯度爆炸或是消失的結果
2012s,第一次有效的分類結果被做出來,運用深度學習框架的 Imagenet 分類器得到了很好的效果

 

Convolutional Layer 卷積層
它其實是一種方法的叫法,裏面含有很多機制,最爲重要的一點就是我們使用一個小的 “filter matrix” 去對一整片像素點原始數據按照一定規律的空間間隔做卷積 (convolve the filter with the image) ,得出來的 ”值“ 再被重新蒐集到一個新的矩陣裏面,filter matrix 移動的步距一般稱爲 stride。

有幾個特徵需要特別注意:

  • filter matrix 的 “厚度” 肯定都跟數據集一致。
  • filter matrix 的長寬與對應的 stride 步距需要完整吻合數據集的長寬,簡單的說就是不能夠有任何一步沒走完。
  • 雖然在解釋 CNN 的時候,是用很形象的方式把 filter matrix 放在一張像素點組成的圖片上面掃描,但是實際運算的時候,還是也把 matrix 拉直了,纔去跟也一併拉直後的原圖片做卷積運算。

filter matrix 可以被認爲是一種 “Weight” 的特徵,每次我們要做矩陣之間 dot 運算的時候,都要把所有的像素點拉直成一行矩陣,這樣才能夠形象上好理解成一個 network。

一般來說,filter matrix 不會只有一個,而是很多個這樣的矩陣經過卷積算法產生出對應的特徵圖,如下圖示例:

這張圖用的就是 6 個 filter matrix 去解析出特徵 map,並且可以進一步把這六個新的 filter 疊在一起作爲下一次用來被解析的數據集,被套上新的 filter matrix 然後不斷地傳遞下去。

但是我們會發現只要 filter matrix 大於單位 pixel,那麼隨着神經網絡的多層傳遞過程,卷積出來的總結矩陣也就越來越小,長遠來看的話,這個過程是失真的,判斷經過 Convolution 計算出來的結果的大小可以用這個公式:
    假設原圖大小爲 N * N 矩陣像素點,filter matrix 大小爲 F * F 矩陣,步距爲 stride
    output matrix 大小就是:[(N - F) / stride] + 1

但是我們不可能用信息量本身就小的東西去涵蓋一個信息量較大的東西,爲此,zero padding 這個方法就被運用到了實際情況。根據上面的計算公式,我們可以依照掃描的 stride 步長與 filter matrix 大小,判斷一共有多少圈 0 元素需要被加在原始數據點周圍,達到掃描前是 n 維矩陣,掃描後也是 n 維矩陣。所以加上 zero padding 後的公式:
    假設 P 爲 padding 的 “圈數”,其他的參數繼續沿用上面的假設
    output matrix 大小就是:[(N + 2*P -F) / stride] + 1

不過有一點需要注意的 tricky 的地方,我們在計算 filter matrix 一共有幾個 parameters 的時候,記得前面介紹為了方便運算,我們會把 Weight 被拉長後的矩陣後面補一個 1 的元素。因此,每一個矩陣 長 * 寬 * 高 得出來的數量都需要 +1 纔是總攻的元素個數。

CNN 的方法可以讓我們更爲有效的提取圖片的 “局部特徵”,進而提高圖像處理與識別上相較於傳統的方法更高的準確性

Generally, the sequence of the methods go like this:

  • ( CONV >>> ReLU >>> CONV >>> ReLU >>> Pooling ) * n times, normally it's twice times.

 

Pooling Layer
它是一個用某種數學的規律機制有意的讓數據 “失真“ 的方法,原本的矩陣元素假設 100*100 的大小,經過了 Pooling Layer 的手段後,矩陣就會被縮小成假設 60*60 的大小。但是注意這個方法只能夠用來縮減矩陣的 長*寬,而本來多少層(高度)的矩陣不論經過多少次這個步驟,都還是隻能維持原樣。

max pooling 是我們一般常用的數學手段之一,如下圖:

然而,max pooling 也只是其中一種方式去把矩陣做壓縮,當然我們也可以做平均或是其他的數學運算去篩選,對於這些方法而言,並沒有一個所謂 “better way” 一說,都是根據不同情況,看哪種算法最後得出來的結果好,誰就是比較優秀的。

那另一個問題就是,該怎麼判斷什麼時候是已經縮減到足夠的大小了呢?這隻能夠根據個人經驗而論啦。

 

下節鏈接:卷積神經網絡 + 機器視覺: L6_初始化_激勵函數_BN_梯度下降 (斯坦福課堂)

發佈了43 篇原創文章 · 獲贊 33 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章