2019年8月5日 星期一

ML 學習筆記(Convolutional Neural Network)

CNN是影像辨識中最常用的方法,其實NN也可以做影像的辨識,那我們為甚麼要用CNN呢?
因為我們用一般的NN來做影像辨識時,使用太多的參數。




假設input的圖片是100 X 100那輸入的參數總共是3 X 100 X 100,太多參數了,那我們的想法是可不可以用一個方法,把一些不會用到的參數是先剔除掉

為甚麼我們可以把一些參數拿掉?以下列出三種特性:

1.有些特徵只占整張圖的一小部分,不需要輸入整張圖->參數減少

2.有些相同的特徵出現在不同地方,不需要多個detecter去偵測->參數共享,參數減少

3.影像縮小對人來說不影響對影像的理解->參數減少

以下是整個CNN的架構



1跟2特性由Convolution處理,3特性由Max Pooling處理



在這裡我們會準備好幾個filter來做convolution,每個filter都是要偵測一種特徵(1特性)

作法:把filter從image的左上到右下,這裡設位移量(stride)為1,每個做內積,在這裡是1x(-1)+1x(-1)+11=-1


那內積出來的值有什麼意思,假設filter1要偵測1的斜線,那內積出來的3代表這是斜線的機率越大,左上跟左下的3代表都是斜線(特性2)



做convolution時有多個filter,多個filter所做出來的image稱作為feature map

若是彩色的image要怎麼做呢?filter就不是一個matrix,是一個高度為3的立方體


convolution 可以視為fully connected的變形



透過filter的限制 和 share weights來達到less parameters


以上可以知道cnn怎麼train了,那接下來要了解cnn怎麼做的呢?
這張說明了每個filter都在偵測一小範圍的特徵,如果特徵越高,degree也越大


這張說明了每個neuron都在偵測一個圖案
那如果我們看到output呢,如果input是手寫辨識1到9,我們會預想output是很像1-9,但實際上不是。可以看這個youtube來了解為甚麼會這樣:
https://www.youtube.com/watch?v=M2IebCN9Ht4
那為甚麼可以辨識出手寫辨識呢,以下加一些contraint,可以看出結果很像我們所看到的手寫辨識

以下是一些好玩的應用




沒有留言:

張貼留言