본문 바로가기

딥러닝 & 머신러닝/프로젝트

머신러닝 수업 프로젝트 (2) : 관련 연구 - 모델

2. 관련 연구

 

A. DenseNet

Figure 1. Dense Block
Figure 2. Residual Block

DenseNet은 Figure 1의 Dense Block을 중심으로 설계된 모델입니다. Dense Block은 1x1 Convolution 연산과 3x3 Convolution 연산을 하는 layer로 구성되어 있으며, ResNet의 Residual Block(Figure 2)과 비슷하지만 다릅니다. Residual Block은 바로 직전 층에 주입된 값(x)을 직전 층을 통과한 값 (F(x))에 더하는데, Dense Block은 거쳐왔던 모든 층들에 주입된 값들을 쌓아서 다음 레이어에 전달합니다.

 

DenseNet은 서로 다른 모든 층에서 특징, 즉 feature map을 반영하기 때문에 layer 사이사이에 가치 있는 정보가 충분히 지나다닐 수 있도록 합니다. 다른 모델들은 시작 지점의 정보가 깊은 층을 지나면서 정보가 소실되기 마련이며, ResNet은 skip connection을 이용해 어느 정도 극복하긴 했습니다.

 

그러나 DenseNet은 아예 처음부터 시작 지점의 정보를 쌓아나가면서 진행됩니다. 이는 역전파를 할 때도 정보를 다시 앞쪽으로 효율적으로 전달한다는 뜻입니다. 결국, 마지막의 Fully Connected Layer는 그동안 layer들을 지나온 모든 데이터의 feature map을 근거로 데이터들의 클래스를 분류할 수 있습니다.

 

B. Xception

 

Figure 3. Inception Module
Figure 4.  Extreme Inception Module

Xception은 기존 Inception 모듈에 Depthwise Seperable Convolution과 유사한 연산을 적용한 모델입니다. 기존 Inception 모듈을 활용한 모델들은 Figure 3처럼 1x1 Convolution 연산을 활용해 채널 연산을 하고, 3x3 Convolution 연산을 통해 공간 연산을 합니다.

 

Xception은 Figure 3의 Inception 모듈을 Figure 4처럼 extreme 버전인 Xception 모듈로 바꾸어 사용하고자 합니다. 즉, 1x1 Convolution 연산을 통과한 feature map의 채널 수만큼 3x3 Convolution 연산 필터를 배치하여 완전히 채널 연산과 공간 연산을 분리하고자 하였습니다. 다시 말하면, output feature map이 각각 채널별로 분리된 상태에서 3x3 Convolution과 같은 공간 연산을 수행하도록 했습니다.

 

Figure 5. Depthwise Seperable Convolution

Xception 모듈은 Figure 5의 Depthwise Seperable Convolution 연산과 유사한 점이 있지만 조금 다릅니다. 둘 다 채널과 공간 연산을 완전히 분리하고자 하지만, Xception 모듈은 Figure 4와 같이 1x1 Convolution 연산이 먼저 오고 3x3 Convolution 연산이 뒤따라옵니다. 반면 Depthwise separable convolution은 Figure 5에서 볼 수 있듯이, 공간 연산인 nxn Convolution 연산이 먼저 오고 채널 연산인 1x1 Convolution 연산이 뒤따라옵니다.

 

C. PyramidNet

Figure 6.  Pyramidal Block and Pyramidal Bottleneck

PyramidNet은 ResNet 을 기반으로 성능을 개선한 모델입니다. 일반적으로 ResNet 구조의 모델들은 feature map의 크기가 2배 감소하는, 즉 down sampling이 되는 순간 feature map의 개수는 2배 증가하는 구조로 설계됐습니다. 한편 이 down sampling + doubled feature map 현상이 모델의 전체 성능에 관여하는 비중이 크다는 실험 결과가 존재합니다. [20]

 

이에 착안하여, PyramidNet은 Figure 6의 Pyramidal Block과 Pyramidal Bottleneck을 활용해 모든 layer에서 feature map의 수가 변하도록 합니다. 이를 통해 특정 layer에서만 이루어지던 feature map의 개수가 늘어나는 과정을 전체 layer에서도 이루어지도록 하는 구조를 제시합니다.

 

Figure 7.  PyramidNet

feature map의 개수를 늘려주는 방법은 Figure 7의 (a)와 같이 linear하게 늘려주는 additive 방식과 (b)처럼 exponential 하게 늘려주는 multiplicative 방식이 있습니다. 해당 논문에선 성능이 더 좋았던 additive 방식을 사용했습니다. additive 방식이 multiplicative 방식보다 초기 layer의 feature map 개수가 더 많기 때문이라고 설명합니다. Figure 7의 (c)는 두 방식의 차이점을 보여줍니다.

 

additive 방식은 위의 식 (1)에 따라 feature map의 개수 D_k를 늘려갑니다. 이때 N은 Pyramidal Block과 Pyramidal Bottleneck이 들어간 Residual Unit의 총 개수를 의미하며, N은 i가 2부터 4일 때 N_i의 총합으로 정의됩니다. 전체 layer를 지나는 동안 얼마나 feature map의 개수를 늘릴지 설정하는 파라미터인 α가 결정되면, 이전 feature map에 비해서 α/N 만큼 feature map의 수가 늘어납니다.