[논문 리뷰] Densely Connected Convolutional Networks (DenseNet)
기존 CNN 기반 네트워크는 다음과 같은 식으로 구성됩니다:

이 식에서 xl은 ll번째 레이어의 출력을, Hl은 l번째 레이어와 번째 레이어 사이의 non-liear transformation 함수를 나타냅니다. 따라서 이 식은 L−1번째 레이어의 출력을 H에 매핑하여 l번째 레이어의 출력을 얻는 것을 의미합니다.
기존 CNN이 가지는 문제점은 네트워크가 깊어짐에 따라 Vanishing gradient 문제가 크게 발생하는 것입니다.
이를 해결하고자 ResNet, Highway Networks, FractalNet 등 여러 모델이 제안되었습니다.
기존 ResNet 네트워크
기존 ResNet은 다음과 같은 식으로 구성됩니다. l번째 layer output을 얻기 위해 L-1 번째 layer의 output에 non-linear transformation 함수를 매핑한 뒤, L-1 번째 layer의 output을 더해주는 것을 확인할 수 있습니다. 이와 같이 ResNet은 non-linear transformation 함수를 매핑하지 않는 skip-connection을 활용합니다.
ResNet이 가진 문제점은 skip-connection에 의해 입력과 출력이 더해지기 때문에 네트워크가 깊어질수록 skip-connection에 의해 전달되는 정보의 양이 증가하는 것입니다. 이는 특정 레이어에서 발생한 정보가 네트워크의 맨 끝으로 전달되기까지 여러 번의 덧셈 연산을 거치게 되어, 네트워크 메모리의 요구량이 증가하거나, 계산 병목을 유발하거나 정보의 흐름이 희석될 수 있다는 것을 의미합니다.
DenseNet의 이점
앞선 문제들을 해결하기 위해 논문에서 제안하는 DenseNet이 가지는 이점은 다음과 같습니다.
- Vanishing Gradient 완화
- Feature Propagation 강화
- Feature 재사용 가능
- 파라미터 수 감소
DenseNet Architecture
DenseNet의 구조를 살펴보면, l번째 레이어의 출력을 얻기 위해 이전까지의 레이어에서 생성된 feature map의 연결에 non-linear transformation 함수를 매핑하고 있습니다.
이는 모든 레이어가 이후의 레이어에 직접적으로 연결되는 것을 나타냅니다.
모든 레이어가 이후에 나오는 레이어들에 전부 연결되는 것을 확인할 수 있습니다.
· Composite Function
DenseNet의 구성 요소 중 하나는 Composite Function입니다. 이는 Batch Normalization, ReLU, 3x3 Convolution의 세 가지 연속적인 작업으로 구성된 non-liear transformation 함수입니다.
· Dense Block
DenseNet의 구조는 레이어 간의 직접 연결이기에 feature map의 크기가 변경되었을 때 적용되지 않습니다. 하지만 CNN에서는 여러 가지 이유로 Down Sampling이 필수적으로 요구되기에 DenseNet에서는 네트워크를 여러 개의 Dense Block으로 쪼갭니다. 이 Dense Block 사이에서는 직접 연결이 일어나지 않습니다. 아래 빨간색 화살표로 표시된 dense block 사이의 layer를 transition layer라고 부릅니다.
· Growth Rate
Growth Rate는 각각의 Hl이 생성하는 feature map 개수를 결정하는 하이퍼파라미터입니다. Growth rate가 k이고 input layer의 채널 수가 k0일 때, 첫 번째 layer는 k0개, 두 번째 layer는 k0 + 1개, l 번째 layer는 k0 + k x (l - 1)개의 feature map을 입력받습니다.
Growth rate가 작은 경우, 이전까지 생성했던 모든 feature map이 다음 layer에 입력되기 쉬우므로 네트워크의 전체적인 정보를 활용할 수 있습니다.
· Bottleneck Layers
DenseNet에서는 3x3 Convolution Layer 이전에 1x1 Convolution Layer를 지나게 하는 Bottleneck 기법을 통해 입력 채널 수를 줄여 연산량을 줄입니다.
· Compression
Bottleneck Layer와 마찬가지로 모델의 Compactness를 위해 Transition Layer에서 전달되는 feature map의 개수를 줄일 수 있습니다. Dense Block에서 개의 feature map이 추출되었을 때, Transition Layer를 지나면서, feature map의 개수를 floor(θm)개로 줄일 수 있습니다. 여기서 θ는 0과 1 사이의 값을 가집니다.
Implementation
다음 표는 Dense Block을 포함하여 DenseNet의 전체 구조를 나타낸 것입니다. 네트워크를 Dense Block으로 쪼갠 목적은 Pooling 연산이 필요한 곳에 Pooling Layer, Transition Layer1, Transition Layer2, Transition Layer3, Classification Layer가 존재하게 하기 위함입니다.
· CIFAR & SVHN Classification Result
아래 표는 CIFAR-10, CIFAR-100, SVHN에서 기존 모델들과 다양한 깊이와 Growth Rate의 DenseNet의 Error Rate 비교 결과입니다. +가 붙은 것은 augmentation된 데이터셋임을 의미합니다. 또한 아래쪽에 DenseNet-BC로 나타난 것을 확인할 수 있는데, Bottleneck Layer를 사용하고 Transition Layer의 θ<1\theta < 1일 때, DenseNet-BC라고 부릅니다.
주목할 만한 점:
- 깊이 100, Growth Rate kk가 24인 DenseNet-BC가 CIFAR-10과 CIFAR-100에서 기존 어떤 모델보다 월등한 성능을 보임
- 깊이 190, Growth Rate kk가 40인 DenseNet-BC가 CIFAR-10+와 CIFAR-100+에서 기존 가장 좋은 성능을 보인 Wide ResNet에 비해 월등히 좋은 성능을 보이며 파라미터 수가 더 적음
- 깊이 100, Growth Rate kk가 24인 DenseNet이 SVHN에서 기존 가장 좋은 성능을 보인 Dropout이 있는 Wide ResNet보다 좋은 성능을 보임
· ImageNet Classification Result
아래 그래프는 데이터 전처리 및 최적화 설정과 같은 요소들을 제거하고 ImageNet validation set에서 DenseNet-BC와 ResNet의 변형들을 비교한 결과입니다. DenseNet-201과 ResNet-101을 비교했을 때, validation error는 거의 비슷하지만, 파라미터 수와 Flop 수는 거의 두 배 가량 차이 나는 것을 확인할 수 있습니다.
Conclusion
DenseNet은 깊고 밀집된 연결 구조를 통해 뛰어난 성과를 보였습니다. 기존 CNN 구조를 개선하고, 정보의 손실을 방지하는 효과적인 방법을 제시하였습니다. 특히, DenseNet은 다양한 깊이와 폭의 네트워크에서 이전보다 높은 정확도를 달성하였습니다. 개인적으로 DenseNet의 가장 큰 기여는 네트워크의 깊이가 증가할 때 발생하는 문제를 효과적으로 해결하여, 더 깊고 복잡한 모델의 개발을 가능하게 했다는 점이라고 생각합니다.