본문 바로가기
  • Deep dive into Learning
  • Deep dive into Optimization
  • Deep dive into Deep Learning
Deep dive into Deep learning

Deep dive into Deep learning part 14. CNN(2) - Updated

by Sapiens_Nam 2023. 4. 27.

 

"모바일 앱 환경에서는 latex 수식이 깨져 나타나므로, 가급적 웹 환경에서 봐주시길 바랍니다."

 

 

오늘은 CNN 2번째 글이다.

오늘은 GoogleNet, VGG에 대해 이야기하고, 다음 글에서는 ResNet, DenseNet에 대해 이야기하고 CNN 시리즈를 마무리할 예정이다.

 

<VGG>

 

VGG는 2014년 옥스퍼드 대학교의 연구팀에서 제안한 신경망 구조이다.그 구조는 AlexNet, LeNet 등과 큰 차이가 없지만, 신경망의 층수를 더 많이 쌓은 '깊은' 신경망이다.가장 기본적인 구조는 VGG16인데 이는 16개의 층으로 이루어져 있다.구체적으로 Convolution layer 13개, Fully connected layer 3개로 이루어져 있고, VGG의 가장 큰 특징은 모든 층의 하이퍼파라미터를 동일하게 설정했다는 것이다.

 

* 모든 Convolution layer는 $3 \times 3$ 크기의 Filter와 스트라이드 $1$, 패딩 $1$이 적용되었다.

* 모든 Pooling layer는 $2 \times 2$ 크기의 풀링 영역과 스트라이드 2가 적용되었다.

 

여기서 AlexNet은 $11 \times 11, 5 \times 5$의 Filter를 적용하였는데, VGG는 필터 크기가 많이 줄어듦을 볼 수 있다.그 이유는 보다 더욱 세밀한 특징 (Feature/Pattern)을 적용하기 위함인데, 크기가 큰 하나의 Filter보다 크기가 작은 여러 개의 Filter를 쌓는 것이 계산량은 유사하지만 (또는 더 낮은 계산량) 더 성능이 높음이 알려져 있다.

 

VGG의 구조는 다음과 같다.

https://neurohive.io/en/popular-networks/vgg16/

 

 

<GoogleNet>

 

먼저 GoogleNet 모델을 알기 위해서는 본 모델의 가장 핵심적인 뼈대인 'Inception'에 대해 알아야 한다.

이 구조는 구글에서 'Going Deeper with Convolution'이라는 CVPR 2014 논문에서 발표되었으며, 계산량의 효율성을 살리면서 신경망을 더 깊게 쌓는 효과를 내기 위한 구조이다.

 

GoogleNet은 22개의 층으로 쌓여 있어, 앞선 VGG보다 더 깊은 층을 갖고 있으나, 파라미터의 수는 더 적기에 더 적은 계산량으로 VGG보다 우수한 성능을 보여주었다.

 

"Inception Module"

CNN을 설계하는 데 있어서 사람이 직접 결정해야 하는, 즉 하이퍼파라미터가 여러 가지가 있다.

가장 대표적으로 Convolution layer의 Filter size, Pooling layer의 배치이다.

 

앞서 LeNet, AlexNet, VGG 모두 Filter size가 제각각이었다. 각 층마다 이러한 Filter size를 최적의 크기로 결정하는 것은 시간과 비용이 많이 드는 작업이면서 성능에 직접적 영향을 미치는 작업이었고 GoogleNet은 이 Filter size를 층마다 직접 실험적으로 최적의 크기를 찾아나가는 대신 다양한 Filter size를 모두 사용한 Inception module을 활용하여 다양한 Feature를 모두 추출할 수 있도록 하였다.

Inception module, https://gaussian37.github.io/dl-concept-inception/

 

입력으로 들어온 이전 층의 출력 특징이 4개의 층에 동시에 입력으로 집어넣는 것이다.

$1 \times 1$ convolution은 입력의 깊이를 축소시키면서 Height/Width, 입력의 크기는 그대로 유지하는 효과를 갖고 있는데 이를 통해서 계산량을 대폭 줄일 수 있다.

(Filter의 개수가 출력의 채널 수, 즉 깊이를 결정짓는다. 이는 앞선 글에서 이야기하였으므로 넘어가겠다.)

 

이렇게 $1 \times 1$ convolution을 거친 후, $3 \times 3$, $5 \times 5$ convoltion을 통해 이미지의 특징을 추출해내는 연산을 수행하는 것이다.

 

1 * 1 Filter의 역할

 

위 그림을 보면 $28 \times 28$의 Image의 depth가 192이다. 

이 이미지에 $1 \times 1 \times 192$ Filter를 16개를 활용해 연산을 수행하자 크기는 동일하게 나오면서 depth가 16으로 줄어들었음을 볼 수 있다.

 

논문에서 이러한 $1 \times 1$ convolution을 통해서 depth를 줄였으나, 이것이 성능 차이에 큰 영향을 미치지 않음을 보여주었고, 이를 통해서 GoogleNet은 계산량을 대폭 감소시켰다.

 

이러한 Inception Module을 통해서 GoogleNet을 설계하였고 그 구조는 다음과 같다.

GoogleNet

 

구조가 복잡해 보이지만 결국 여러 개의 Inception module을 층층이 쌓아나간것이 전부임을 알 수 있다.

 

(왼쪽이 Input layer이고 오른쪽이 output layer이다.)

 

처음에는 AlexNet, LeNet 처럼 Convolution layer, (Max) Pooling layer등을 번갈아 배치한 구조이고,이후에 9개의 Inception module을 쌓았으며, 이들 사이에 $3 \times 3$ pooling layer를 끼워넣었다.

마지막으로 Fully connected layer를 통해 앞선 층에서 추출된 특징/학습된 특징들을 통해 이미지를 분류하는 작업을 수행한다.

 

이 모델은 2014년 이미지넷 분류 대회 (ILSVRC)에서 우승을 차지했으며 top-5 오차율은 6.67%, 기존의 AlexNet, VGG 보다 적은 계산량으로 우수한 성능을 보였다.

 

 

이처럼 AlexNet 이후에는 최대한 효율적으로 신경망을 더 깊게 쌓는 것으로 계속해서 발전 방향이 진행되어져 왔다.

(그리고 이러한 발전 방향은 지금도 여전히 동일하다. 신경망의 크기를 더 크게, 더 깊게, 데이터 셋의 크기를 더 크게, 진행시키는 것이 현재 딥러닝의 큰 흐름이다.)

하지만, 여기서 큰 문제점이 발생하는 데 Input layer에 가까운 층들의 parameter는 잘 학습이 진행되지 않는 'gradient vanishing problem'이다.

이 문제가 왜 생기며 이를 보완하기 위해 ResNet에서는 어떤 방법을 사용하였는지, 다음 글에서 이야기하도록 하겠다.

728x90

댓글