MobileNet V2: 핵심 개념 정리
등장 배경: MobileNet V1은 가벼웠지만, 채널을 너무 많이 줄이다 보니 정보가 손실되는 문제가 있었습니다. V2는 이를 해결하기 위해 구조를 뒤집었습니다.
1. Inverted Residual Structure (역전된 잔차 구조)
기존의 ResNet과는 정반대의 구조를 가집니다.
A. 기존 ResNet (Bottleneck)

- 구조:
Wide -> Narrow -> Wide (모래시계 모양)
- 과정:
- 채널을 줄여서(Compression) 연산량을 낮춥니다.
- Convolution 수행.
- 다시 채널을 늘립니다(Expansion).
- 문제: 모바일 환경에서는 이미 채널이 적은데, 여기서 더 줄이면 정보가 너무 많이 사라집니다.
B. MobileNet V2 (Inverted Residual)

- 구조:
Narrow -> Wide -> Narrow (배불뚝이/방추형 모양)
- 과정:
- Expansion: 먼저 채널을 뻥튀기(보통 6배)해서 늘립니다. (1x1 Conv)
- Depthwise Conv: 넓어진 공간에서 여유롭게 특징을 추출합니다. (3x3 Depthwise)
- Projection: 다시 채널을 줄여서 필요한 정보만 압축합니다. (1x1 Conv)
- 비유: 좁은 방에서 작업하기 힘드니까, "넓은 작업실로 물건을 꺼내서(Expand) 작업을 마치고, 다시 압축해서(Project) 저장"하는 방식입니다.
2. Linear Bottlenecks (선형 병목)
마지막 단계에서 ReLU(활성화 함수)를 제거한 것입니다.
차이점은 ReLU대신 ReLU6를 사용하는 점 입니다.
ReLU는 입력값이 양수일 때 입력된 값을 그대로 반환하지만, ReLU6는 6보다 큰 값을 6으로 고정하여 반환합니다. 그래프로 나타내면 아래와 같습니다.

A. 문제점 (ReLU의 정보 파괴)
- ReLU는 0보다 작은 값을 가차 없이 0으로 만듭니다. (f(x)=max(0,x))
- 채널이 많을 때는 괜찮지만, 채널이 적은 곳(Bottleneck)에서 ReLU를 쓰면 정보가 0이 되어 영영 사라지는 현상이 심각해집니다.
B. 해결책 (Linear Activation)
- 채널을 다시 줄이는(Projection) 마지막 단계에서는 ReLU를 쓰지 않고 선형(Linear) 그대로 둡니다.
- 목적: 압축된 정보(Manifold)를 손실 없이 다음 레이어로 전달하기 위함입니다.
3. MBConv Block (전체 블록 구조)
MobileNet V2의 기본 단위인 Bottleneck Residual Block의 순서입니다.
- 1x1 Conv (Expansion): 채널 확장 + ReLU6
- (입력 채널 수 x 확장 비율 t 만큼 뻥튀기)
- 3x3 Depthwise Conv: 특징 추출 + ReLU6
- 1x1 Conv (Projection): 채널 축소 + Linear (No ReLU!)
- Residual Connection (Add): 입력과 출력을 더함