본문 바로가기

AI

RNN, LSTM, GRU, Transformer model

RNN이 무엇인지, 관련 모델들이 어떻게 진화해왔는지에 대해 알아보도록 하자.

*본 글에서 수식은 다루지 않습니다.

 

RNN(1986) -> LSTM(1997) -> GRU(2014) -> Transformer model(2017)

 

RNN이란?

Recurrent Neural network의 약자로, 순환 신경망이라고도 한다.

Nueral network의 주요 아키텍쳐 중 하나이며, 이외로는 CNN, GNN 등이 있다.

시계열 데이터나 순차 데이터를 처리하는 데 특화된 신경망 구조이다.

 



입력 계층 : 처리할 정보를 수신

출력 계층 : 결과를 제공

은닉 계층 : 데이터 처리, 분석 및 예측

위의 3계층으로 보통 구성된다.

 

 

Recurrent에서 생각해 볼 수 있듯이, RNN모델은 은닉층의 노드에서 나온 결괏값을 출력층으로 보낼 뿐만 아니라,
다시 은닉층 노드의 다음 계산의 입력으로도 보낸다는 특징이 있다.

 

일반적으로 하나의 입력에 하나의 출력이 연결되는 경우가 많지만, 

상황에 따라 일대다, 다대다, 다대일로 조정하기도 한다.

 

*각 구조별 예시

1 : 1      간단한 기계 학습 문제, 이미지 분류(라벨 출력)

1 : n      하나의 이미지에 대해 제목(단어의 연속)을 출력, 시계열 데이터 예측, 번역

n : m     입력 문장에 대한 대답을 출력,  동영상 분

n : 1      스팸 이메일 분류, 날씨 예측, 센서 데이터 기반 경보 발생

 

RNN은 바로 이전의 입력만 기억할 수 있는데, (장기 의존성 문제)

이러한 점을 개선하여 더 긴 타임라인을 수용하도록 만든 모델이 LSTM이다.

 

LSTM

Long Short-Term Memory

https://en.wikipedia.org/wiki/Long_short-term_memory

입력 게이트 : 현재 입력이 LSTM의 셀 상태에 얼마나 반영될지를 결정

망각 게이트 : 이전의 셀 상태에서 얼마나 많은 정보를 잊을지를 결정  

출력 게이트 : 현재의 셀 상태에서 최종적으로 출력될 정보를 결정 (=은닉상태 계산)

모델이 정보를 선택적으로 기억하거나 잊을 수 있음 (긴 시퀀스에서도 중요한 정보를 유지)

 

3가지 게이트 및 셀 상태를 관리해야 하기에, 파라미터 수가 많아지고 계산이 복잡해진다.

  => 학습과 추론 속도가 느려지며, 더 많은 리소스 필요.

 

LSTM의 복잡성을 줄이며, 비슷한 기능을 제공하기 위해 GRU를 설계하였다.

 

GRU

Gated Recurrent Unit

https://velog.io/@lighthouse97/Gated-Recurrent-UnitGRU%EC%9D%98-%EC%9D%B4%ED%95%B4

리셋 게이트 : 이전 은닉 상태의 정보를 얼마나 잊을지 결정

업데이트 게이트 : 현 시점에서 새로운 입력 정보와 이전 은닉상태의 정보의 비율을 결정

+ 셀 상태 제거 : GRU의 은닉 상태가 셀 상태와 동일한 역할을 수행

     => 구조의 단순화 및 파라미터 수 감소로 인해 성능 향상!

 

그럼에도 불구하고 여전히 RNN의 메모리 제한 및 시퀀스 상호 의존성 문제가 남아있다.

  기울기 소실 문제 -> 고정된 크기의 은닉 상태 노드로 인한 메모리 제한 ( 후반부로 갈수록 초기 정보가 소실됨 )

  순차적인 data -> 입력을 순차적으로 처리해야하기에 병렬 처리에 어려움을 겪음

 

encoder-decoder FFNN에서 Self Attention 매커니즘을 적용해 이를 극복한 모델이 바로 Transformer model이다.

 

*FFNN : Feed Forward Neural Network 

 

Transfromer model

1. 입력데이터를 순차적으로 받지 않고, 한 덩어리로 받기

2. 입력 덩어리에서, 중요한 부분 판단하기 (압축) = Self Attention

 

*Attention : 데이터 中 중요한 부분에 더 많은 가중치를 주는 방법. 다른 데이터들과 연관성 정도(관계) 파악 가능.

*Self Attention : 스스로의 데이터만으로 중요도를 판단. 요소에 따라 가중치는 달라지지만, 전체 크기는 변하지 않음.

 

위의 1,2번을 통해 고정된 크기의 은닉 상태 노드가 필요 없어져 정보 소실 문제를 해결하였고,
병렬처리를 통해 성능 향상을 이끌었다.

 

자, Transformer 모델에 대해 조금 더 살펴보자.

Transformer model이란 순차 데이터 내의 관계를 추적해 맥락과 의미를 학습하는 신경망이며,

RNN과 달리 Encoder-Decoder 구조로 이루어져 있다.

 

왼쪽 박스가 Encoder, 오른쪽 박스가 Decoder이다.

 

Positional encoding을 통해 압축된 입력 벡터 각 요소의 순서정보를 보존하며,

Encoder에서 입력받은 데이터에 대해 Multi Head Self Attention을 수행하고, 인코딩 된 데이터에 대해서

Decoder에서 Masked Multi Head AttentionMulti head Croos Attention을 수행하여 최종 결과를 출력한다.

 

모델의 학습을 돕기 위해 내부에 Position-wise FFN층을 함께 두어 비선형성 추가 및 벡터의 차원 조정을 하며,
Add(잔차 연결) & Norm(층 정규화)을 반복적으로 적용한다.

 

Multi Head Self Attention : 여러개의 Self-Attention을 병렬로 수행 (가중치 판단 요소는 하나가 아니니까..!)

Masked Multi Head Attention : 현재 단어를 예측할 때, 보다 뒤의 단어 정보를 참조하지 않도록 하기 위해 사용.

Cross Attention : 다음 단어를 예측하며, 출력 결과물을 생성한다.

 

Encoder와 Decoder의 개수를 여러개로 설정하여 모델을 구축할 수도 있다.

 

기존의 장기 의존성 문제, 병렬 처리의 어려움, 정보 손실 문제를 해결하여 매우 강력한 도구로 자리잡았다.

데이터의 길이가 아무리 길어도 각 요소간의 거리가 동일하다고 볼 수 있기에(관계로 위치 정보를 파악하기에)
기존 RNN모델들보다 긴 정보를 처리할 때에도 속도가 더 빠르지만,
Self-Attention으로 인한 메모리 요구량이 급격히 증가한다는 단점이 있다..

 

최근 RNN뿐만 아니라 CNN 모델들도 대체해가고 있으며, LLM의 기본 아키텍처로 사용되기도 한다.

*Transformer 기반 모델 예시 : GPT, BERT

 

'AI' 카테고리의 다른 글

Pytorch를 통한 주가 분석 (LSTM, GRU)  (0) 2024.08.20
Google Colab 단축키 모음  (0) 2024.08.14
DVC : Data Version Control  (0) 2024.08.12