ML Lecture - Convolutional Neural Network

tags: Hung-yi Lee ML Lecture

ML Lecture - Convolutional Neural Network

How Neural Network classify image?

在原先的DNN中,每個neuron就是在做不同的特徵分類,每層要進行的分類工作會越來越複雜(同Modularization)。

而在做影像分類時,每個neuron只需觀察圖像中的一小部分是否含有某特徵即可,不須看完整張圖。

因為每個張圖含有某特徵的位置都不同,所以辨識同一特徵的neuron可共享同樣的參數。

而我們可利用Subsampling將圖片縮小,如此也可減少參數計算量。

  • Subsampling:二次抽樣,如只取圖片的基數行、偶數列,如此可將圖片縮小。

How CNN work?

整個CNN就分成Convolution、Max Pooling 及 Flatten這三步驟。

在使用CNN進行分類前,需注意:

  • 圖片中每個圖案(特徵)是很小的
  • 每個圖案會出現在不同圖的不同區域
  • Subsampling不會改變原圖

CNN-Convolution

每一個Convolution都會有很多個Filter,每一個Filter都是一個Matrix,代表一張image裡的某一區塊是否含有此一特徵。而Filter裡面的值就是神經網路中的學習參數。

Filter透過stride(步伐)大小逐步在圖片中移動,並與覆蓋的位置做內積。
全部遊走一遍後可得一特徵圖(feature map),即代表圖中的哪個部分含有該Filter的特徵。

Convolution就是將Fully Connected將部份weight拿掉而已:

  • 將圖片展開
  • Filter與對應位置做內積運算
    • 如3就是 Filter1 和第1、2、3、7、8、9、13、14、15位置內積

      因為Convolution只需連接Filter所對應的位置(如圖例就是9個位置),故參數計算相對Fully Connected少。

CNN-Max Pooling

類似Subsampling,將feature map分群,並在每群中取最大值,得一較小的圖片(Matrix)。

CNN-Flatten

將Matrix展開,變一維。如此即可輸入給Fully Connected Network做最後分類。

What does CNN learn?

為了分析CNN到底學到了甚麼,我們挑一個Filter,並定義其啟動函式來判定輸入(input)與這Filter有多相近。

想了解filter的作用,我們找一張image(X),它可以讓這個filter被啟動的程度最大。利用梯度上升(gradient ascent)來最大化啟動函數。

而後面的fully connected也可以以同樣的方式可視化。

將輸出層做可視化,發現結果與預期大不相同,但分類的結果卻是準確的(將8的照片做為輸入,模型確實預測為8)。代表CNN辨別圖片的方式與人不同。

我們在找一個$x$讓 $y^i$ 最大化,相對的要讓x的元素加總最小,意思是我們希望找一個image大部份是白的,沒有塗上筆劃(黑),以這個概念重新可視化之後整體的呈現就不同了。

Deep Dream

放大CNN所看的東西,將其視覺化並與原圖融合。
即取某層layer的Filter或fully connected的權重,將正項放大、負向縮小(正者越正,負者越負)。

Deep Style

  1. 將image輸入CNN得到一輸出表該image的內容。
  2. 將風格照輸入CNN得到一輸出表該image的風格。
  3. 隨機初始化一張照片,讓內容像左邊照片,風格像右邊照片。

More Application:Text

將輸入句的每個字轉成字向量並組成一序列矩陣,利用CNN得到該序列矩陣的feature map,並取Pooling即可將該句子分類。