模型輸入影像大小固定,如果不是正方形或過大,則做 rescaleing (調整圖片的長寬以符合模型輸入的形狀) 模型的輸出在經過 softmax 後,希望與結果的 one-hot vector 有最小的 cross entropy ## 影像 *Tensor* : 超過二維的 matrix *Channel* : 顏色的多寡,如 RGB 則為 3,黑白則為 1 影像會被視為是一個三維的 Tensor ,分別為:寬、高、Channel,network 輸入為向量,所以影像會被拉伸為一維向量 network 通常不使用 fully connected network ,因容易增加模型的彈性及容易產生 overfitting ,可以通過觀察影像辨識的特性來減少參數的數量 ## 觀察及簡化: Receptive field 有些 pattern 不是整張圖片,而是一些範圍較小的區域,如鳥嘴、鳥爪等等 也就是說,可以讓一個神經元關心一小部分的區域就行 ### Receptive field 決定一小部分的寬高以及 channel ,即是一個 Receptive field ![image](https://hackmd.io/_uploads/SJ0xjYPqC.png) #### 如何得出 **自己決定** - 不同 Receptive field 可以重疊 - 可以存在不同大小 Receptive field - 可以只考慮單個 channel - 可以不是正方形 ### Typical Setting *kernel size* : 通常考慮全部 channel ,延伸出名詞 kernel size 代表**寬乘高** > 通常使用 3 x 3 就足夠了,設為 5 x 5 或 7 x 7 都過大 > 會太小嗎? [解答](#3-x-3-會不會太小) *stride* : Receptive field 的移動距離,通常會設 1 或 2 ,讓 Receptive field 有重複的範圍 *padding* : 當 Receptive field 超出影像範圍,通常會在溢出的地方補零 通常會有一組 (64 個) 神經元去觀測一個 Receptive field ## 觀察及簡化: Parameter Sharing 同樣的 pattern 可能出現在不同地方,那我們用同一個神經元(這個神經元可能是判定鳥嘴的神經元)去判斷不同的 Receptive field 會不會比較好 ![image](https://hackmd.io/_uploads/H1qQaKv90.png) ### Parameter Sharing 神經元的參數權重都是一樣的,但輸出不會是一樣的,因為輸入不一定是一樣的,而且還有 bias 與 Activation function ![image](https://hackmd.io/_uploads/SkYx0tP50.png) #### 如何得出 **自己決定** ### Typical Setting *filter* : 參數權重一樣的神經元 Receptive field 的神經元通常是同一組一樣的 ![image](https://hackmd.io/_uploads/SknH0YPq0.png) # 標題回收 *Receptive field* : pattern 不會是整張圖片,更大機率是小範圍的影像 *parameter sharing* : 判斷 pattern 需要同一組參數 Receptive field + parameter sharing = Convolutional Layer ![image](https://hackmd.io/_uploads/SJbOk9vqA.png) 雖然 bias 大,但在影像辨識上沒差,而因為增加以上兩種特性, CNN 大部分是使用在影像辨識上 ## 另一種介紹方法 (based on filter) Convolution 就是一堆的 Filter ,而這些 Filter 去影像內抓 pattern 出來 Filter 內的值會用 梯度下降 找出來 ![image](https://hackmd.io/_uploads/Hk_Nlqw5A.png) *Feature map* : 影像通過 Convolution (也就是一堆 Filter 對 Receptive field 做內積)後得出的新的「影像」 新「影像」的 chaneel 數是 filter 的數目,也就是說 filter 有 64 個的情況,原始影像經過一次 Convolution 後, channel 數會是 64 ![image](https://hackmd.io/_uploads/S1sClqwcR.png) ### 3 x 3 會不會太小 **不會**,因為 feature map 也會再做 convolution ,這樣第一次後的 filter 可以看到不同範圍的原始影像的區域 ![image](https://hackmd.io/_uploads/BylHWcD50.png) ## 觀察及簡化: Pooling 將大圖縮小後, pattern 感覺還是同一個類別 ![image](https://hackmd.io/_uploads/H1YhZqv90.png) ### Pooling 在範圍內選擇數值作為代表,可以是最大值、最小值、幾何平均或算數平均等等 ![image](https://hackmd.io/_uploads/S1X7zqv5R.png) pooling 通常會縮小「影像」,原先目的是減少計算量,但對於需要判斷較細微的 pattern 時, performance 就沒那麼好 ![image](https://hackmd.io/_uploads/By4wM5DcC.png) # The whole CNN Convolution 與 Pooling 可以交錯,也可以多次 Convolution 後再一次 Pooling,也可以不用 Pooling (alpha go) ![image](https://hackmd.io/_uploads/HJGAfcD9C.png) # 其他應用 ## Alpha GO 19 寬 19 高 48 channels 叫吃等等其他規則 ### 為什麼可以在 go 上使用 CNN? 檢查特點 - Receptive field 需要判斷的範圍是否小於整張圖片 **是,Alpha GO 使用 5 x 5 的範圍** - parameter sharing 判斷的結構是否會在其他地方出現 **是** ![image](https://hackmd.io/_uploads/S1s-E5PqR.png) - 適合 pooling 嗎? **不適合,拔除一部分的棋盤可能不能代表整個棋局,所以 Alpha GO 沒有使用 Pooling** ## 語音及文字 可能有用其他的特性與方法,不能直接用影像處理的 CNN 去套用 # 缺點 CNN 無法處理圖片縮放或旋轉的情境,所以需要做 Data Augmentation (資料增強) 除此之外, Spatial Transformer Layer 可以達成這些目標