IT/AI\ML

[연구동향] CNN(Convolution Neural Networks)의 최신 연구 동향(~2017년)

개발자 두더지 2020. 4. 28. 11:38
728x90

1. 들어가며

 Convolutional Neural Networks(이하 CNN)은 주로 이미지 인식에 이용되는 뉴럴 네트워크의 한 종류이다. CNN의 원형은 생물의 뇌의 시각 피질과 관련된 신경 생물학적인 지식을 토대로 고안한 Neocognitron으로 볼 수 있다. Neocognitron은 특징 추출을 실행하는 단순형 세포에 대응하는 Convolution layer과, 위치의  어긋남을 허용하는 움직임을 가진 복수형세포에 대응하는 Pooling layer과의 상호적, 계층적으로 배치한 뉴럴 네트워크이다. Neocognitron에서는 자기 조직화에 의해 학습이 이루어지고 있었지만, 후에 LenCun에 의해 CNN의 backpropagation을 이용한 학습법이 확립되어, 예를 들면 LeNet이 문자인식에 있어서 성공을 거뒀다.

Neocognitron(좌)와 LeNet(우)의 아키텍처

 2000년대에 들어서서, 이미지 인식분야에서는 SIFT등의 전문적으로 설계된 특징 벡터과 SVM등의 식별기를 합친 방법이 주류가 되고 있다. 그 시대에도 뉴럴 네트워크의 연구가 진행되어, 2012년에 들어서서 이미지 인식 공모전 ImageNet Large Scale Visual Recognition Competition (ILSVRC) 에서 AlexNet이라고불리는CNN를 이용한 방법이 지금까지의 이미지 인식의 표준이었던 SIFT+FisherVector+SWM이라는 접근과 큰 차이를 벌이며 우승해, 일약 심층학습이 주목받게 돼었다.

 그 이후의 ILSVRC에서는, CNN을 이용한 방법이 주류가 되어, 매년 새로운 CNN의 모델이 적용되고 있으며, 일관되게 인식 정밀도의 향상에 기여하고 있다. 그리고 ILSVRC에 우수한 성적을 거둔 모델은 이미지 인식이나 그 외 다양한 업무를 해결하기 위한 사실상의 표준 모델로 이용되게 됐다.

 CNN은 이미지 인식분만 아니라, 세그먼테이션, 물체검출, 자세 추정 등 다양한 업무를 해결하기 위한 기반 네트워크로써 넓게 이용되고 있다. 또한, 이미지뿐만 아니라, 자연어처리, 음성신호처리, 게임 AI등의 분야에서도 이용되는 등 뉴럴 네트워크 중에서도 중요한 위치를 점유하고 있다.

 이러한 배경하에, 이 기사에서는 AlexNet이후의 대표적인 CNN의 모델의 변천을 되돌아보고, 최근 제안된 다양한 개선 방법에 대한 조사를 실시해, 그것들을 몇 가지 방법으로 분류하고 설명한다. 이 기사에서는 CNN의 모델을 어떻게 구성하고 있는가하는 모델의 아키텍처에 초점을 맞추고 있으며, 각각의 구성 요소나 최적화 방법에 대해서는 자세히 기술하지 않는다. 그러므로 더 넓은 범위의 내용에 대해서는 참고문헌을 참고하길 바란다.


2. 결론과 같은 것

 ResNet은 하나의 커다란 돌파구로서, 이 이후의 모델에 거의 ResNet의 개선이라고 말할 수 있으며, DenseNet이외의 독자적인 아티텍처의 성공 사례는 없다. Residual모듈의 개선 시점에서는 거의 모든 방법이 차원 축소와 sparse한 Convolution을 합친 것으로 , 정밀도와 파라미터 수의 트레이드 오프를 개선하고 있는 접근이라고 말할 수 있다. 즉, Convolution의 파라이터를 절감하고, 그 만큼의 깊이나 폭을 크게 하는 것으로 정밀도를 향상시키고 있다.

 데이터 및 모델 내의 정규화는 다른 방법과 합쳐져 위의 효과가 크게 기대되고 있는데, 왜 개선이 되고 있는지 불명확한 점도 많아 향후 이론적인 설명이 기대된다.

 인간의 고안한 구조를 웃도는 정밀도를 달성하는 네트워크의 자동 설계도 실현되어 가고 있지만, 이용된 전체 구조나 구성 요소는 계속해서 인간이 고안한 것이며, 예를 들면 ResNet의 쇼트 커트와 같은 구성 요소가 자동적으로 발견되는 것과 같은 구성은 아직 존재하지 않는다.


3. ILSVRC로 되돌아본 CNN의 진화

 본 장에서는 2012년부터 2017년 까지의 ILSVRC의 클래스 분류 업무(아래에서는 간단히 ILSVRC)에 있어서 우수한 성적을 거둔 모델을 순서대로 되돌아보며, CNN가 어떻게 진화해왔는지 대충 살펴보자. 아래의 그림에 2010년부터 2017년의 ILSVRC의 클래스 분류 업무에서 달성한 top-5 에러율과, 2012년이후의 CNN베이스의 모델을 표시하였다.


4. AlexNet(2012)

 AlexNet은 2012년의 ILSVRC에 있어서, 기존의 이미지 인식의 사실상의 표준이었던 SIFT + Fisher Vector + SVM이라는 접근과 큰 차이를 벌이며 우승하였고 심층 학습의 유효성을 한 순간에 알린 모델이다. 현재는 비교적 소규모의 모델이기도 하고, 베이스 라인으로써 사용되고 있다.

 위 그림은 AlexNet의 구조이다. AlexNet은 Convolution층이 5개가 거듭되어 있으면서 pooling층에서 특징 맵을 압축한 뒤 3층의 전결합층(FCN)에 의해 최종적으로 출력을 얻는다. 기본적인 구조의 설계 사상은 Neocognitron이나 LeNet을 답습하고 있다. 학습할 때는, 당시의 GPU의 메모리 제약으로 인해, 각층의 특징 맵을 채널 방향으로 분할해, 2대의 GPU로 독립적으로 학습하는 방식을 취했다. 몇개의 Convolution 층 및 FCN층에서는 보다 유효한 특징을 학습하기 위해 또 다른 한 대의 GPU가 담당하고 있는 채널도 입력으로써 이용하고 있다.

 CNN의 가중치는 가우스분포에 따라 랜덤한 수로 초기화되어, 모멘텀이 있는 확률적 기울기 하강법(Stochastic Gradient Descent, SGD) 에 의해 최적화된다. 각 파라미터는 weigtht decay(2정규화)에 의해 정규화된다.loss이 감소하지 않는 타이밍에 학습률을 1/10로 감소되는 것도 실행되고 있으며, 위에서 언급했듯 최적화의 방법은 현재에 있어서 모범 사례로써 이용되고 있다. 아래에서는 AlexNet에 도입되어 있는 중요한 요소기술에 대해서 설명한다.

1) ReLU

 기존, 비선형적인 활성화 함수로써 f(x)=tanh(x)나 f(x)=(1+e−x)−1가이용되었지만, f(x)=max(0,x)로 정의한 ReLU를 이용하는 것으로 학습을 고속화시켰다. 이것은 심층 네트워크에 기존의 활성화 함수를 이용한 경우 발생한 기울기 손실 문제를 해결하는 것이 가능해졌다. 그 이후 개선된 활성화 함수도 제안되어 있지만, ReLU는 최근의 모델에서도 표준적인 활성화함수로써 넓게 사용되고 있다.

2) LRN

Local Response Normalization (LRN)는 특징맵의 동일한 위치에 있는 인접한 채널의 출력의 값으로부터 자신의 출력의 값을 정규화하는 방법이다. 공간적으로 인접한 출력도 고려해 정규화하는 Local Contrast Normalization (LCN)과 비교하여, 평균값을 끌어내는 처리를 하지않고, 보다 적당한 정규화를 하고 있다. 이후에 설명한 VGGNet에서는 효과가 인정받지 못하였고, batch normalization의 등장에 의해 최근의 모델에서는 잘 사용되지 않고 있다.

3) Overlapping Pooling

 Pooling층은 s픽셀마다 떨어진 그리드에서, 주변 z 픽셀의 값을 max나 average함수로 집계하는 처리라고 일반화하는 것이 가능하다. 일반적으로, pooling층은 s=z로하여 집약한 픽셀이 복수의 그리드로 걸쳐 overlap하지 않는 것이 일반적이었지만, AlexNet에서는 s=2, z=3의 max pooling을 이용하여, 이 경우 집약된 픽셀 영역이 overlap된다. 이런 overlapping pooling에 의해 과학습을 감소하고, 최종적으로 정밀도가 향상된다고 주장된 것이다.

4) Dropout

Dropout은 학습할 때의 네트워크에 대해, 은닉층의 뉴론을 일정 확률로 무효화시키는 방법이다. 이것에 의해 유사적으로 매회 다른 모델으로 학습을 실시하는 것처럼 되어  upsample학습과 같은 효과를 얻을 수 있으며, 보다 일반화된 모델을 학습하는 것이 가능하다. AlexNet에서는, 최초의 2개의 전결합층(FCN)에 이런 dropout을 도입하고 있다. Dropout을 실행하지 않는 경우에는 과학습이 상당히 발생하지만, dropout에 의해 이러한 과학습을 억제할 수 있는 한편, 수렴까지의 스킵수가 약 2배가 된다고 보고되어 있다.


5. ZFNet(2013)

 ZFNet은 2013년의 ILSVRC의 우승모델이다. CNN이 어떤 이지미를 인식하고 있는지를 이해하고, 또한 어떻게하면 CNN을 개선할 수 있을까를 검토하기 위한 목적으로써 CNN의 가시화를 실시하였다. 이 가시화의 결과, AlexNet의 두 가지의 문제가 밝혀지게 되어 이러한 문제를 해결하는 개선을 실시해 고정밀화시켰다.

 밝혀진 AlexNet의 첫 번째 문제는, 최초의 Convolution층의 필터가 큰 커널 사이즈를 이용하는데 이는 극단적으로 고주파와 저주파의 정보를 얻기위한 필터로 그 사이의 주파수 성분을 취득하는 필터가 거의 없었다는 점이다. 두 번째 문제는 2층째의 특징 맵에 있어서, 앨리어싱이 발생하는 것이다. 이것은 초기의 Convoluton층에서 stride가 4라는 큰 값을 사용하고 있는 것으로 인해 발생하는 것이다. 이러한 문제를 해결 하기 위해,

1. 초기의 Convolution의 필터 사이즈를 11에서 7으로 축소함.

2. stride를 4에서 2로 축소함.

이라는 개선을 실시하여 AlexNet을 뛰어넘는 인식정밀도를 달성하였다. 최종적으로 ZFNet의 구조는 아래의 그림과 같다. Layer 2의 max pooling 이후의 구성은 AlexNet과 동일하다. (AlexNet은 GPU2개로 학습을 하기 위해 모델을 분리하였지만, ZFNet은 1대의 GPU로 학습을 하고 있다.)


6. GoogleNet(2014)

GoogleNet은 2014년의 ILSVRC의 우승 모델이다. 이 모델의 특징은 아래와 같이 Inception모듈을 이용하는 것이다.

1) Inception모듈

 GoogleNet의 가장 큰 특징은 복수의 Convolution이나 pooling층으로 구성된 Inception모듈이라고 불리는 작은 네트워크(micro networks)를 정의해, 이것을 보통의 Convolution층처럼 거듭해나면서 하나의 커다란 CNN을 만다는 것이다. 이 기사에서는 이러한 작은 네트워크를 모듈이라고 불른다. 이 설계는 Convolution층과 다층 퍼셉트론(구현은 1x1 Convolution)에 의해 구성된 모듈을 처음에 이용하는 Network In Network(NIN)에 큰 영향을 받고 있다.

 위에서 언급한 Inception모듈의 구성을 표시하였다. Inception모듈에서는 네트워크를 나눠서 사이즈가 각각 다른 Convolution을 실시한 후, 출력된 것을 합치는 처리를 한다. 이 목적은 Convolution층의 가중치를 sparse하여 파라미터 수의 트레이드 오프를 개선한 것이다.

 원래 Convolution층은 spares하면서 공유된 가중치를 가지는 전결합층(FCN)으로 간주할 수 있지만, 이러한 Convolution층 자체도 입력 채널과 필터의 가중치로써 Dense한 결합을 하고 있다고 말한다. 이것에 대해 Inception모듈은 이 입력 채널과 필터의 가중치가 spares가 된 것으로 간주할 수 있다. 즉, (b)의 native한 Inception모듈은 maxpool을 제외하여, 본래는 가중치가 sparse한 5x5의 Convolution하나로 표현하는 것이 가능하다.

 이런 파라미터의 감소는 아래의 그림을 보면 직접적인 이해가 가능하다. 즉, Convolution층의 파라미터수는 bias항목을  제외하면 입력채널 수 x 출력 채널 수 x 커넬 사이즈(예 5x5=25)로 표현할 수 있다. 보통의 Convolution이라고 한다면, 왼쪽처럼 파라미터가 완전히 무엇인가 값을 갖고 있는 dense이다. 한편, Inception은 다른 사이즈의 Convolution을 독립하여 실행하므로 0이 아닌 파라미터수가 크게 감소하게 돼었다.

 또한, 실제로 이용되는 (a)의 Inception모듈은 각 Convolution층의 전에 1x1의 Convolution층을 삽입하여, 차원감축을 하는 것으로 더욱 파라미터를 감소하고 있다.

2) Global Average Pooling

 GoogLeNet에서는 Global Average Pooling(GAP)가 도입됐다는 점을 주목하고 싶다. 기존의 모델은 Convolution층의 후에 복수의 FCN층을 겹겹히하여 최종적으로 100 클래스 분류의 출력을 얻는 구성으로 되어있지만, 이러한 전결합측(FCN)은 파라미터수가 많고, 과학습을 발생하는 문제가 있으므로 dropout을 도입해 과학습을 방지할 필요가 있었다.

 여기서 제안된 GAP은 입력된 특징맵의 사이즈를 같은 사이즈의 average pooling을 하는 pooling층이다. (즉 출력이 1x1x채널수의 Tensor이 된다) 참고문헌에서는 CNN의 최종의 Convolution층의 출력 채널 수를 최종적인 출력의 차원수(클래스 수)와 동일시한 후 GAP(및 sofmax)를 적용하는 것으로 전결합층을 이용하지 않고 최종적인 출력을 하자고 제안하고 있다. 전결합층을 이용하지 않는 것으로, 파라미터의 수를 크게 감소하고 과학습을 방지하는 것이 가능하다. 아래의 그림은 NIN에서의 GAP처리를 나타내는 것이다.

 GoogLeNet에서는 최종의 Convolution층의 출력 채널 수를 클래스 수와 동일시하지 않고, GAP의 후에 전결합층을 1층만 적용하여 최종출력을 얻는 구성을 하고 있다. 이런 GAP의 이용은 현재는 클래스 분류를 실시하는 CNN의 모범사례가 되었다. 

3) Auxiliary Loss

 GoogLeNet의 학습에서는 네트워크의 중간에서부터 분기한 서브 네트워크에 있어서도 클래스 분류를 실시해 Auxiliary Loss를 추가하는 방식을 실시하고 있다. 이것에 의해, 네트워크의 중간층에 직접 오차를 전달할 수 있으므로 기울기손실을 방지하고 네트워크의 정규화를 실현하고 있다.

4) Inception-vX

 참고문헌에서는 5x5의 Convolution을 3x3의 Convolution을 2개를 중접시킨 것으로 대체함으로써 더욱 Inception모듈의 파라미터를 줄이거나, 뒤에서 설명한 batch normalization을 도입하는 등의 개선을 실시하는 Inception-vX가 제안돼었다. 더욱이 참고문헌에서는 nx1이나 1xn의 Convolution을 다수 도입해, 정밀도와 계산량의 트레이드 오프를 개선한 Inception-v4나, 후술할 ResNet의 구조를 도입한 Inception-ResNet가 제안돼었다.


7. VGGNet(2014)

 VGGNet는 2014년의 ILSVRC에 있어서 2위의 인식 정밀도를 달성한 모델이다. 이 간단한 모델 구조나 학습된 모델이 배포되어 현재는 베이스라인의 모델로써 또한 클ㄹ스 분류 이외의 업무의 베이스 네트워크나 특징 추출기로써 이용되고 있다.

 참고문헌의 주요한 관심은 CNN의 깊이가 어느정도 성능에 영향을 미치는가를 밝혀내기 위한 것이다. 이러한 목적에 대해 아래와 같이 모델 구조를 설정 방침을 명확히하여, 깊이의 영향을 검증하는 것이 가능하다.

- 3x3 (일부 1x1)의 Convolution만을 이용한다.

- 동일 출력 채널 수의 Convolution을 몇 개 거듭한 후 max pooling에 의한 특징 맵을 반정도 압축한다.

- max pooling의 후의 Convolution의 출력 채널 수를 2배로 증가시킨다.

 이런 설계 방침은 이후의 모델 구조에 넓게 이용돼고 있다. 참고문헌은 위와 동일한 설계 방침을 기본으로 네트워크의 깊이를 증가시켜 나가면 정밀도가 향상되는 것을 보여주었다.

 위의 3x3 Convolution층의 이용은 모델 구조를 심플하게 할 뿐만아니라, 보다 큰 커넬 사이즈의 Convolution층을 이용하는 경우와 비교하여, 표현능력과 파라미터 수의 트레이드 오프를 개선하는 효과가 있다. 예를 들면, 3x3의 Convolution층을 2개 겹친 네트워크는 5x5의 Convolution 층과 동일의 receptive filed를 가지면서, 파라미터 수를 5x5=25부터 3x3x2=18로 감소시킬 수 있다고 말한다. 여기서 Receptive filed(수용 구역)이란, 어떤 특징 맵의 1화소가 집계하고 잇는 것은 전(前)층의 공간감이며, 수용 구역이 넓을수록 인식에 유효한 전역적인 콘텍스트 정보가 포함되어 있다고 말한다. 더욱이 참고문헌의 주장인 깊이를 증가하는 것이 가능한 것으로부터, 그 이후의 모델 구조에서는 3x3의 Convolution층이 표준적으로 이용되고 있다.

 AlexNet이나 ZFNet에 이용됐던 LRN은 VGGNet과 같은 깊은 네트워크에서 별로 효과가 없다는 것이 확인되어, 이용되지 않는다. VGGNet은 기존과 비교하여 깊은 네트워크이므로 학습이 어려우므로, 먼저 얕은 네트워크를 학습하여, 그 후 Convolution층을 추가한 깊은 네트워크를 학습하는 것과 같은 방침을 하고 있다.  한편, 그 이후의 검증에서 Glorot의 초기화를 이용하는 것으로 사전 학습없이도 깊은 네트워크의 학습이 가능해졌다고 보고된다.


8. ResNet(2015)

 Residual Networks(ResNet)은 2015년의 ILSVRC의 우승 모델이다. VGGNet에 언급한 것처럼, 네트워크를 깊이하는 것으로 표현능력이 향상되어 인식 정밀도를 개선할 수 있으나 너무 깊은 네트워크는 효율적인 학습이 어려웠다. ResNet는 보통의 네트워크와 같이, 무엇인가 처리 블록에 의한 변환 F(x)를 간순히 다음의 층에 전달해나가는 것이 아닌, 그런 처리블록의 입력 x를 쇼트 커트하여, H(x) = F(x) + x를 다음 층에 전달한다. 이런 쇼트 커트를 포함한 처리 단위를 residual모듈이라고 부른다. ResNet에서는 쇼트 커트를 통해서 backpropagation할 때 기울기가 직접 아래층에 전달할 수 있게 되어 매우 깊은 네트워크도 효율적인 학습이 가능해졌다.

 쇼트커트를 이용하는 아이디어는 gate함수에 의한 x와 F(x)의 가중치를 제어하는 Highway Network에 있어서도 이용되고 있으나, 매우 깊은 네트워크에 있어서 정학도를 향상시키는데 까지는 이르지 못했다.   

1) Residual 모듈

아래의 그림은 residual 모듈의 구성 그림이다.

(a)는 residual모듈의 추상적인 구성을 표시한 것이고, (b)는 실제로 사용되는 residual모듈의 예를 표현한 것으로, 출력 채널 수가 64의 3x3의 Convolution층이 2개 배치되어 있다. 정확히는 Convolution 층뿐만 아니라, 뒤에서 설명할 batch normalization과 ReLU가 배치되어 있으며, 참고문헌의 ResNet에서는 아래와 같은 구성의 residual모듈이 이용된다.

conv - bn - relu - conv - bn - add - relu

 여기서 add는 F(x)와 x의 합을 나타낸다. 이러한 residual 모듈의 구성에 관해서 복수의 개선방법이 제안되어 있는데, 나중에 설명하도록 하겠다.

 (c)는 residual 모듈의 bottleneck버전이라고 불리고 있으며 1x1의 Convolution을 사용하여 차원 감소를 한 후에 3x3의 Convolution을 실시한 후, 그 이후 1x1에 의해 저차원을 복원하는 형태를 취하는 것으로, (b)와 동등한 계산량을 유지하면서, 보다 깊은 모델을 구축할 수 있다. 실제로 (b)의 residual 모듈을 이용한 ResNet-34와 비교하여, 동등한 파라미터 수를 가진(c)의 모듈을 이용한 ResNet-50는 크게 정확도가 계산됐다고 보고됐다.

 Residual 모듈의 쇼트 커트에 있어서, 기본적인 identity function f(x) = x가 이용되었지만, 입력 채널수와 출력 채널 수가 다른 경우에는 부족한 채널을 0으로 채우는 zero-padding과, 1x1의 Convolution에 의한 채널 수를 조정하는 projection의 2패턴의 쇼트 커트가 선택되고 있다. 이 중, zero-padding접근의 쪽이 파라미터를 증가시키지 않아 괜찮지만, 구현이 용이한 projection이 이용되는 경우가 많다.

2) Batch normalization

 깊은 네트워크에서는 어떤 층의 파라미터의 갱신에 의해 다음의 층에의 입력의 분산이 배치마다 크게 변화해버려 내부의 모든 변수를 변화시키는 internal convariate shift가 발생하여, 학습이 효율적으로 진행되지 못하는 문제가 있었다. Batch normalization은 이런 내부의 모든 변수를 변화를 정규화하여, 어떻게든 각 레이어가 독립하여 학습이 될 수 있도록 하여 학습을 안정화, 고속화하는 방법이다. ResNet에서는 이런 batch normalization을 residual 모듈에 통합하여 깊은 네트워크의 효율적 학습을 실현하고 있으며, ResNet이후의 모델에서는 batch normalization이 표준으로 이용되고 있다.

3) ResNet의 구성

 ResNet은 전에 기술한 residual 모듈 여러 개 쌓은 형태로 구성됐다. 아래의 그림은 예를 들어 34층의 ResNet-34의 구성을 보여준다.

 먼저 stride가 (2,2)의 7x7 Convolution을 실행한 후, s=2, z=3의 max pooling을 실시하는 것으로 특징 맵을 압축한다. 그 이후에 VGGNet과 같이, 동일한 출력 채널 수를 가진 residual모듈을 여러 개 쌓은 후 특징 맵을 반으로 압축하고 채널 수를 2배로 하는 것을 반복하는 네트워크로 구성되어있다. 특징 맵을 반으로 압축하는 처리는 max pooling이 아닌, 각 residual모듈의 최초의 stride가 (2,2)의 Convolution을 실행하는 것으로 실현한다. 또한 GoogLeNet과 같이 전결합층 전에 GAP를 이용하는 방침을 채용하고 있다.

4) He의 초기화

 VGGNet에서는 랜덤으로 최기화한 가중치의 스케일을 적당히 설정한 Glorot의 초기화를 이용하는 것으로 깊은 네트워크여도 사전 학습없이 학습이 가능하다고 보고됐다. 그러나, Glorot의 초기화를 실시한 스케일링은 선형의 활성화 함수를 전제로 하고 있으며, ReLU를 활성화함수로써 이용하는 경우에는 적절하지 않다. 이에 대해 참고문헌에서는 ReLU를 활성화함수로써 이용하는 경우의 적절한 스케일링을 논리적으로 도출하여 ResNet에서는 이런 He의 초기화를 이용한다.

 ResNet의 흥미를 더하는 요소로써, 랜덤으로 하나만 residual 모듈을 삭제해도 인식 정확도가 거의 낮아지지 않는다는 것을 꼽을 수 있다. 이것을 residual모듈의 쇼트 커트의 재귀적으로 전개해 나가면 다른 깊이의 네트워크를 통합한 네트워크와 값은 값임을 보인 바와 같이, ResNet이 암묵적으로 복수의 네트워크의 upsampling학습을 실행하고 있기 때문이라고 생각되고 있다. 


9. SENet(2017)

 Squeeze-and-Excitation Networks(SENet)은 2017년의 ILSVRC의 우모델이며, 특징맵을 채널마다 적응적으로 가중치를 부여하는 Attention을 도입한 네트워크이다. 이러한 Attention은 Squeeze-and-Excitation Block(SE Block)에 의해 표현된다. 아래는 SE Block의 구성이다.

 SE Block은 이름대로, Squeeze스킵과 Excitation 스팁의 2단계의 처리를 하고 있다. Squeeze 스킵은 HxWxC의 특징맵에 대해 GAP가 적용되어 이미지의 전체적인 특징이 추출된 1x1xC의 Tensor이 출력된다. 다음인 Excitation스킵에서는 1x1의 Convolution에 의해, 특징 맵의 채널간의 의존관계가 추출된다. 구체적으로는 출력 채널수가 C/r의 1x1의 Convolution이 적용되어 ReLU를 거친 뒤, 출력 채널 수 C의 1x1의 Convolution가 적용된다. 최종적으로 시그모이드 함수가 적용돼, 특징맵의 채널 마다의 가중치가 출력된다. 이런 채널 마다의 가중치를 이용해 특징 맵을 스케일링하는 것으로 이미지 전체의 문맥에 따라 특징 선택을 실현할 수 있다.

 이러한 SE Block는 지극히 일반적이므로, 기본적으로는 어떤 모델에도 도입할 수 있다. 참고문헌에서는 ResNet이나 뒤에서 설명할 ResNetXt, Inception-v3, Inception-ResNet-v2모델에 SE Block을 도입해 문맥 정확도에 대한 개선을 나타내고 있다. SENet에서는 채널마다의 Attention을 적용하고 있지만, 공간, 채널 양쪽에 대한 Attention을 적용하는 방법도 존재한다. 


10. ILSVRC에 있어서 CNN의 진화 정리

 지금까지 설명한 ILSVRC에 있어서 특히 중요한 구조 및 기술 요소를 정리한다. 현재 사실상의 표준을 말할 수 있는 ResNet에 이용되고 있는 기술요소에 대해 주목해보자면, 스킵 연결이라는 가장 중요한 기술 요소야말로 ResNet에서 처음 이용되고 있지만, 그 외의 기술 요소는 지금까지의 CNN의 진화의 과정에서 도입된 것이 많고, 정확히 CNN의 집대성이라고 말할 수 있는 아키텍쳐라는 것을 알 수 있다.


11. 최신의 CNN개선방법

 ILSVRC에 우수한 성적을 거둔 방법 이외에도 다양한 CNN의 개선방법이 제안되어 있다. 본 장에서는 그러한 방법 6 가지에 대해 설명한다.

1) Residual 모듈의 개선

 ResNet은 residual모듈을 겹겹히한 심플한 설계로 높은 정밀도의 인식을 실현한 것으로 사실상의 표준 모델이 됐다. 이것에 대해 residual 모듈내의 구성 요소를 최적화하는 것으로 성능 개선을 도모하는 방법이 여러 개 제안됐다.

 초기의 ResNet의 참고문헌에서는 아래와 같은 residual모듈의 구성을 제안했다.

conv - bn - relu - conv - bn - add - relu

 이것에 대해, 참고문헌에서는 아래와 같은 BN 및 ReLU를 Convolution층 전에 배치하여 정밀도를 개선한 것을 언급하고 있다.

bn - relu - conv - bn - relu - conv - add

 이것은, 쇼트 커트의 후에 ReLU에 의한 활성화를 실행하지 않는 것으로, 기울기가 그대로 가까운 층에 전달되면 효율적인 학습이 가능할 것이라고 생각한 것이다. 단순히 ResNet이라고 참조할 경우, 이런 구성을 나타내고 있는 경우도 있으므로 주의가 필요하다.  명시적으로 위의 구성의 residual모듈을 이용한 ResNet이라고 표시한 경우에는 pre-activation(pre-act)의 ResNet이라고 참고한 경우가 많다.

 어떤 참고문헌에서는, pre-act의 residual모듈내의 ReLU의 수를 1로하고, 최종적으로 BN을 더하는 방법을 제안하고 있다.

bn - conv - bn - relu - conv - bn - add

 Residual모듈내의 ReLU의 수를 1로하는 것으로 정밀도가 개선할 수 있다는 것이 이 참고문헌의 주장이다. 다른 참고문헌에서는 pre-act의 residual모듈에 대해 마지막 Convolution층 전에 dropout을 넣는 것으로 정밀도를 향상시킬 수 있다고 말한다.

bn - relu - conv - bn - relu - dropout - conv - add

 위의 설명까지에서는 ResNet의 bottleneck버전의 구성에 대해 말하고 있지 않지만, bottlenetck버전에 대해서도 같은 경향이 확인되고 있다.

(1) WideResNet

 46번의 참고문헌에서, ResNet에 대해, 층을 깊이하는 것 대신, 각 residual모듈내의 Convolution의 출력 채널수를 증가시킨 wide한 모듈로 하자는 Wide Residual Networks(WideResNet)가 제안되고 있다. 이 논문의 주장은 깊고 좁은 모델보다도 얕고 넓은 모델이 최종적으로 정확도가 높으며 학습 속도도 뛰어나다는 것이다. 예를 들어, 16층의 WideResNet이, 1000층의 ResNet과 비교하여, 동등한 정확도 및 파라미터의 수일 때, 몇 배 빠른 학습이 가능하다고 말한다. 또한, WideResNet 중에서도 비교적 깊은 모델에서는 residual모듈내의 2개의 Convolution층의 간에 dropout을 삽입하는 것으로 정확도를 향상할 수 있다고 언급한다.

(2) PyramidNet

 40번의 참고문헌에서는, ResNet가 복수의 네트워크의 앙상블 학습에 있어서, 랜덤한 residual모듈을 삭제해도 정밀도가 거의 떨어지지 않는다고 말하고 있다. 그러나 특징맵의 사이즈를 반으로 down sampling하는 residual모듈을 삭제한 경우에 한해서는 상대적으로 큰 정밀도 감소가 확인됐다. 이것은 down sampling을 실행한 residual모듈에서는, 출력 채널 수를 배로 증가시켜, 상대적으로 그 모듈의 중요도가 크게 되어버리고 말기 때문이라고 생각된다. 앙상블 학습의 시점에서는, 특정 모듈의 중요도가 크게 되어버리고 마는 것은 원하지 않으므로, 이것을 해결하는 네트워크로써 Pyramidal Residual Networks(PyramidNet)을 제안했다.

  PyramidNet에서는 down sampling하는 모듈만 출력 채널 수를 증가 시키지 않고,모든 residual모듈에서 조금씩 출력 채널 수를 증가시킨다. 증가시키는 방법으로써 단순 증가시키는 경우와 지수로 증가시키는 경우를 비교한 결과 단순 증가시키는 쪽이 정밀도가 더 좋다고 말한다. 단순 증가시키는 경우, k번째의 residual모듈의 출력 채널 수 Dk는 다음과 같이 정의되어 있다.

 PytamidNet는, bottleneck버전의 ResNet을 베이스로써, 272층이라는 깊은 네트워크를 학습시키는 것으로 매우 정확한 인식을 실현하였다.


2) 독립 모듈의 이용

 Residual모듈이나 Inception모듈의 성공으로부터 그것을 대신하는 새로운 모듈이 다수 제안됐다. 대다수의 방법이 Residual모듈을 베이스로하고 있다.

(1) ResNeXt

 ResNeXt은 ResNeXt내의 처리블록 F(x)에 있어서, 아래와 같이 입력 x를 다수 분기시켜, 동일한 구성을 가진 뉴럴 네트워크 Ti(x)에서 처리를 실시한 후, 그것의 합을 구하는 ResNeXt모듈을 이용한 방법이다.

 여기서, 분기수 C는 cardinality라고 부른다. 이런 아이디어는 보통의 뉴럴 네트워크의 처리인 아래의 식을

보다 일반적인 Ti(x)로 바꾼 것으로 Network-in-Neuron이라고 불린다.

 위 그림은 (a)에서, 입출력채널수가 256, C=32로한 경우의 ResNeXt모듈의 구성을 표현한 것이다. 여기서 Ti(x)는 

conv 1x1, 4 - conv 3x3, 4 -conv 1x1, 256

를 순서로 적용한 처리로 정의되어 있다. (a)의 구조는 사실(b)와 같이 바꿀 수 있다. (b)에 있어서 2번째의 Convolution는 grouped convolution (본장에서는 그룹화 Convolution이라고 부른다)이라고 불리며, 입력 특징 맵을 g로 분할하여, 각각 독립적으로 Convolution을 실행하는 처리를 한다.

 (b)의 구조는, conv 1x1보다 차원감소하여, conv 3x3을 실시한 후, con 1x1에 의해 차원을 복원하는 것으로, 사실 bottleneck버전의 residual모듈에 있어서, 3x3의 Convolution을 그룹화 Convolution으로 변경한 것으로 간주할 수 있다. 그룹화 Convolution은 Inception모듈과 마찬가지로, 채널 방향의 결합이 밀도가 적은 파라미터의 Convolution이다. 결과적으로 ResNeXt은 ResNet과 비교하여 표현력과 파라미터의 수 트레이드 오프가 개선되었고, 동일한 파라미터 수로 정밀도를 향상시킬 수 있게 됐다. 아래의 그룹화 Convolution의 파라미터 수의 직관적인 이해를 위해 그룹 수가 2의 그림을 보여준다. 아래의 그림대로 그룹화 Convolution은 보통의 Convolution과 비교하여 파라미터수를 1/그룹 수로하는 것이 가능하다.

(2) Xception

 Xception은 단적으로 보통의 Convolution을 대신해 depthwise separable convolution(이하 separable Convolution)을 이용한 ResNet이다.

① Separable Convolution

 보통의 Convolution이 입력 특징맵의 공간 방향과 채널 방향에 대해 동시에 Convolution을 실시하는 것에 대해, separable Convolution은 공간 방향과 채널 방향이 각각 독자적으로 Convolution을 실행하는 것이다. 이것은 Convolution이 이러한 방향으로 어느 정도 분리할 수 있다는 가설에 근거한다. 공간방향의 Convolution은 depthwise Convolution, 채널 방향의 Convolution은 pointwise Convolution이라고 불린다. 아래의 그림은 separable Convolution의 각 처리에 대한 것이다.

 Depthwise Convolution은 특징맵의 채널마다에 각각 독립적으로 공간 방향의 Convolution 처리한다. Pointwise Convolution은 이 기사에도 몇 번 등장하였다. 1x1의 Convolution을 의미한다. 입력 특징 맵의 사이즈가 HxWxN, 출력 채널수가 M의 경우, 보통의 KxK Convolution의 계산량은 O(HWNKKM)이 된다. 한편, depthwise Convolution의 계산량은 O(HWNKK), pointwise Convolution의 계산량은 O(HWNM)이 된다. 즉, 보통의 Convolution을 separable Convolution(depthwise Convolution + pointwise Convolution)을 바꾼 것으로 계산량이 O(HWNKKM)에서 O(HWNKK+HWNM)으로 감소된다. 비율은 1/K제곱+1/M이 되어있으며, 보통 M >> K제곱 (예 K=3, M=64)에서 계산량이 1/K제곱정도로 감소된다.

② Xception모듈

 Xception에 이용된 모듈은 아래와 같다.

relu - sep - bn - relu - sep - bn - relu - sep - bn - add

 여기서 sep은 separable Convolution을 이야기하는 것이다. 전체의 설계로는 네트워크의 입출력에 가까운 곳 이외에 위와 같은 Xception모듈을 이용해, s = 2, z=3의 max pooling에 의한 특징 맵을 축소하면서, 그 타이밍에 채널 수를 증가시키는 방침을 취하고 있다.

 Xception은 위에서 언급했던 것처럼 보통의 Convolution보다도 계산량 및 파라미터 수가 작은 separable Convolution을 이용하는 만큼 모델의 깊이나 폭을 크게 하는 것이 가능하여, 결과적으로 ResNet이나 Inception-v3보다 더 정확한 인식을 실현하고 있다.

 참고로, 아래의 그림은 보통의 Convolution, depthwise Convolution, pointwise Convolution 각각의 파라미터 수의 이미지이다.


3) 독립 매크로 구조의 이용

 Residual 모듈의 개선이나 독립 모듈의 이용에서는 특정 모듈을 순서대로 쌓는 매크로 아키텍쳐와 같다. 한편, 이런 매크로 아키텍처에 대해서도 독자적인 제안을 하는 논문이 존재한다.

(1) RoR

 Residual Networks of Residual Network(RoR)는 복수의 residual 모듈간에 쇼트 커트를 더욱 추가하여, ResNet을 더욱 최적화하기 쉬운 모델이다. 쇼트 커트는 계층적으로 구성하는 것을 제안하여 실험적으로 3계층까지의 쇼트 커트가 효과적이라는 것을 밝혔다. (1계층은 보통의 ResNet) RoR은 기반 네트워크로써, ResNet, pre-act의 ResNet, WideResNet을 비교하여, WideResNet을 기반으로하여 뒤에서 설명할 Stochastic Depth와 RoR를 합친 경우에 최고 좋은 인식 정확도를 얻었다고 밝혔다. 또한, Stochastic Depth를 도입하지 않는 경우에 역으로 정확도가 낮아진다는 사실을 밝히고 있다.

(2) FractaINet

 FractalNet은 아래처럼 재귀적으로 정의된 fractal 블록을 이용하여, ResNet과 같은 쇼트 커트를 이용하지 않고 깊은 네트워크를 학습하는 것이 가능한 모델이다.

 여기서 ⊕는 복수의 path를 통합하는 처리로, 51번의 참고문헌에서는 요소마다의 평균값을 취하는 것으로 정의되어 있다. 위의 처리 블록을, 사이에 s= 2, z=2의 max pooling을 끼워 겹쳐서 FractalNet을 구성하였다. 블록 수가 B인FractalNet의 층 수는 B곱하기 2의 C-1승이 된다. FractalNet의 학습에서의 특징은 출력층까지 보존된 다수의 Path를 dropout과 같이 확률적으로 drop한다는 것이다. Drop의 종류로써, local과 global이라는 두 가지 종류가 제안됐다.

- Local : Path를 총합하는 층에서 입력 Path를 랜덤으로 drop한다. 그러나 최저 1개의 Path는 남겨둔다.

- Global : 출력층에 이르는 동일한 라인에 정의된 Path를 하나만 이용한다.

 위에서 언급한 Path를 drop하는 처리를 통해 네트워크의 정규화가 이루어지고 ResNet보다도 정확한 인식을 실현하였다. 그러나 WideResNet이나 DenseNet에 대해서는 정밀도가 떨어져 있다.

(3) DenseNet

 Dense Convolution Network(DenseNet)은 네트워크의 각 레이어가 밀접히 결합하고 있는 구성을 가진 것이 특징인 모델로, Dense블록을 Transition layer로 열결한 구조이다. 

(4) Dense Block

 ResNet에서는 l번째의 residual모듈의 출력은 

...내부의 처리 블록의 출력

... 쇼트커트

이 둘을 합한 것이다. 식으로 표현하자면 아래와 같다.

 이에 대해, DensNet는 그 내부에서는 어떤 레이어보다 전(前)의 레이어의 출력 모두를 연결한 특징 맵을 그 레이어에 입력하는 Dense블록을 이용한다. Dense블록 내에서 l번째 레이어의 출력은 아래의 식으로 정의돼있다.

 여기서, Dense블록에의 입력의 채널 수를 K0, 각 레이어의 출력을 Fl(·)의 채널 수를 k로 한다면, l번째의 레이어의 입력 채널수를 k0+k(l-1)이 된다. 이렇듯, 입력채널수가 k씩 증가하므로, k는 네트워크의 성장률 파라미터라고 불린다. 또한, 각 레이어의 처리 Fl은 bn-relu-conv 3x3에 의해 구성된다. 아래의 그림은 레이어 수가 4의 Dense블록은 예이다.

(5) Bottleneck버전

 DenseNet에서는 각 레이어의 출력 채널 수 k가 작은 값이지만, 입력 채널 수가 매우 크게 되기 때문에, 계산량을 감소시키기 위해서 ResNet에 이용되고 있는 입력 채널 수 압축하기 위한 bottleneck구성을 이용한다. 구체적으로는 각 레이어의 처리 Fl을 아래와 같이 구성한다.

bn - relu - conv 1x1 - bn - relu - conv 3x3

 논문에서는 conv 1x1의 출력 채널수가 4k로 설정되어 있다.

(6) Transition레이어

 DenseNet은 위의 Dense블록을 복수로 겹쳐서 구성되어 있으며, 각 Dense블록은 transition층에 의해 연결된다. Transition레이어는 bn-conv 1x1 -avepool 2x2로 구성되어 있다. 이러한 transition 레이어는 보통 입력 채널수와 출력채널수를 동일하게 되지만, θ(0,1)에 의한 정의된 압축률만큼 출력 채널 수를 감소하는 것도 제안되어 있으며, θ=0.5가 이용된다. 평가 실험에서는 bottleneck을 이용하는 한편 trasition 레이어에서 압축을 하여, k 및 층수가 커졌던 버전의 인식 정확도가 높아졌다. 

 53번의 참고문헌에서는 DenseNet을 복수의 스케일의 특징맵을 가진 것처럼 확장하고 나아가  네트워크 중간에 결과를 출력하여 샘플의 난이도에 의해 처리시간을 가변하는 Multi-Scale DenseNet(MSDNet)이 제안되어 있다.


4) 정규화

 DNN에 있어서 어떻게든 과학습을 피하고 범화된 모델을 학습하는 것을 중시하므로, 모델에 대해서 dropout이나 weight decay등이, 학습 데이터 및 테스트 데이터에 대해서는 랜덤 클로핑이나 좌우반전 등의 데이터 확장 등을 정규화를 위해 이용될 수 있다. 최근 이러한 정규화에 대한 간단하고 효과적인 방법들이 제안되어 있다.

(1) Stochastic Depth

 Stochastic Depth는 ResNet에 있어서 훈련할 때에 residual 모듈을 랜덤으로 drop하는 구성을 가진 모델이다.

 위 그림은 Stochastic Depth에 있어서 l번째의 residual 모듈의 구성을 표시한 것이다. 여기서 bl은 확률 pl에서 1을, 확률 1-pl에서 0를 얻는 Bernoulli 변수이다.  pl은 l번째의 residual모듈이 drop되지 않고 살아남을 확률(생존확률)로, 네트워크의 출력층에 가까울 수록 작은 값을 값도록 설계되어, 아래의 식과같이 정의 되어 있다.

(L은 residual 모듈의 수) 이는 훈련시의 '초기값으로 볼 때의 깊이'가 얕아지고, 학습에 필요한 시간이 단축됨과 동시에 dropout과 같은 정규화 효과가 실현된다. 또한, 테스트시에는, 각가의 residual 모듈

(2) Swapout

 Swapout는 ResNet의 dropout을 확장한 정규화방법이다. ResNet의 residual모듈에서는 입력을 x, residual모듈내에서의 처리의 출력을 F(x)으로 한다면 H(x) = F(x)+x를 다음 층에 출력한다. 이것에 대해서, Swapout에서는 입력의 쇼트 커트 x및 F(x)에 개별적으로 dropout를 적용한다.

 정확히는 H(x)가 아래와 같이 정의되어 있다:

 여기서 Θ1및Θ2는 각 요소가 독립적으로 생성된 Bernoulli 변수로구성되어 있으며, 출력 Tensor과 동일 사이즈의 Tensor이다. ⊙는 Hadamard 곱이다. 55번의 참고문헌에서는 stochastic depth와 마찬가지로, drop률을 입력층에서 출력층까지 0부터 0.5까지 선형적으로 증가시키는 경우에 정밀도가 높아진다고 설명하고 있다. 

 추론시에는 dropout과 달리, 명시적으로 각 층의 출력을 기대값을 바꿀 수 없기 때문에 테스트 데이터에 대해 swapout를 사용하면서 여러번 forward하고, 그것으로붙 평균값을 추론결과로 하는 형태로 하지 않으면 정확하지 않다는 것이 특징이다.

(3) Shake-Shake Regularization

 Shake-Shake는 ResNet을 베이스로 네트워크의 중간의 특징 맵에 대해 data augmentation을 하는 것으로 강력한 정규화를 실현한 방법이다.

 위 그림은 Shake-Shake에서 이용된 l번째의 residual 모듈의 구성을 표시한 것이다. Shake-Shake에서는 residual 모듈내의 Convolution을 2개로 분기시켜, forward할 때는 그 출력을 균일 난수 αl[0,1]로 혼합한다. 그러면, 이미지를 대상으로한 data augmentation에 랜덤 크로핑이 실시하는 것으로 그 이미지내에 포함되어 있는 물체의 비율이 변동해도 견고한 인식이 가능하도록 학습이 가능해졌다. Shake-Shake에서는 특징 레벨에 있어서도 각 특징의 비율이 변동해도 견고한 인식이 가능하도록 하고 있다고 해석할 수 있다.

 backwar시에는 forwar시의 난수 al과 다른 균일난수βl[0,1]를 이용하는 점 특징이다. 이것은 기울기에 노이즈를 더해서 정확도를 향상하는  [^Neelakantan_iclrw16]처럼, forward시에는 다른 난수를 이용하는 것으로, 더욱 강력한 정규화의 효과를 얻을 수 있다고 생각된다. 추론시에는 난수의 초기값인 0.5를 고정하여 이용한다.

 위에서 언급한 al과 bl에 있어서, 복수의 패턴의 구성하여 포괄적으로 검증한 결과, 어느쪽이든 독립한 난수로하는 형태가 좋다는 결론에 다다랐다. 또한, 배치 단위로 위의 난수를 동일한 것으로 사용하거나, 이미지 단위로 독립적으로 결정할지에 대해서도, 이미지 단위로 독립적으로 정하는 쪽이 좋다고 실험적으로 증명됐다. 이렇듯, forward/backward시의 외란(노이즈)에 의해  강력한 정규화의 효과와 매우 높은 정확한 인식률이 가능해졌다.

 Shake-Shake의 학습에 특징적인 것은 학습률의 감쇠를 cosine함수로 제약하여 보통 300 에포크에 걸쳐 학습하는 부분은 1800에포크에 걸쳐 학습하는 부분이라고 할 수 있다. 이것은 Shake-Shake의 효과로 유사한 학습 데이터가 매우 대량으로 있는 상황이 되므로 장기간의 학습이 유효하기 때문이라고 생각된다.

(4) ShakeDrop

ShakeDrop은 Stochastic Depth에 있어 층을 drop하는 것 대신, forward/backward시에 Shake-Shake와 같은 노이즈를 추가하는 방법이다.

 위 이미지는 ShakeDrop에서 이용되는 l번째의 resifual모듈의 구성이다. 여기서 bl은 확률 p1에서 1을 1-p1이 0이 되는  Bernoulli 변수이다. Stochastic Depth와 같이 pl은 네트워크의 출력층에 가까울 수록 큰 값을 가지며 pl=1-1/2L로 정의되어 있다.(L은 residual 모듈의 수)

 al와 bl은 Shake-Shake와 같이, forward/backward시에 출력을 스케일링하는 난수이다. 테스시에는 forward시의 스케일링bl+(1-bl)a1의 초기값을 이용해 출력의 교정을 실시한다. ShakeDrop에 있어서, pl=1 (항상 drop하지 않는다) 이라고 한다면 보통의 residual모듈과 같아지고, pl=0(항상 drop한다)이라고 한다면 Shake-Shake와 같도록 전부의 출력에 대해 노이즈를 추가한 residual모듈이 된다. 또한, al=0과 bl=0으로한다면, Stochastic Depth와 같은 모듈이 된다.

 al과 Bl이 취할 수 있는 범위는 여러 후보에서 정밀도가 높은 αl[1,1]과βl[0,1]이 채용되어 있다. al과 bl을 어떤 단위로 변화되고 있는가에 대해, Shake-Shake에서는 배치 단위와 이미지 단위로 비교가 이루어지고 있지만, 본논문에서는 더욱이 채널 단위와 이미지 화소 단위도 비교하고 있으며, 채널 단위에의 정확도가 높다고 말한다.

 ShakeDrop은, Shake-Shake와 비교하여, 두 개로 분기되어 있는 Convolution을 하나로 한 구성과 같은 정규화를 실현하고 있다는 점이 뛰어나다고 할 수 있다. 이것에 대해, 파라미터 수를 감소할 수 있기 때문에, 상당히 모델을 깊이 구성하는 것이 가능해져, 사실상의 표준으로써 PyramidNet을 이용해, 후술할 random erasing과 결합하여 이 기사의 집필 시점(2017년 12월) CIFAR 10/100에서 가장 낮은 오류율을 달성하고 있다.

(5) Cutout / Random Erasing

 Cutout및 Random Erasing은 모델의 정규화를 목적으로한 data augmentation의 방법이다. 똑같이 정규화를 목적으로한 dropout은 전결합층에서 효과가 있는 한편, Convolution층에 대해서는 원래의 파라미터의 수를 줄어 들게 하므로 효과가 제한됐다. 또한, CNN의 입력한 이미지가 대상인 경우, 밀접 화소에 상관 관계가 있어, 랜덤으로 drop해도 그 주변의 픽셀 보간되어 버리기 때문에 정규화의 효과가 한정됐다. 이것에 대해 Cutout/Random Erasing에서는 입력 이미지의 랜덤한 부분을 마스크를 씌우는 것으로 보다 강력한 정규화 효과를 실현하고 있다.

 Cutout에서는 마스크의 형태보다도 사이즈가 중요한 요소라고 주장되어, 마스크의 형태가 사이즈가 고정된 단순한 정방형을 채용하였고, 이 마스크 영역은 평균 화소에 치환되는 처리를 한다. 

 Random Erasing에서는, 각 이미지에 대해 마스크를 사용할 것인지, 마스크 영역의 사이즈, 화면 비율, 장소를 랜덤으로 정하여, 마스크 영역의 화소값을 픽셀 레벨로 랜덤한 값을 치환하는 처리를 한다. 단순한 방법이지만, 이미지 분류 업무뿐만 아니라 물체 조합 업무에도 효과가 있다고 확인됐다. 아래의 그림은 Random Erasing을 실시한 화면의 예이다.

(6) mixup

 mixup은 2가지의 훈련 샘플의 짝을 혼합하여 새로운 훈련 샘플을 만드는 data augmentation방법이다. 구체적으로는 데이터와 라벨의 짝(X1,y1),(X2,y2) 으로 부터 아래의 식을 이용해 새로운 훈련 샘플 (X,y)를 만든다.

 여기서, 라벨 y1, y2는 one-hot표현의 벡터로, X1, X2는 임의의 벡터이나 Tensor로 표현된 학습 데이터이다. 또한  λ[0,1]는 베타 분포Be(α,α)에서의 샘플링에 의해 취득되며,a는 하이퍼 파라미터이다. 데이터 X1, X2뿐만 아니라, 라벨 y1, y2도 혼합하는 것이 특징적이며 이미지 인식에 있어서도 효과가 있음이 주장됐다. 아래의 그림은 CIFAR10데이터 세트에 대한 mixup을 실시한 이미지예이다.


5) 고속화를 의식한 구조

 구성 디바이스나 스마트 폰등에서는 계산자원이 윤택하지 안은 환경이므로, 고속으로 동작하는 모델이 중요하게 되었다. 이러한 고속화를 의식한 구조도 제안되어있다. 

(1) SqueezeNet

 SqueezeNet은 1x1 Convolution을 활용하여 파라미터와 계산량을 감소시키는 fire모듈을 겹치는 것으로 구성된 경량적인 모델이다. 아래는 fire모듈의 구성을 표시한 것이다. 

 Fire모듈뿐에서는 먼저 residual모듈의 bottleneck버전이나, Inception모듈로 squeeze 레이어의 1x1 Convolution에 의해 입력특징맵의 차원을 감소시킨다. 그 이후 expand레이어의 3x3의 Convolution에 의한 특징추출을 실시하면서 차원의 복원을 하지만, 그 일부를 1x1 Convolution로 치환한다. 이것은 Inception모듈처럼, 명시적으로 spares한 Convolution을 실행하는 것으로 파라미터 수를 감소하는 효과가 있다. 62번 참고문헌에서는 입력 채널수와 squeeze 레이어의 출력 채널수 s1x1의 비 및 expand레이어의 1x1 Convolution의 출력 채널 수 e1x1과 3x3 Convolution의 출력 채널수 e3x3의 비를 조정하는 것으로 정확도가 낮아지는 것을 방지하면서 파라미터의 수를 대폭 감소할 수 있다고 말하고 있다. 

(2) MobileNet

 MobileNet은 Xception과 동일하게 separable Convolution을 많이 이용하는 것으로, 계산량을 감소시킨 가벼운 모델이다. 구체적으로는 아래의 처리 블록을 stride가 2의 Convolution에 의해 특징 맵을 감소시키면서, 채널수를 2배로 증가시키켜가는 것을 겹겹히 쌓은 모델이다. 

dw - bn - relu - pw - bn - relu

 여기서 dw는 depthwise Convolution, pw는 pointwise Convolution을 의미한다. Xception과 크게 다른 점은 ResNet처럼 쇼트 커트를 이용하지 않는 것과 depthwise Convolution과 pointwise Conbvolution사이에 batch normalization과 ReLU를 이용하고 있다는 점이다. 특히 후자에 대해서는 48번 참고문헌에서 batch normalization과 ReLU를 이용하지 않는 것이 정밀도가 더 높다고 말하고 있으며, 전체적으로 모델 구조에 따라 국소적 모듈의 최적의 구성이 다르다는 점이 시사되고 있다. MobileNet에서는, 채널수를 제어하는 파라미터 α(0,1)과 입력 이미지 사이지를 제어하는 파라미터 ρ(0,1)를 도입해, 동일한 모델 구조로 지금까지의 하이퍼 파라미터에 의해 정확도와 처리 고속의 트레이드 오프를 간단히 조정하는 것이 가능하다.


6) 구조의 자동 설계

 지금까지 설명해 온 모델은 전체 사람이 의해 모델 구조 디자인이 실행됐다. 이것에 대해 자동적으로 모델 구조를 설계하는 시도가 존재한다. 

 예를 들면 참고문헌 64번과 67번에서는 네트워크를 구성하는 레이어의 파라미터를 출력하는 Recurrent Neural Networks(RNN)을 구축해 이 RNN을 REINFORCE알고리즘으로 학습시키는 것을 제안하고 있다. 67번 논문에서는 이러한 RNN을 500 GPU로 학습해, 전에 설명한 Xception이나 SENet 최신의 구조과 같은 동등한 정확도를 더 적은 파라미터로 달성했다.

 주목할 점은 64번 논문에서는 전체 구조나 각각의 구성요소에 대해 커다란 제약이 없다는 것이며, 67번 논문에서는 아래의 그림처러 전체 구조 및 구성요소가 한정되어 있다는 점이다. 이것은 인간의 구성한 모델보다 효율적인 성능을 상회하기 위해서는 아직 인간의 노하우가 필요하다는 것을 시사한다. 

 구체적으로 67번 논문에서는 ImageNet데이터세트에 대해서는 아래와 같은 전체 구조를 가진 구조를 설정한다. 여기서 normal cell은 residual모듈과 같은 특징 추출을 실행하는 모듈이며, reduction cell은 다운 샘플링 및 특징 추출을 실시하는 모듈이다. 

 위 그림에서 알 수 있듯, 전단계의 다운 샘플링을 여러번 실시하는 것으로 특징 맵을 감소시키고, 그 이후 특징 추출을 실시한 모듈을 여러번 겹친 후 다운 샘플링을  실시하는 것을 더 여러 번하는 구성이므로, 기존의 구조의 설계 사상을 그대로 구체화시킨 것이라고 말할 수 있다.

 또한, 자동설계된 normal cell 및 reduction cell에 대해서도, 이용가능한 구성요소가 아래와 같이 한정되어 있으며, conv 3x3과 같은 일반적인 구성요소가 separable Convolution과 같은 파라미터 수가 적은 요소만을 이용하여 검색의 효율화를 하고 있다고 말할 수 있다.

  • identity
  • 1x3 then 3x1 convolution
  • 1x7 then 7x1 convolution
  • 3x3 dilated convolution
  • 3x3 average pooling
  • 3x3 max pooling
  • 5x5 max pooling
  • 7x7 max pooling
  • 1x1 convolution
  • 3x3 convolution
  • 3x3 depthwise-separable conv
  • 5x5 depthwise-seperable conv
  • 7x7 depthwise-separable conv

아래의 그림에서 실제로 학습으로 얻어지는 normal cell및 reduction cell의 구조를 나타낸다. 확실히 파마리머터 수가 적은 separable Convolution이 우선적으로 선정되었으며, 정확도와 파라미터 수의 트레이드 오프 시점에서 separable Convolution이 우수한 것을 알 수 있다. 한편, separable Convolution은 GPU환경에서 기대한 만큼 속도가 나오지 않는 것도 있기 때문에 실제의 속도도 검증해야한다.


12. 마무리

 본 포스팅에서는 뉴럴 네트워크 중에서도 특히 현저한 발전을 보인 Convolution 뉴럴 네트워크(CNN)에 대해 이미지 인식 대회 ILSVRC에서 우수한 성적을 거둔 모듈를 통해 CNN의 변천을 살펴보았다. 또한, 최근에 제안된 다양한 CNN의 개선 방법에 대해서 조사하여 각 방법의 접근 방법에서부터 분류하여 각각에 대해 분류하였다.

 ResNet이 하나의 커다란 돌파구이며, 그 이후의 모델은 거의 ResNet의 개선이라고 말할 수 있으며, DenseNet이외에는 전체가 독자적인 구조의 성공예는 없다. Residual모듈의 개선 시점에서 거의 모든 방법이 차원 감소와 sparse한 Convolution을 합친 것으로 정확도와 파라미터 수의 트레이드 오프를 개선한 접근방법이라고 말할 수 있다. 즉, Convolution의 파라미터를 감소시킨 만큼의 깊이나 폭을 크게하는 것을 하는 것으로 정밀도를 향상시킨 것이다. 

 데이터 및 모델 내의 정규화는, 다른 방법과 조합되어 효과가 크길 기대할 수 있지만, 왜 개선되는지 알 수 없는 점도 많으며 이후의 논리적인 설명이 기대된다.

 인간이 고안한 구조를 웃도는 정확도를 달성하는 네트워크의 자동 설계도 실현되었지만, 이용되는 전결합구조나 구성요소는 계속해서 인간이 고안할 수 밖에 없다. 예를 들면 ResNet의 쇼트 커트와 같은 구성요소가 자동적으로 발견되는 것과 같은 구성은 아직 존재하지 않는다.


참고자료

https://qiita.com/yu4u/items/7e93c454c9410c4b5427

 

 

 

 

728x90