Wednesday, April 08, 2020

AI 從頭學(二八):Network in Network

AI 從頭學(二八):Network in Network

2017/06/05

前言:
  
在 AlexNet 之後,用 1 x 1 convolution 來降維,是大型網路的趨勢之一。

-----

Summary:

本篇主要介紹 Network in Network (NIN) 中的 1 x 1 convolution [1]。這對於降低大型網路 feature maps 的維度、減少運算量,很有幫助 [2]-[4]。

[5]-[9] 則是關於 1 x 1 convolution 的中英文說明。

-----

Question

Q1: NIN
Q2: GoogLeNet
Q3: VGGNet
Q4: ResNet
Q5: Global Average Pooling

本文提出五個疑問,為 1 x 1 convolution 在 NIN [1]、GoogLeNet [2]、VGGNet [3]、ResNet [4] 的作用為何?以及由 1 x 1 convolution 延伸而來的 global average pooling。 

-----

Q1: NIN 

NIN 的概念是在傳統的 convolutional layers (圖1.1a)中間加上全連接層(圖1.1b)。這個結構稱為 mlpconv layer,好幾個 mlpconv 串起來,稱為 NIN,參考圖1.2。

圖1.1b不容易瞭解,可另外參考圖1.3a。

以圖1.3a來說明,原圖經過 convolution 之後產生 64 個 feature maps,每張的大小是 56 x 56,我們把這64張 feature maps 叫做 channels。假設某張圖上面某點是 xij,每個 channel 上都會有一個  xij (64個 channels 共有64個 xij),連到一個 (1 x 1 x)64 點的全連接層做線性組合,則會產生一個新的 feature map,大小一樣是56 x 56。

Filter 有32個,每個 filter 造一層新的 feature map,則新的 feature maps 大小為 56 x 56 x 32,不再是 56 x 56 x 64,維度就下降了。但作者原來使用 mlpconv layers 的目的是增加網路深度以提高網路的表現力,參考圖1.3b。

1 x 1 convolution 的概念後來被廣泛使用 [2]-[4],一些重要的網路都用它來降維,減少運算量,讓網路可以設計的更深更強大,參考圖1.4。 


Fig. 1.1. Comparison of linear convolution layer and mlpconv layer, p. 2 [1].



Fig. 1.2. The overall structure of Network In Network, p. 4 [1].



Fig. 1.3a. 1 x 1 convolution, p. 45 [8].



Fig. 1.3b. Increasing the depth and representational power, p. 2 [2].



Fig. 1.4. Revolution of depth, p. 78 [8].

-----

圖2.1是傳統的 convolution 加上 ReLU。這邊有個符號會引起混淆,T一般表示為轉置矩陣( Appendix A),不過這邊 xij 表示為 feature maps 上的一個點,wk 是第 k 張 feature maps 上的 convolutional kernel,所以這個公式代表在 xij 為中心的區域與 wk 這個 filter / kernel / matrix 做 bit-wise multiplication。



Fig. 2.1. Feature map, p. 2 [1].
 
-----

圖2.2a是本文的重點,也就是 1 x 1 convolution。

第一行沒問題,上面已經說過了,它是 xij 在不同 channel 上做線性組合產生的第一張新的 feature map。接下來則是把原來 feature maps 裡面第一張丟掉,補上這張新圖。如此反覆進行,直到第 n 張 新的 feature map 產生,參考圖2.2b與2.2c。

圖2.3請自行參考。



Fig. 2.2a. The calculation performed by mlpconv layer, p. 3 [1].



Fig. 2.2b. Cross channel parametric pooling (CCPP), p. 3 [1].




Fig. 2.2c. Multi layer perceptron (MLP), p. 1-2 [1].



Fig. 2.3. The feature maps of maxout layers, p. 4 [1].

-----

Q2: GoogLeNet

不同大小的 filter,可以對應不同的 scale,越到後面,5 x 5會用的越多。

Filter 越小,使用的個數要越多,參考圖3.1a。結果串接起來,再傳到下一層,參考圖3.1b。

什麼時候不需要用 convolution,只要用 max pooling?參考圖3.2,由於只抓到投影片,這裡暫時無法回答這個問題。

總之,這是個「天真」的模型,因為運算量太大,跑不動。

所以多了三個 1 x 1 convolution 來降維,參考圖3.3。

串的部分比較難以理解,網路上有同樣 size 的版本 [*],也有不同 size 的版本 [**], [***]。

但總之,先知道 1 x 1 convolution 如何降維就可以了。



Fig. 3.1a. A heterogeneous set of convolutions, p. 24 [9].



Fig. 3.1b. Filter concatenation, p. 3 [2].



Fig. 3.2. Inception module, na¨ıve version, p. 26 [9].



Fig. 3.3a. Inception module with dimensionality reduction, p. 27 [9].



Fig. 3.3b. Dimension reduction. 2 [2].

-----

Q3: VGGNet

VGGNet [3] 的模型C也用到 1 x 1 convolution,不過不是用來降維,而是 NIN 原本的意圖。

比較B跟C,可以知道多了 1 x 1 convolution,還是有幫助的,參考圖4.1與4.2。

但是比較C跟D,可以知道 1 x 1 不如 3 x 3,在這個例子。



Fig. 4.1. VGGNet, p. 3 [3].



Fig. 4.2. VGGNet, p. 6 [3].

-----

Q4: ResNet

在 ResNet [4] 中,1 x 1 不僅用來降維,也可以用來昇維,參考圖5.1。



Fig. 5.1a. A deeper residual function, p.6 [4], p. 84 [8].



Fig. 5.1b. Deeper bottleneck architectures, p. 6 [4].

-----

Q5: Global Average Pooling

在最後一層的 mlpconv layer,這些 feature maps 不再做 1 x 1 convolution,而是平均後丟到 softmax 的輸出層,參考圖6.1。這個架構也被 GoogLeNet 繼承,參考圖6.2。




Fig. 6.1a. The global average pooling layer, p. 4 [1].



Fig. 6.1b. Global average, p. 4 [1].



Fig. 6.1c. Visualization of the feature maps from the last mlpconv layer, p. 9 [1].



Fig. 6.2. Global average pooling in GoogLeNet, p. 5 [2].

-----

結論:

截至寫作此時,NIN 被引用次數是705,而 GoogLeNet 被引用次數是 3298。

提出 1 x 1 convolution 固然好,拿它來降維才真是厲害吧!

-----

Appendix A.



Fig. 7.1. Transpose of matrix A, p. 33 [10].



Fig. 7.2. Convolution represented as a sparse matrix C, p. 19 [11]

-----

References

[1] 2014_Network in network

[2] 2015_Going deeper with convolutions

[3] 2015_Very deep convolutional networks for large-scale image recognition

[4] 2016_Deep residual learning for image recognition

[5] One by One [ 1 x 1 ] Convolution - counter-intuitively useful – Aaditya Prakash (Adi) – Random musings of a deep learning grad student
http://iamaaditya.github.io/2016/03/one-by-one-convolution/

[6] CNN网络中的 1 x 1 卷积是什么? - zhangjunhit的博客 - 博客频道 - CSDN.NET
http://blog.csdn.net/zhangjunhit/article/details/55101559

[7] 卷积神经网络中用1 1 卷积有什么作用或者好处呢? - 知乎
https://www.zhihu.com/question/56024942

[8] winter1516_lecture.pdf
http://cs231n.stanford.edu/slides/winter1516_lecture7.pdf

[9] Convnets.pdf
http://www.cs.toronto.edu/~guerzhoy/411/lec/W06/convnets.pdf

[10] 2016_Deep Learning

[11] 2016_A guide to convolution arithmetic for deep learning

-----

No comments: