CNN的Channel變化以及與MixConv架構的討論、台灣人工智慧學校工程師日常、機器學習百日馬拉松
CNN與NN的淵源
卷積神經網路(CNN, Convolution Neural Network)是一種特殊形式的神經網路(NN, Neural Network)架構。神經網路是由許多感知機( Perceptron)一層層堆疊而成,每個感知機都是一條簡單的函數,如下所示:
而由神經元堆疊而成的神經網路也是一個函數,只是較為複雜。
CNN則是在神經網路中,使用到了Convolution Layer(卷積層)這種架構。Convolution Layer由Kernel構成,當神經元把輸出的tensor傳遞給Convolution Layer時,Kernel會進行如下運算:
Tensor(張量),可以理解成矩陣。跟向量有相同的概念,但向量一般只有 2維,tensor則是不論維度。
簡單的描述計算過程:
- 把輸入的tensor其中的每一個pixel,與Kernel中對應位置的每一個pixel相乘
- 加總其乘積。
而Convolution Layer中Kernel的數量,就是Convolution Layer輸出tensor時,tensor的channel的值。
Ex: 如果我們有3個Kernel,他們分別會輸出一個2維的tensor,總共有3張,所以會有3個channel。
把他們加總起來(像漢堡一樣疊起來),所以輸出的tensor的channel(漢堡的厚度)就是3。
Flatten的作用
像我們剛才得到的輸出,其實是一個3維的tensor,channel的部分為3,所以下一層的神經元都會有3個資料的輸入源,但這3個輸入源其實都是2維的矩陣。
注意:其實 channel就是有幾個 kernel就對了。
那麼當我們有3個kernel的輸出tensor時,就相當於有3個2維的tensor(矩陣)被輸出,如上所示。
但是2維的tensor是沒辦法被神經元接收的,所以我們必須把2維的tensor拉平,拉成長~~~長的一條直線,變成一維的矩陣(就是一個數列)。
而做這件事的函數,就是Flatten。
當我們使用Convolution Layer時,最後就必須加上Flatten處理。