CNN의 여러 혁신들 2
이 글은 A Survey of Convolutional Neural Networks: Analysis, Applications, and Prospects 해당 논문에서 Classic CNN Models 부분을 보고 작성되었습니다.
저번 글에 이어 CNN의 여러 혁신들에 대해서 작성하겠습니다.
DCGAN
생성적 적대 신경망(GAN, Generative Adversarial Network)은 생성 모델 G와 판별 모델 D가 있다.
생성 모델 G는 랜덤 노이즈 z를 받아 G(z)라는 샘플을 생성하며, 이는 G가 학습한 데이터 분포를 따른다.
판별 모델 D는 입력된 샘플이 실제 데이터 x인지, 아니면 G가 생성한 가짜 데이터 G(z)인지 판별한다.
두 모델은 적대적 관계로 자신이 승리하기 위해 더 좋은 모델로 발전한다.
DCGAN은 GAN에서 심층 합성곱을 적용시킨 것이다.
DCGAN의 생성 모델은 LSUN(Large-scale Scene Understanding) 데이터 셋에서 심층 합성곱 신경망을 사용하여 구현되었다.
DCGAN의 생성 모델은 "fractionally-strided convolution (부분적으로 보폭이 있는 커널)"을 사용하여 업샘플링을 수행한다.
아래 그림 (a)와 같이, 입력이 3 x 3이고 출력의 크기가 3 x 3보다 크기를 기대하는 경우, 입력값 사이에 0을 삽입하여 3 x 3 입력을 확장할 수 있다.
5 x 5 크기로 입력을 확장한 후, 아래 그림 (b)와 같이 합성곱 연산을 수행하면 이전의 3 x 3 입력보다 큰 출력을 얻게 된다.
MobileNet
MobileNet은 구글이 임베디드 장치를 위해 제안한 일련의 경량화 모델이다.
이 모델들은 depth-wise separable convolution과 여러 고급기술들을 사용하여 얇고 깊은 신경망을 구축한다.
1 ) MobileNet v1
MobileNet v1은 Xception에서 제안된 depth-wise separable convolution을 참고해, depth-wise convolution과 pointwise convolution(1 x 1 합성곱)으로 분해하는 방식이다.
depth-wise convolution은 각 합성곱 커널을 입력의 하나의 채널에만 적용 후, 1 x 1 합성곱을 사용하여 depth-wise convolution의 출력을 결합한다.
이러한 방법은 파라미터의 수를 크게 줄일 수 있다.
MobileNet v1은 또한 너비 배수(width multiplier)를 도입하여 각 층의 채널 수를 줄이고, 해상도 배수(resolution multiplier)를 사용하여 입력 이미지의 해상도를 낮춘다.
2 ) MoblieNet v2
MoblieNet v1을 기반으로 MoblieNet v2는 두 가지 개선 사항을 도입했다.
역 잔차 블록(inverted residual blocks)과 선형 병목 모듈(linear bottleneck modules)이다.
ResNet에서 3층 잔차 블록을 설명했는데, ResNet에서의 목적은 1 x 1 합성곱을 활용하여 채널 수를 줄여 매개변수 수를 줄이는 것이었다.
반면, MobileNet v2의 역 잔차 블록은 일반 잔차 블록과 반대 방식으로 동작한다.
역 잔차 블록 동작 방식
- 입력 데이터를 1 x 1 합성곱 커널을 통해 채널을 확장한다.
- 3 x 3 깊이별 분리 합성곱(depth-wise separable convolution)을 수행한다.
- 다시 1 x 1 합성곱 커널을 사용하여 채널을 다시 축소한다.
깊이별 합성곱은 채널 수를 변경할 수 없기 때문에, 입력 채널 수가 특징 추출을 제한하는 문제가 발생할 수 있다.
이를 해결하기 위해서 역 잔차 블록이 활용된다.
저 차원 공간에서 음수값을 0으로 만드는 ReLU 활성화 함수를 사용하면 정보가 쉽게 손실될 수 있다.
역 잔차 블록 과정의 채널 축소 단계에서 ReLU 활성화 함수를 사용한다면 문제가 발생할 수 있다.
따라서, 역 잔차 블록의 두 번째 1 x 1 합성곱 이후에는 ReLU 활성화 함수가 제거되며, 대신 선형 변환(linear transformation)이 적용된다.
이러한 구조를 선형 병목 모듈(linear bottleneck module)이라고 한다.
3 ) MobileNet v3
MobileNet v3의 3가지 개선점
- Platform-aware NAS과 NetAdapt 알고리즘을 결합한 네트워크 검색
Platform-aware NAS : 사용될 하드웨어 플랫폼을 고려한 신경망 아키텍처 탐색 방법
NetAdapt : 모바일 기기 등 자원 재한이 있는 환경에서 사용할 수 있도록 기존 신경망을 자동으로 최적화하는 알고리즘 - Squeeze-and-Excitation (SE) 기법을 기반으로 한 lightweight attention 모델
Squeeze-and-Excitation 기법 : Input data에서 어떠한 채널이 더 중요한지 학습하는 기법
lightweight attention 모델 : 어떠한 정보가 정답을 맞힐 때 중요한지 학습하는 모델인 attention 모델을 경량화한 모델 - h-swish 활성화 함수 사용 (ReLU 대체 함수)
음수 부분도 살리고 부드러운 곡선이 있다. swish 보다 효율적이다.
MobileNet v3에서는 플랫폼 인식 NAS를 사용하여 전체 네트워크의 구조를 찾는다. 그 후 NetAdapt 알고리즘을 사용하여 네트워크를 최적화한다.
MobileNet v3는 Squeeze-and-Excitation (SE)을 활용하여 각 채널에 가충치를 부여하는 lightweight attention 모델을 구현했다. SE 모듈은 깊이별 분리 합성곱 수행 이후에 적용된다.
Squeeze-and-Excitation 모듈 수행 과정
- global pooling 수행한다.
- 첫 번째 FC layer로 채널 수를 1/4로 줄인다.
- 두 번째 FC layer로 채널 수를 다시 복구한다. (2, 3은 각 채널의 가중치를 구하는 역할)
- 채널의 가중치와 깊이별 컨볼루션을 곱하여 재 가중치가 적용된 feature map을 얻는다.
MobileNet v3의 저자들은 swish 활성화 함수가 ReLU에 비해 네트워크의 정확도를 향상할 수 있다는 것을 발견했다.
그러나 swish는 계산 비용이 너무 많이 들어 이들은 계산량을 줄이면서 정확도 손실을 최소화할 수 있는 swish의 하드 버전 (h-swish)를 제안했다.
하지만 h-swish의 이점은 깊은 층에서만 나타나 모델의 후반부에 사용되었다.
또한 sigmoid 함수 역시 하드 버전인 (h-sigmoid)로 대체할 수 있다.
ShuffleNet
ShuffleNet은 모바일 장치의 부족한 컴퓨팅 자원을 해결하기 위해 MEGVII에서 제안한 일련의 CNN 기반 모델이다.
ShuffleNet은 pointwise group convolution, channel shuffle 등 여러 기법을 결합하여 정확도 손실을 거의 발생시키지 않으며 계산비용을 크게 줄였다.
ShuffleNet은 논문 작성일인 2020년 4월 1일까지는 2가지 버전을 가지고 있었다.
1 ) ShuffleNet v1
ShuffleNet v1의 저자들은 1 x 1 컨볼루션의 계산 비용이 높아 작은 네트워크에서는 효율성이 낮다고 판단했다.
따라서 1 x 1 컨볼루션의 계산 복잡도를 줄이기 위해 pointwise group convolution이 제안됐다.
pointwise group convolution은 각 컨볼루션 연산이 해당 입력 채널 그룹에 대해서만 수행되도록 하여 계산 복잡도를 줄일 수 있다.
그러나 한 가지 문제점은 다른 그룹 간의 feature map 간 통신을 방해하여, 대표적인 feature map을 추출하는데 해로울 수 있다는 것이다.
이에 따라 channel shuffle 연산이 제안되어, 서로 다른 그룹의 정보가 무작위로 다른 그룹으로 흐를 수 있도록 도와줬다.
또한 channel shuffle 연산을 바탕으로 아래 그림과 같은 ShuffleNet 유닛이 제안되었다.
(a)는 깊이별 컨볼루션(DWConv)을 사용한 단순한 잔차 블록이다.
(b)는 1 x 1 컨볼루션을 계산이 더 효율적인 1 x 1 GConv로 교체하고 채널 셔플을 도입하였으며, 두 번째 ReLU를 지웠다.
(c)는 shortcut 경로에 2 stride를 갖는 3 x 3 AVG Pooling이 사용되고, 원소별 덧셈 대신 Concat이 사용되었다.
2 ) ShuffleNet v2
ShuffleNet v2의 저자들은 연산 복잡도 (FLOPs)와 메모리 접근 비용(Memory Access Cost, MAC)을 참고해 모델 설계를 위한 몇 가지 가이드라인을 제시하고, 이를 기반으로 ShuffleNet v2를 설계하였다.
모델 설계를 위한 4가지 가이드
- 1 x 1 Conv를 사용하는 경우 GPU 및 ARM 플랫폼에서 입력 채널 수와 출력 채널 수가 같을수록 MAC가 최소화됨을 발견했다.
- 입력 데이터의 그룹 수를 변경하면 네트워크의 학습속도에 영향을 준다. 그룹수가 많아질수록 MAC가 증가하고 학습 속도는 느려진 자.
- 여러 개의 분할 구조는 정확도를 향상할 수 있지만, GPU와 같은 병렬 컴퓨팅 자원에서의 효율성은 감소시킬 수 있다.
- ReLU, 텐서 덧셈, 오프셋 덧셈, 분리형 컨볼루션 등과 같은 원소 단위 연산은 많은 시간을 소모하기 때문에 이러한 연산을 줄여야 한다.
ShuffleNet v2 유닛은 위의 네 가지 가이드를 바탕으로 설계되었다.
ShuffleNet v2에서는 채널 분할(channel split) 기법이 제안되었다.
각 ShuffleNet v2 유닛에서는 먼저 채널을 A와 B라는 두 가지 분기로 분할한다.
이후 과정은 아래 그림에 있는 (a)를 통해 확인할 수 있다.
공간 다운샘플링(spatial downsampling)의 경우에는 유닛이 약간 수정되며, 그 과정은 아래 그림 (b)에서 확인할 수 있다.
CNN의 혁신들 요약
- LeNet-5
LeNet-5는 필기 숫자 인식에 성공적으로 활용된 최초의 현대적인 CNN이다. LeNet-5의 컨볼루션, 활성화 함수, 풀링, 완전 연결 층 등은 널리 사용됬다. - AlexNet
LeNet-5 보다 더 깊은 구조를 도입, 드롭아웃(dropout), 데이터 증강(data augmentation)과 같은 기법을 제안하고 ReLU 활성화 함수를 사용했다. - VGGNet
더 깊은 네트워크가 보통 더 성능이 좋다는 것을 증명, 네트워크 설계를 위한 가이드를 제공 - GooLeNet
더 넓은(wider) 네트워크도 효과적일 수 있음을 제안, 큰 크기의 컨볼루션 커널을 작은 커널들로 대체할 수 있음을 보여줌, 컨볼루션 인수 분해(factorizing convolutoin)와 ResNet도 활용되었다. - ResNet
매우 깊은 네트워크를 가능하게 하여, gradient vanishing 문제를 완화함 - DCGAN
CNN과 GAN을 결합하여 두 기술의 실용적인 활용 범위를 확장함. - MobileNet
계산 성능이 제한된 모바일 장치를 위해 설계되었으며, depth-wise separable convolution, inverted residual block, SENet 기반의 lighweight attention 모델, 플랫폼 인식 NAS, NetAdapt 알고리즘 등을 활용했다. - ShuffleNet
모바일 장치를 위해 고안되었으며, pointwise group convolution과 channel shuffle을 결합했다. FLOPs 외에도 MAC이 네트워크 속도에 영향을 줄 수 있는 또 다른 요소임을 입증했다.