解析:
一般而言,深度卷積網絡是一層又一層的。
層的本質是特征圖, 存貯輸入數據或其中間表示值。一組卷積核則是聯系前后兩層的網絡參數表達體, 訓練的目標就是每個卷積核的權重參數組。描述網絡模型中某層的厚度,通常用名詞通道channel數或者特征圖feature map數。
不過人們更習慣把作為數據輸入的前層的厚度稱之為通道數(比如RGB三色圖層稱為輸入通道數為3),把作為卷積輸出的后層的厚度稱之為特征圖數。 卷積核(filter)一般是3D多層的,除了面積參數, 比如3x3之外, 還有厚度參數H(2D的視為厚度1). 還有一個屬性是卷積核的個數N。
卷積核的厚度H, 一般等於前層厚度M(輸入通道數或feature map數). 特殊情況M > H。 卷積核的個數N, 一般等於后層厚度(后層feature maps數,因為相等所以也用N表示)。 卷積核通常從屬於后層,為后層提供了各種查看前層特征的視角,這個視角是自動形成的。
卷積核厚度等於1時為2D卷積,對應平面點相乘然后把結果加起來,相當於點積運算; 卷積核厚度大於1時為3D卷積,每片分別平面點求卷積,然后把每片結果加起來,作為3D卷積結果;1x1卷積屬於3D卷積的一個特例,有厚度無面積, 直接把每片單個點乘以權重再相加。
歸納之,卷積的意思就是把一個區域,不管是一維線段,二維方陣,還是三維長方塊,全部按照卷積核的維度形狀,對應逐點相乘再求和,濃縮成一個標量值也就是降到零維度,作為下一層的一個feature map的一個點的值!
可以比喻一群漁夫坐一個漁船撒網打魚,魚塘是多層水域,每層魚兒不同。
船每次移位一個stride到一個地方,每個漁夫撒一網,得到收獲,然后換一個距離stride再撒,如此重復直到遍歷魚塘。 A漁夫盯着魚的品種,遍歷魚塘后該漁夫描繪了魚塘的魚品種分布; B漁夫盯着魚的重量,遍歷魚塘后該漁夫描繪了魚塘的魚重量分布;
還有N-2個漁夫,各自興趣各干各的; 最后得到N個特征圖,描述了魚塘的一切!
2D卷積表示漁夫的網就是帶一圈浮標的漁網,只打上面一層水體的魚; 3D卷積表示漁夫的網是多層嵌套的漁網,上中下層水體的魚兒都跑不掉; 1x1卷積可以視為每次移位stride,甩鈎釣魚代替了撒網;
下面解釋一下特殊情況的 M > H:實際上,除了輸入數據的通道數比較少之外,中間層的feature map數很多,這樣中間層算卷積會累死計算機(魚塘太深,每層魚都打,需要的魚網太重了)。
所以很多深度卷積網絡把全部通道/特征圖划分一下,每個卷積核只看其中一部分(漁夫A的漁網只打撈深水段,漁夫B的漁網只打撈淺水段)。這樣整個深度網絡架構是橫向開始分道揚鑣了,到最后才又融合。
這樣看來,很多網絡模型的架構不完全是突發奇想,而是是被參數計算量逼得。特別是現在需要在移動設備上進行AI應用計算(也叫推斷), 模型參數規模必須更小, 所以出現很多減少握手規模的卷積形式, 現在主流網絡架構大都如此。