본문 바로가기
Deep Learning 개념정리/RNN

[시퀀스 모델] RNN, LSTM, GRU 설명 및 정리!

by inhovation97 2023. 3. 11.

최근 시계열 데이터를 다루기 위해 관련 논문들을 찾아 RNN 계열의 모델들을 벤치마킹한 논문을 읽으면서, 한 번 정리해야겠다는 생각이 들었습니다. 

해당 논문은 Time Series Forecasting (TSF) Using Various Deep Learning Models (2022)으로 제가 따로 리뷰하였으며, 논문 내에 figure를 이용해 정리하는 포스팅입니다.

해당 포스팅에서는 각 알고리즘의 원리와 특징을 정리합니다.

 

0. RNN 데이터의 특징 & RNN 알고리즘의 특징

Deep Learning Frameworks

1. RNN
2. LSTM
3. GRU
4. Transformer

 

RNN 계열의 모델들은 Sequential data에 아주 적합합니다. 예를들면, Text나 TimeSeries 데이터가 있겠죠. 이 두 종류의 데이터는 모두 이전 시점의 데이터가 다음 시점의 데이터와 밀접하게 관련이 있다는 것입니다. Recurrent NN은 이름에 맞게 이전에 입력받았던 데이터들을 고려하여 벡터를 생성하면서, 이 벡터를 현 시점의 입력 데이터와 고려해가며 결과를 예측하게 됩니다. 이러한 특징을 가진 시퀀스 모델은 RNN -> LSTM -> GRU -> Transformer 순으로 발전해왔습니다.

 

포스팅하다가 Transformer 부분은 더욱 자세히 따로 포스팅하려 합니다.

아래 3 알고리즘을 공부하셨다면, 다음 포스팅인 트랜스포머 설명까지 읽으시길 추천드립니다.

 

 

0. RNN 데이터 특징 & RNN 알고리즘 특징

 

먼저 어떤 데이터를 주로 RNN에 이용하는지 뷰를 봅시다.

저는 TimeSeries data를 예시로 설명하는데, Text data와 동일하게 생각하시고 보셔도 무방합니다. 

위 figure처럼 w size만큼의 시계열 데이터를 입력으로 받아 k개 만큼의 미래를 예측합니다. 이는 w개의 단어로 이루어진 문장을 입력으로 받아 k개만큼의 단어로 이루어진 문장을 예측하는 task와 같습니다.

 

이제 RNN계열의 알고리즘의 특징을 살펴봅시다. 

전부 Cell state라는 main stream이 있다는 것을 알고 공부하시면, 이해하시는데 큰 도움이 됩니다. 이전 시점들의 데이터를 계속해서 update 해나가면서 현재시점의 데이터와 고려하여 예측하고, main stream을 업데이트해나가는 방식입니다. 그렇게 과거의 정보들과 현재 데이터를 고려한 cell state는 다음 시점의 데이터를 예측하기 위해 입력으로 다시 들어가고, 다시 update 되는 Reccurent method 알고리즘인 겁니다.

main stream 역할을 하는 cell state는 계속해서 과거 정보들을 update하여 옮겨주는 컨베이어 벨트 역할을 합니다.

 

 

Deep Learning Frameworks

 

 

1. RNN

여기서 t는 시점입니다. St는 과거 시점들로부터 계속해서 받아오는 값들을 고려하여 생성되는 벡터입니다. 앞서서 말한 컨베이어 벨트 역할을 하는 mainstream입니다.

RNN은 이전 시점의 데이터 S(t-1)를 hidden state로 받아 현재 입력X(t)과 결합시켜야 하는데 식을 보면, summation을 한 것을 알 수 있습니다. 가중치 Wxs와 bs 파라미터로 St를 생성합니다. 이제 생성한 St에 한 번더 layer를 통과하여 비선형성이 가해진 뒤 sigmoid 함수를 통해 y(t)를 예측합니다.

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

하지만 이때 사용되는 활성화 함수가 tanh와 sigmoid이기 때문에 기울기 소실 문제가 너무 빨리오는 단점이 있습니다. 입력하는 데이터의 시점이 길어질수록 기울기는 더욱 소실되어 결국에는 많은 정보를 고려하지 못한 채 짧은 duration의 정보만이 가용됩니다.

 

 

2. LSTM

 

LSTM은 이름부터 Long Short-term Model으로 RNN에서 발전한 모델입니다. 

하나의 셀 안에 2개의 stream이 있습니다. (St, Ct) 보통 ht로 표현하는데 논문에는 St로 표현했네요. 

Ct는 과거 시점들로부터 계속해서 받아오는 값들을 정리하여(정보를 선택적으로 활용) 인코딩한 벡터들에 더욱 집중하고,

St는 현 시점의 인풋 데이터와 함께 과거 시점의 데이터를 어떻게 가용하여, Y를 예측할지 더욱 고민하는 stream으로 생각하면됩니다.

따라서 Ct가 이전 시점들의 정보들을 정리해오면, St는 지금 받아온 현 시점의 정보 Xt를 어떻게 Ct에 적용할지 고민하고 예측까지 합니다. 여기서 말하는 고민은 아래에서 말하는 gate입니다. gate는 얼마나 정보를 활용하고 어떻게 정보를 활용할 지 표현하는 layer 입니다.

(빨간색으로 표시한 gate를 위주로 보시면 복잡한 구조가 그나마 쉽게 이해가 갈겁니다.)

 

(3) 식을 번호대로 살펴봅니다. 

①ft는 forget gate 이전 시점인 St-1과 xt를 concat한 뒤, 시그모이드 layer에 넣습니다. 현 시점의 입력데이터를 고려하여 지금까지 만들어온 Ct-1데이터를 얼마나 기억할지 정하기위해 0~1사이의 값으로 만든 뒤 Ct에 곱해집니다. 0에 가까울수록 정보를 많이 줄이는 것입니다.

 

②, ③ it, ~ct는 같이 봐야합니다. 먼저 it는 input gate로 다음 ~ct gate에 곱해지기 때문에 현 시점의 xt 데이터를 얼마나 기억할지 정하는 역할을 합니다. 따라서 이 layer도 0~1사이의 값으로 강제하기 위해 시그모이드 함수를 적용합니다. 

~ct tanh 함수를 거쳐서 -1 ~ 1로 강제되어 it layer에서 나온 벡터와 곱해집니다. 좀 더 생각해보면 0 ~ 1사이로 강제된 값은 그 벡터의 영향력을 의미한다면, -1 ~ 1로 강제된 값은 그 벡터의 방향성을 의미하고 이 두 벡터가 서로 multiplication이 됩니다.

종합적으로는 영향력이 강한 벡터이며, 음수쪽으로 강한 벡터일수록 -1의 값을 갖고, 양수쪽으로 영향력이 강한 벡터일수록 1의 값을 갖게되는 식으로 인코딩됩니다.

 

④ Ct는 이제껏 입력한 시퀀스 데이터를 전부 고려하여 벡터를 만들어가는 stream으로 생각합시다. 이제 Ct의 각 원소들은 현재 들어온 xt 값을 고려하여 임팩트가 강한 값들을 위주로 기억하고 있습니다.

 

⑤, 도 같이보면, Ot: Output gate로 최종 y를 예측하는 게이트입니다. 이제껏 정성스럽게 만든 main stream의 Ct를 현재 입력값인 xt와 다시 한 번 인코딩하여 Yt를 예측하기 직전까지 갑니다. 이때 두 벡터를 인코딩할 때 xt는 forget gate처럼 그 영향력을 고려하기 위해 sigmoid layer를 거친 값이고, Ct는 음, 양의 영향력으로 고려하기 위해 tanh 활성화 함수를 거친 값입니다.

 

⑦은 y를 예측하기 위한 Output gate의 마지막 layer로 ⑤에서 만든 벡터를 최종적으로 비선형성을 한 번 더 가해주기 위해 sigmoid를 활성화 함수로하는 최종 layer를 통해 드디어 Yt를 예측하게 됩니다.

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

LSTM은 과거 시점의 정보들을 여러가지 gate를 통해 비선형성도 높이고, 더욱 효율적으로 활용하기 때문에 RNN에 비해 더욱 긴 시점의 정보들을 좀 더 미세하게 컨트롤합니다.  

 

 

3. GRU(Gated Reccurent Unit)

 

GRU는 복잡한 LSTM모델을 좀 더 단순화하여 기울기 소실 문제를 해결하기위해 개발된 모델입니다. update gate, reset gate, third gate가 있습니다. third gate는 관련 자료마다 명칭이 많이 다르네요. 

LSTM과 크게 다른점은 stream이 St한 줄이네요. 훨씬 단순해졌습니다.

저는 계속해서 모든 입력들의 정보를 담아오는 역할을 하는 St 벡터를 main stream이라고 명명하여 설명하겠습니다!

 

ft는 reset gate입니다. 현재 입력 데이터인 Xt와 여태까지 정보를 잘 담아온 main stream(St-1) 벡터를 서로 sum하여 layer에 입력하여 simoid 함수를 거쳐 나옵니다. 0~1의 스케일로 강제되기 때문에 데이터에 대해 얼마나 잊을지를 확률화 합니다. 

lstm의 forget gate의 역할입니다.

 

②, ③ zt, ~st는 update gate입니다. 먼저 zt를 보면 reset gate와 똑같이 sum하여 sigmoid layer를 나온 벡터입니다. 하지만 둘의 레이어는 독립이라서 학습할 파라미터가 다릅니다.(wr != wz) 이 벡터로 나온 값인 Zt는 현재 정보를 고려한 중요도 입니다. 따라서 1-Zt는 과거 정보의 중요도이겠죠?

1-zt 벡터를 이제껏 정보를 정리해온 main stream(St-1) 벡터와 곱해줍니다. 이 효과는 이제껏 쌓아온 정보의 중요도를 고려해 준 것입니다. 

~st를 봅니다. Zt의 값은 현재 정보를 고려한 중요도로서 tanh 활성화 함수를 거쳐 -1~1 스케일로 강제됩니다. 이렇게 인코딩된 현재 정보의 중요도는 ④에서 mainstream에 더해집니다. 

이 과정은 LSTM에서의 forget gate와 input gate를 동시에 하는 느낌입니다. 

GRU는 앞으로 이런식으로 main stream을 update시켜나갑니다. 

 

④번 함수는 ②, ③에서 임팩트를 부여한 mainstream 벡터인 St-1과 현재 정보를 고ꂨ한 Zt를 더하여 최종적으로 Y를 예측하기 위한 ⑤번 final layer에 입력됩니다. GRU는 이렇게 값을 예측합니다. 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

복잡한 LSTM을 단순화한 GRU는 사실 성능차이가 별로 안나면서도 학습이 빠르다는 특징이 있다는 관련 정보들이 많습니다. 제가 위에서 언급한 논문 내에서의 실험에서도 성능 차이가 크진 않지만 아주 근소하게 GRU가 더 성능이 높았습니다. 

 

 

4. Transformer

마지막은 가장 복잡한 트랜스포머 모델이네요 ㅎ... 

사실 이 모델은 야물딱지게 설명하려면, 따로 포스팅을 해야될 정도로 알아야할게 많죠.

따로 포스팅하겠습니다!

댓글