10-4. 레고처럼 네트워크 모듈을 마음껏 쌓아 보자

2020. 6. 19. 22:00AI/모두를 위한 딥러닝

이 포스트는 모두를 위한 딥러닝 - Tensor Flow를 정리한 내용을 담았습니다.
누구나 이해할 수 있는 수준으로 설명하고자 하였으며 LAB의 코드는 TF2.0에 맞추어 재작성되었습니다.

 

이제 우리는 이전 포스트들을 공부하며 뉴럴 네트워크(NN)에서 하나의 Unit(perceptron)을 만드는 방법과 네트워크 동작 원리에 대해 어느 정도 알고 있을 것입니다. 이번 포스트는 딥러닝의 기초를 마무리하는 단계로, 뉴럴 네트워크 모듈의 모양에 대해 알아보겠습니다. 먼저 우리는 뉴럴 네트워크의 Layer가 Input/Hidden/Output Layer로 분리되어 있다는 것을 알고 있습니다. 이제 우리는 퍼셉트론과 그 상위 단계인 Layer를 구성하여 뉴럴 네트워크를 레고 쌓듯이 마음껏 만들어볼 수 있으며 이러한 방식을 Feedforward neural network라고 부릅니다. 중요한 것은 상상력으로, 이번 포스트에서는 이미 유명한 몇 가지 뉴럴 네트워크들을 소개하겠습니다.

그림 1.1. Fast forward

첫 번째는 Fast forward입니다. weight를 초기화하는 방법 중 Xavier_init를 개선한 He's_init를 만든 He가 고안해낸 뉴럴 네트워크로, 앞쪽으로 이동할 때 하나의 레이어가 아닌 2개의 레이어 혹은 여러 개의 레이어씩 이동하는 방법으로 직전 포스트에서 배운 Dropout처럼 난수를 사용하여 다양한 결과를 통합하는 듯한 느낌을 주고 있습니다. ImageNet에 3% 이하의 에러를 보인 네트워크로 전체적으로 균형잡힌 결과를 얻을 수 있습니다.

 

Layer를 구축할 때 꼭 위의 Fast forward네트워크처럼 한 줄로 늘어놔야만 할까요? 중간에 잠시 나누었다가(split) 다시 합쳐(merge)지는 것은 어떨까요? 이러한 생각으로 만든 네트워크 구조가 유명한 CNN(합성곱 신경망)입니다. 먼저 아래의 구조를 보겠습니다.

그림 2.1. CNN(Convolutional Nerual Network, 합성곱 신경망)

CNN(Convolutional Neural Network, 합성곱 신경망)은 주로 이미지 인식에 사용되는 딥 뉴럴 네트워크입니다. 고양이가 보는 것마다 자극 받는 뇌의 위치가 다른 것을 보고 이에 아이디어를 얻은 것으로, 전체를 한번에 보는 것이 아니라 부분을 보아 (split) 합치는(merge) 구조입니다. CNN은 MNIST모델을 구축한 뉴럴 네트워크로 99.2%가량의 높은 정확도를 보였습니다. CNN에 대해서는 다음 포스트에서 자세히 알아보겠습니다.

 

마지막으로 RNN(Recurrent Neural Network, 순환 신경망)입니다. RNN은 음성, 문자 등 순차적으로 등장하는 데이터 처리에 적합한 모델로 한 방향으로 진행하는 네트워크를 옆으로 진행해 순환구조를 이루고 있습니다. RNN의 구조는 아래 그림으로 확인해보겠습니다. RNN은 음성인식의 분야에서 활발하게 연구 중입니다.

그림 3.1. RNN의 다양한 구조

위의 그림 3.1을 보면 이전에 한 방향으로만 진행하던 뉴럴 네트워크에서 옆으로 진행하는 구조들을 볼 수 있습니다. RNN에서도 입력을 나누고(split) 결과를 병합하는(merger)과정들을 볼 수 있습니다.

우리는 이번 포스트에서 Fast forward, CNN, RNN 등 다양한 네트워크 구조를 살펴보았습니다. 이름만 듣고 굉장히 어려울 것이라 생각했을 수 있지만 기본 구조를 조금 변형한 네트워크 구조로, 우리도 언제든 만들 수 있습니다. 우리는 이미 Unit(Perceptron)을 만드는 방법을 알고 있기 때문에 상상력을 동원하여 Unit을 효율적인 형태로 쌓아보며 최적의 네트워크 구조를 만들어 보시길 바랍니다.