논문

하루에도 수만개의 글자를 읽고 있습니다. 하루에도 수백장의 종이를 들춰 읽습니다.
이것은 그 읽기에 대한 일기입니다.

MobileNetV2: Inverted Residuals and Linear Bottlenecks

1. Introduction

이 논문은 Linear bottleneck을 갖는 inverted residual 모듈을 제안하였습니다. 이 모듈은 낮은 치원의 압축된 표현을 입력으로 받아 높은 차원으로 먼저 확장한 뒤, depthwise convolution 필터를 통과시킨 뒤, linear convolution을 통해 다시 낮은 차원 표현으로 프로젝션하는 과정을 거칩니다.

이 모듈은 기존의 어떤 프레임워크에도 적용될 수 있으며, 메모리 접근을 줄여 임베디드 하드웨어 사용에 적합합니다.

2. Related Work

3. Preliminaries, discussion and intuition

3.1. Depthwise Separable Convolutions

기존 사용되던 depthwise separable convolution 블럭은 매우 효과적이므로 현재에도 많이 쓰이고 있습니다. 기본 아이디어는 원래의 컨볼루션 연산을 2개의 separable 컨볼루션 레이어로 분해하는 것입니다. 첫번째 레이어는 depthwise convolution이라 부르며, 각 채널마다 하나의 컨볼루션 필터를 적용하여 필터링합니다. 두번째 레이어는 첫번째 레이어의 결과에 1x1 convolution을 적용하는 레이어로 pointwise 컨볼루션이라 부릅니다. 이것은 입력된 첫번째 레이어의 결과를 linear combination하여 새로운 특징을 만들어내는 작업을 담당합니다.

기존의 컨볼루션이 $h_i \times w_i \times d_i$으 입력에서 $d \times d$의 커널로 $h_i \times w_i \times d_j$의 출력을 만들어낸다고 할 경우, 계산 비용은 $h_i \cdot w_i \cdot d_i \cdot d_j \cdot k \cdot k$이지만, 이 방법을 사용하면 $h_i \cdot w_i \cdot d_i (k^2 + d_j)$의 비용만 들게 되므로 3x3의 커널을 사용한다고 가정하면 이론적으로는 8, 9배 빠른 계산을 할 수 있게 됩니다.

3.2. Linear Bottlenecks

데이터가 입력되었을 때, 특정 레이어의 활성 값은 "manifold of interest"를 구성합니다. 이 manifold of interest는 어떤 매니폴드 위에 존재하는 입력 데이터가 레이어를 통과하면서 그 실제 매니폴드의 low-dimensional subspace에 임베딩된다고 알려져왔습니다.

얼핏 생각하면 단순히 레이어의 차원을 줄임으로써 이를 달성할 수 있을 것 같고, 실제로 MobileNetV1에서 이런 방식으로 구현에 성공하였습니다. MobileNetV1의 width multiplier를 이용하여 실제 공간 전체로 확장할 수 있도록 활성 함수의 manifold of interest의 차원을 줄이도록 하였습니다. 하지만 딥 컨볼루셔널 뉴럴 네트워크의 ReLU와 같은 것들이 실제로 위치 변환에 대해서도 빈선형인 점을 감안하면, 이런 성질은 들어맞지 않게 됩니다.

ReLU가 채널에 적용될 때 필연적으로 채널의 정보를 잃어버리게 됩니다. 하지만, 많은 채널을 가지고 있다면 어떤 채널에서 없어진 정보들이 다른 채널에는 살아있는 구조를 띄게 됩니다. 따라서 입력 매니폴드가 활성값 매니폴드의 lower-dimensional subspace로 충분하게 임베딩 된다면, ReLU 변환을 적용하더라도 정보가 유지된다는 것을 알 수 있습니다.

  1. 만약 manifold of interest가 ReLU가 적용된 이후 non-zero volume을 가지면 그것들은 linear transformation이다.
  2. 입력 manifold가 입력 space의 low-dimensional subspace위에 있다면, ReLU 또한 입력 manifold 위에서의 모든 정보를 보존할 수 잇다.

이 두가지 성질로부터 힌트를 얻었습니다. 만약 manifold of interest가 low-dimensional이라면, convoltion block에 linear bottleneck 레이어를 넣어 이를 알아채게 할 수 있고, 실험 결과 많은 정보의 손실에서 비선형성을 유지하기 위해서는 linear 레이어가 필수적이었습니다.

3.3. Inverted residuals

그리고 bottleneck 사이에 shortcuts을 사용하였습니다. 기존의 residual connection에서 영감을 받았는데, 여러 레이어들 사이에서도 그래디언트가 잘 전파되도록 하기 위함입니다. 그럼에도 이 디자인은 메모리 사용에 효율적입니다.

Running time and parameter count for bottleneck convolution 이론적으로 expansion factor가 $t$라고 할 경우, 계산량은 $h \cdot w \cdot d_i \cdot t(d_i + k^2 + d_j)$입니다.

3.4. Information flow interpretation

이 구조의 재미있는 점은 입력 도메인과 출력 도메인, 그리고 그 사이의 변환(transformation)이 bottleneck 레이어를 기준으로 자연스럽게 분리된다는 점입니다. 변환은 물론 비선형 변환을 뜻합니다. 입력/출력 도메인은 각 레이어의 capcity를 의미한다고 볼 수 있고, 변환 부분은 expressiveness를 의미한다고 해석할 수도 있습니다. 이것은 기존의 컨볼루셔널 블럭이 capacity와 expressiveness가 서로 합쳐져 있는 것으로 보는 것에 비해 대조적인 부분입니다.

4. Model Architecture

MobileNetV2의 구조는 처음에 32개 필터의 fully convolution 레이어를 지난 뒤, 19개의 residual bottleneck 레이러를 통과하도록 하였습니다. ReLU6를 사용하여 low-precision 계산을 사용했을 때 더 강하도록 하였으며, 모든 커널은 3x3 크기를 사용하였습니다. 또한 dropout, batch normalization을 적용하였습니다.

Expansion rate는 5에서 10 사이의 수를 사용한 것이 이상적인 성능을 내었습니다. 실험에서는 입력 채널의 6을 사용하였습니다.

5. Implementation Noets

6. Experiments

7. Conclusions and future works

 


Add a Comment Trackback