之前我們提到,神經網絡是通過全連接層對輸入做降維處理,將輸入的向量通過矩陣和激活函數進行降維,在神經元上輸出激活值。而卷積神經網絡中,用卷積層代替了全連接層。
不同的是,這里的輸入不再需要降維,而是可以保留輸入的空間結構,例如輸入的是32×32×3的圖片,在全連接層中是3072×1的向量,而卷積層里則保持不變。這里的改變的地方是對于同樣的WX的函數形式,這里是把5×5×3的權重矩陣(也叫卷積核)向量化了,從而做的是向量點積運算(可以看到權重矩陣的寫法與圖片的數據量寫法類似,這是為了更好地理解為什么選擇這個數量,可以把輸入和權重矩陣看成是放縮的一個過程,權重矩陣由于空間結構類似,相當于是保留了圖片原有的一部分性質,在數學角度上是因為向量的點積與兩個向量的夾角有關,夾角越小,向量越相似,這也與卷積層的初衷相符,是為了盡可能地保留輸入的信息不缺失)。
而在卷積層中,卷積核會遍歷輸入的每一個數據量(假如卷積網絡的層數只有一層,邊緣的數據點相比其他區域,只會被遍歷一次,一般會用pading或增加權重的方式來使其不那么特殊),每次滑動都輸出一個點積,輸出的數據大小一般是輸入減去卷積核除以步長再加1(之所以要加1,是因為單純的減法會漏掉矩陣的第一列或最后一列,而步長的選擇我們一般會選擇除得盡的,不然會導致有部分邊緣數據被忽略,當然硬要計算也可以,習慣上是對結果向下取整)。
在例子中,一個卷積核的激活衍射是28×28×1,假如我們有六個卷積核,輸出的就是28×28×6。這里的每一層激活衍射,對應的就是我們平時所提到的提取出來的每一個特征,不同的卷積核會提取出不同的特征,且我們可以在這些激活衍射之后再設置一些函數來卷化,生成一些不一樣的特征供模型學習(本質上還是卷積核在學習,然后輸出值給模型應用)。一般來說。越往后排的衍射值,對應的是更高級的特征。比如假如輸入的是一張小狗的照片,那么一開始的可能是顏色的特征,中間的是小狗身上的斑點,后面的是小狗的神態。
學習來自斯坦福教程:Stanford University CS231n: Deep Learning for Computer Vision