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

Deep dive into Deep learning part 12. 신경망 (3) - Updated

by Sapiens_Nam 2023. 4. 16.

 

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

 

오늘은 신경망 (Neural network)의 구조적인 범주들, Convolutional neural network (CNN), Recurrent neural network (RNN), Generative adversarial neural network (GAN)에 대해 간단히 소개하는 내용을 올리고자 한다.

원래 Transformer까지 포함을 시키고자 하였으나, 이는 매우 중요한 구조이기에 추후 CNN, RNN에 대하여 이야기하고 자세하게 따로 다루고자 한다.

 

우선, CNN에 대해서 이야기하자.

 

컨볼루션 신경망 (Convolutional neural network, CNN)는 이미지 데이터 처리에 특화돼 있는 구조를 가지고 있다. 물론, 무조건 이미지 데이터만을 input으로 받는 것은 아니지만 가장 핵심적으로 다루는 데이터는 image, video date이다.

CNN

 

CNN을 알기 위해서는 먼저 이것이 왜 등장하였는지, 그리고 Convolution 연산이 무엇인지 이해해야 한다.

CNN은 기존의 fully connected layer에서 convolution layer와 poolying layer가 추가된 신경망이다.

 

Fully connected layer는 다음과 같은 구조로 이뤄져 있다.

만약  image를 input으로 받는다면, 이미지의 각 픽셀값을 위 input layer에 집어넣기 위해선 'flatten' 작업을 거쳐줘야 한다.

Image는 Height, Width, Color channel로 이루어진 3D Tensor인데 이때 Color channel (RGB)는 Height와 Width가 하나의 '축' (axis)를 따라 나열돼 있다. 

https://lisaong.github.io/mldds-courseware/01_GettingStarted/numpy-tensor-slicing.slides.html

위의 예시에서 고양이 사진 (컬러 이미지)을 보면, RGB 색깔을 지니고 있는 사각형이 3개 있음을 볼 수 있다.

R에서의 픽셀값, G에서의 픽셀값, B에서의 픽셀값이 조합되어 원래의 사진에서의 색깔이 표현된다.

 

위와 같은 이미지를 하나의 벡터로, 즉 1D 텐서로 바꾼다면 어떻게 될까? 

공간적인 정보가 왜곡될 수밖에 없다.

결국 각각의 픽셀 사이의 관계가 공간적 정보를 표현하는데, 이를 1D로 변환하면 위 예시와 같이 공간적인 정보가 모두 왜곡되어 버리는 위험이 있다.

이와 같은 정보의 손실을 피하는 방법은 이미지를 flatten하지 않고, 있는 그대로 집어넣는 것이다.

이를 위해 등장한 것이 CNN이다.

 

그리고 이때 위와 같이 3개의 Color channel 에서 2D 형태인 이미지들을 Neural network의 가중치와 연산을 진행하는 (Forward operation) layer가 필요한데 이 연산이 convolution 연산이다. 

Convolution 연산에 대해서는 다음 CNN을 조금 더 자세히 다루는 글에서 설명하도록 하겠다.

 

CNN은 앞서 언급하였듯, 기존의 Fully connected neural network에서 Convolution 연산을 수행하는 Convolution layer,  Pooling 연산을 수행하는 Pooling layer가 추가된 것이다.

이 layer들에서는 결국 image의 feautre들을 추출하는 것이며, 이 feature들을 통해서 최종적으로 이 이미지가 고양이인지, 강아지인지를 신경망이 분류해낼 수 있는 것이다. 

 

다음은 Recurrent Neural Network (RNN)이다.

 

RNN

 

RNN은 '순서' (sequence)가 있는 데이터를 처리하기 위해 나온 구조의 신경망이다.

대표적으로, '언어'가 순서가 있는 데이터이기 때문에 RNN은 자연어 처리를 위한 신경망으로 유명해진 구조이다.

여기서 자연어란, 인간의 언어를 의미한다. (컴퓨터의 언어를 의미하는 기계어와 반대되는 의미의 단어이다.)

RNN에서 R이란 'Recurrent'라 하는데 이는 '재귀적'이란 의미이다.

이는 Fully connected neural network, CNN 등과 가장 핵심적인 차이이자, RNN의 가장 큰 특징인데, 다른 구조의 신경망들은 데이터를 입력받으면, Input layer -> hidden layer ->  output layer로 하나의 방향으로만 연산이 진행되었다. 

그래서 이를 Feed forward neural network라고도 한다.

허나 RNN은 hIdden layer의 node에서 나온 결과값을 출력층 방향으로 보냄과 동시에, 다시 다음 계산의 '입력'으로 보내는 특징을 갖고 있다. 

 

위 그림을 보자.

RNN은 '순서'가 있는 데이터를 입력으로 받기 떄문에, 시간 ($t$) 순으로 데이터를 입력 받는다. 

(예를 들어, 하나의 문장이 있으면 문장의 각 단어들이 $t$에 따라 순차적으로 입력으로 들어오는 것이다.)

이때 $t$ 시점에 들어온 데이터가 hidden layer에 입력으로 들어갈 때, (즉, 위 그림에서 $x_t$) 이전 시점에 입력받아서 hidden layer에서 계산된 결과들도 같이 입력으로 들어가는데, 위 그림에서 $s_{t-1}$이 $t-1$번째 시점에 hidden layer의 노드를 의미하고, 거기서 나온 연산 결과가  $W$라는 행렬을 거쳐, $s_t$에 입력으로 들어가는 것을 볼 수 있다.

즉, $t$번째 시점의 hidden layer의 노드는 $x_t$와 $s_{t-1}$의 계산 결과를 같이 입력으로 받아 연산이 이뤄지는 것이다.

 

이를 Fold 시켜서 바라보면 왼쪽 그림과 같이 표현할 수 있고, 마치 hidden layer의 노드에서 output이 다시 input으로 들어가는, 일종의 재귀적인 구조로 표현할 수 있다.

그래서 위와 같은 신경망 Reccurent neural network라고 한다.

이 신경망은 이러한 것처럼 '시간축'을 따라 데이터를 입력받기 때문에 backpropagation 시에도 조금 특수한 방식의 연산이 이뤄지는데, 이를 Backpropagation Through time (BPTT)로 이뤄진다.

이에 대해서는 추후 RNN을 자세히 다루는 글에서 설명하도록 하겠다.

 

다음은 Generative adversarial neural network (GAN)이다.

이 구조의 모델을 알기 위해서는 먼저 Encoder-Decoder 구조의 개념을 알아야 한다.

 

앞서 딥러닝 Neural network가 학습하는 것은 결국 data의 feature/pattern이라고 하였다.

(representation learning)

 

위의 Encoder (이 또한 하나의 Neural network이다.)를 보면 input으로 image를 받고 (다른 형태의 data들도 입력으로 받을 수 있다. eg: 자연어) 차원이 축소되어 Latent space representation으로 출력된다.

이때, Latent space는 input space보다 저차원의 공간이며, 고차원의 데이터에서 상대적으로 중요한 Feature들만 추출해내는 공간이라 생각하면 된다.

그러면 Latent space 상에는 data의 중요한 feature(pattern. representation)들이 있으므로, 이를 다시 원래의 데이터 공간으로 mapping시킬 수 있을 것이다. 그 역할을 하는 neural network가 Decoder이다.  

비유적으로 표현하면, 파일을 압축시키고, 압축 해제를 시키는 것으로 표현할 수도 있겠다.

 

즉, 고차원의 데이터를 Encoder에 집어넣어 차원 축소가 진행되고, 차원 축소가 진행된다 함은 원래의 data space에서 상대적으로 저차원의 Latent space로 mapping하는 것으로 볼 수 있고, 이 Latent space에 있는 압축된 데이터는 중요한 Feature들만 남아있는 상태이다.

이를 다시 Decoder에 input으로 집어넣으면, 원래의 data space로 mapping이 진행되는 것이고, 원래의 데이터가 복원되는 것이라 할 수 있다.

 

결국 Encoder는 Feature extractor의 기능을 극대화시킨 것이고, Decoder는 무언가를 생성하는 (generative) 기능을 지닌 것으로 볼 수 있다.

GAN 모델도 위와 같이 두 종류의 Neural network로 이루어져 있는 구조인데, 이를 Generator, Discriminator라고 부른다.

 

우선, GAN 이름 안에 'Adversarial'이란 단어가 들어가는데 이는 '적대적인' 이란 의미이다.

즉, 두 Neural network, Generator와 Disciriminator가 적대적인 학습을 진행한다고 생각하면 된다.

그렇다면 어떤 의미에서 적대적일까?

 

GAN

 

Generator의 목적은 '진짜'같은 '가짜' (fake) 데이터를 생성하는 것이다.

그것은 image가 될 수도 있고, text가 될 수도 있고, video가 될 수도 있다.

그렇다면 생성하고자 하는 data의 feature들을 입력으로 받아야 할텐데, 바로 Encoder의 output이 data의 feature이다.

즉, Encoder의 output을 Generator는 input으로 받아서 진짜 같은 '가짜' 데이터를 생성한다.

하지만, 학습 초기에는 Generator의 성능이 좋지 않기 때문에 이 데이터가 '속을만한지'를 판단해주는 Discriminator가 필요하다. 

Generator의 목적은 Discriminator가 속을만한 진짜 같은 '가짜' 데이터를 생성해내는 것이다.

(즉, Discriminator의 목적은 가짜 데이터와 진짜 데이터를 input으로 받아서 분류해내는 것이라 볼 수 있겠다.)

 

이것이 바로 GAN의 기본 아이디어이다.

GAN은 현재까지도 상당히 활발하게 연구/개발되어지고 있고, 딥러닝의 '창작' 능력을 진보시키는데 상당히 큰 기여를 한 구조이다.

 

이로써, CNN / RNN / GAN 가장 대표적인 3가지의 Neural network 구조에 대해 살펴보았다.

다음 글에서는 CNN에 대해 조금 더 자세하게 살펴보고자 한다.

728x90

댓글