AI/Deep Learning

[Deep Learning] RNN (Recurrent Neural Networks)

byunghyun23 2023. 6. 8. 18:04

순환 신경망(RNN: Recurrent Neural Networks)은 시퀀스(sequence) 데이터를 이용한 네트워크입니다.

여기서 시퀀스 데이터란 보통 시계열(time series) 데이터라고도 불리며, 시점을 기준으로 데이터가 다른 것을 의미합니다. 주식 데이터가 시계열 데이터 중 하나입니다.

 

RNN은 DNN, CNN과 달리 출력층의 결과를 재사용하는 구조입니다.

 

 

위 그림에서 A를 은닉층이라고 부르며, A의 출력은 h입니다.

그리고 입력은 X, h입니다. 이 부분이 DNN, CNN과 다른 점입니다.

즉, 은닉층의 출력값이 다시 입력층으로 되돌아가는 구조로 h가 재사용되고 있습니다.

다시 말해서 이전 상태를 기억하여 다음 상태를 예측한다는 의미입니다.

따라서, 시퀀스 데이터를 이용한 예측에 사용되는 가장 기본적인 네트워크입니다.

 

하지만 RNN은 은닉층의 결괏값을 재사용한다는 특징이 있었습니다. 그러나 그로 인해 그래디언트 소실 문제(vanishing gradient problem)가 발생할 수 있습니다. 그래디언트 소실이란 입력층에 가까운 층들에서 가중치들이 업데이트가 제대로 되지 않으면서(기울기가 0이되면서) 최적의 가중치를 찾지 못하는 문제입니다.

 

이를 해결하기 위한 신경망이 LSTM(Long Short Term Memory)입니다.

LSTM은 은닉층의 결괏값이 다음 시점으로 넘어갈 때 그 값을 넘길지 말지 결정하는 단계가 추가됩니다.

LSTM 은닉층 내부는 다음과 같이 구성되어 있습니다.

ref: https://itwiki.kr/w/LSTM

 

Forget Gater(f_t)는 이전 층의 출력에서 어떤 정보를 반영할지에 대한 결정을 합니다.

Input Gate(i_t)는 그 정보가 현재 상태(cell state)에 저장할지에 대한 결정을 합니다.

Output Gate(o_t)는 위 결정을 출력에 반영합니다.

즉, LSTM은 이러한 구조를 통해 그래디언트 소실 문제를 해결하고자 했습니다.

 

GRU(Gated Recurrent Unit)은 LSTM의 긴 학습 시간을 해소하고자 제안된 네트워크입니다.

LSTM은 게이트가 3개가 있었지만, GRU는 2개의 게이트를 사용합니다.

ref: http://colah.github.io/posts/2015-08-Understanding-LSTMs/

 

Update Gate(z_t)는 이전과 현재의 정보를 어느정도 반영할지에 대한 결정을 합니다.

Reset Gate(r_t)는 sigmoid 함수를 이용하여 이전 정보를 반영할지에 대한 결정을 합니다.

정보를 반영하거나(1) 반영하지 않거나(0) 둘 중 하나로 결정됩니다.

 

GRU는 LSTM보다 학습 시간이 적게 걸리지만, 학습 능력은 LSTM보다 다소 낮은 것으로 알려져있습니다.

하지만 경험상, 크게 차이는 없는 것 같습니다. (어떤 task를 하느냐에 따라 다르겠네요.)

 

RNN을 시작으로 LSTM, GRU 네트워크가 시퀀스 데이터를 이용한 예측에 사용되고 있으며, 특히 자연어처리에서 많이 사용됩니다.

최근에는 어텐션(attention), 트랜스포머(transformer)가 많이 사용되고 있으며, 트랜스포머 기반의 버트(Bert)가 가장 많이 사용되고 있습니다.

 

RNN, LSTM, GRU 실습은 이곳을 확인해 주세요.