Pin-Jiun / Machine-Learing-NTU

0 stars 0 forks source link

5.1-Convolutional Neural Network (CNN) #37

Open Pin-Jiun opened 1 year ago

Pin-Jiun commented 1 year ago

卷積神經網路 Convolutional Neural Networks, CNN

Image Classification

image

首先先把所有的圖形RESIZE成相同的SIZE 一張彩色圖片可以理解成一個3維的Tensor

如何挑選input? 最直覺的方式是把這個三維Tensor拉直

image

image

全部放進去, 雖然增加模型的彈性, 但也容易造成overfitting且耗費時間training 根據影像的特性以及研究, 我們事實上不需要使用fully connected

影像的特性以及研究減少模型的彈性

觀察一 不需要把整張圖片當成輸入

image

Neural可以把它視為每個pattern的辨別, 看到至些pattern決定是否是鳥 上述的方法和人非常地像, 我們只抓取重要的特徵去判斷此圖片是屬於是什麼 要看這些pattern 不需要把整張圖片當成輸入

Receptive field

假設這個Neural只關心Receptive field 內的範圍, 將此範圍拿出來後拉直 將這27個input乘上weight後+上bias得到第一層的output

每個Neural會有自己定義的Receptive field

image 每個Neural

通常的Receptive field 設定 image

  1. 會使用全通道(RGB)

  2. 使用正方形定義Receptive field, 這個正方形的大小稱為Kernel size 這個Kernel size通常不會設太大, 通常大概使用3x3 Q.但是有些pattern不會只有3x3的大小啊?

一個Receptive field會有很多的Neural去守備它(64, 128..)

  1. Stride表示Kernel size的移動範圍, 通常設定1或2 這樣可以使Receptive field有重疊避免沒抓取到

  2. 如果超過影像範圍會使用padding進行補值

觀察二 相同的pattern可能出現在圖像的不同區域

image

但如果每個Receptive field都有一個Neural去守備這樣就會變成fully connected 所以可以使用parameter sharing

image

兩個Neural有可能擁有共同的weight(和bias)

雖然參數相同, 但是因為輸入不同, 兩個輸出會不一樣 所以如果輸入一樣輸出就有可能一樣->Two neurons with the same receptive field would not share parameters.

常見的共享方式

image

每個 receptive field都有64個Neural去守備 每個 receptive field對於每個Neural有相同的參數

每個Neural共用的一組參數稱之為Filter


上述兩者關乘後的簡化整理 image

Convolutional Layer = 有使用Receptive Field和Parameter Sharing的層 有使用多層Convolutional Layer的Model架構稱之為 CNN

CNN雖然Model bias較大, 但是較不會有overfitting的問題 CNN經過研究, 對影像是一個很好的處理方式(如果影像之外要小心使用)

Pin-Jiun commented 1 year ago

觀察三 將採樣點縮小並不會影響object

image

所以有了Pooling的方法 例如Max Pooling 就是在自己設定的範圍內選取最大的值

image

所以通常來說會convolution會接上Pooling

image

但是Pooling對於細部的pixel還是有影響 所以對於精細的圖片而言還是會把它拿掉, 例如alpha go

image

除了圍棋, 對於CNN還有許多的應用 image