權值共享基本上有兩種方法:
- 在同一特征圖和不同通道特征圖都使用共享權值,這樣的卷積參數是最少的,例如上一層為30*30*40,當使用3*3*120的卷積核進行卷積時,卷積參數為:3*3*120個.(卷積跟mlp有區別也有聯系一個神經元是平面排列,一個是線性排列)
- 第二種只在同一特征圖上使用共享權值,根據上面的例子,則卷積參數為:3*3*40*120.
1×1的卷積大概有兩個方面的作用吧:
1. 實現跨通道的交互和信息整合
2. 進行卷積核通道數的降維和升維
以GoogLeNet的3a模塊為例,輸入的feature map是28×28×192,3a模塊中1×1卷積通道為64,3×3卷積通道為128,5×5卷積通道為32,如果是左圖結構,那么卷積核參數為1×1×192×64+3×3×192×128+5×5×192×32,而右圖對3×3和5×5卷積層前分別加入了通道數為96和16的1×1卷積層,這樣卷積核參數就變成了1×1×192×64+(1×1×192×96+3×3×96×128)+(1×1×192×16+5×5×16×32),參數大約減少到原來的三分之一。同時在並行pooling層后面加入1×1卷積層后也可以降低輸出的feature map數量,左圖pooling后feature map是不變的,再加卷積層得到的feature map,會使輸出的feature map擴大到416,如果每個模塊都這樣,網絡的輸出會越來越大。而右圖在pooling后面加了通道為32的1×1卷積,使得輸出的feature map數降到了256。GoogLeNet利用1×1的卷積降維后,得到了更為緊湊的網絡結構,雖然總共有22層,但是參數數量卻只是8層的AlexNet的十二分之一。
比如輸入是28x28x192(WxDxK,K代表通道數),然后在3x3的卷積核,卷積通道數為128,那么卷積的參數有3x3x192x128,其中前兩個對應的每個卷積里面的參數,后兩個對應的卷積總的個數(一般理解為,卷積核的權值共享只在每個單獨通道上有效,至於通道與通道間的對應的卷積核是獨立不共享的,所以這里是192x128)。