에코프로.AI

[머신러닝] RNN(Recurrent Neural Network) 본문

AI Tutorial

[머신러닝] RNN(Recurrent Neural Network)

AI_HitchHiker 2024. 8. 26. 20:56

 

 

RNN 이란?

RNN(Recurrent Neural Networks)은 순차적 데이터를 분석하기 위한 딥러닝 모델입니다. DNN(Deep Neural Network)은 은닉층 내 노드간에 연결이 안되어 있지만, RNN은 은닉층 내 노드를 연결하여, 이전 스텝의 정보를 은닉층 노드에 담을수 있도록 구성했습니다.

순서가 있는 순차적 데이터란 문장이나 음성같은 연속적인 데이터를 말하는데, 이러한 데이터는 위치(순서)에 따라 의미가 달라지는 것을 말합니다. 즉 현재 데이터의 의미를 알기 위해서는 이전의 과거 데이터도 알고 있어야 합니다.

  • 자연어처리, 음성인식, 기계번역, 주가예측 등의 분야에 많이 사용됩니다.
RNN은 은닉층 내의 순환구조를 이용하여, 과거의 데이터를 기억하여 새롭게 입력되는 데이터와 과거 데이터를 연결 시켜서 그 의미를 알아내는 기능을 가지고 있습니다.

RNN 기본구조

 

 

RNN은 입력층, 은닉층, 출력층의 3단계 구조로 이루어져 있습니다.

 

위 그림에서 볼수 있듯

1) x(1) 으로부터 h(1)을 얻고,

2) 다음 스텝에서 h(1)과 x(2)를 이용하여 과거 정보와 현재 정보 모두를 반영할 수 있습니다.

 

은닉층의 노드 값을 t+1 시점으로 넘겨주고, t+1 시점의 입력을 받아서 계산하는 작업을 반복적으로 진행하여, "Recurrent" 이름이 붙었습니다. 반복적으로 진행되는 구조를 축약하여 위 그림의 우측처럼 나타낼 수도 있습니다.

 

가중치 공유

RNN의 학습 가중치는 시작 층과 도착 층에 따라 크게 세 가지, U, W, V로 분류 됩니다.

  • U : 입력층 → 은닉층
  • W : t 시점 은닉층 → t+1 시점 은닉층
  • V : 은닉층 → 출력층

가중치 U,W,V는 모든 시점에서 동일합니다. 즉 가중치를 공유합니다. 가중치 공유는 두가지 이점이 있습니다.

1. 학습에 필요한 가중치의 수를 줄일 수 있다.

2. 데이터 별 시간의 길이 T에 유연하다.

 

가중치를 공유하면 모든 edge에 가중치를 다르게 주는 것보다 학습할 가중치가 줄어도는 것을 직관적으로 알 수 있습니다. 데이터 별 시간의 길이 T에 유연함을 이해하기 위해서, 단어를 완성해주는 RNN을 고려해 보겠습니다.

(예를 들어, "hell" 다음 "o", "kin" 다음 "g", "exper" 다음 "t"를 예측)

가중치 공유 예시

시간의 길이 T에 유연하다는 것은, 1개의 모형으로 "hell"의 "o"를, "kin"의 "g"를, "exper"의 "t"를 예측가능하다는 것입니다.어차피 같은 가중치를 곱해주고, 은닉층에 단어의 과거 정보가 포함되어 있어, 위 예제 단어의 길이 5,4,6에 무관하게 같은 모형을 적용시킬 수 있습니다.

 

RNN Architectures

위에서 살펴보았듯이 RNN은 입력과 출력 값의 길이에 자유로운 모형입니다. Input과 Output의 형태에 따라 아래처럼 다양한 구조로 RNN을 구성할 수 있습니다.

다양한 RNN 구조

  • One-to-One : Vanila Neural Networks, 은닉층이 1층이 신경망 모형
  • One-to-Many : Image를 입력으로 받아, Image 속 대상에 이름을 붙이는 모형
    • 한 장의 그림에 대해 "소년이 사과를 고르고 있다" 처럼 여러 개의 단어 형태로 표현될 수 있다.
  • Many-to-One : word sequence를 입력으로 받아, 감정 분류를 해주는 모형
    • 우리가 하는 말을 통해 우리의 심리상태를 "안정", "불안", "공포" 등의 한 단어로 결과를 예측할 때 사용된다.
  • Many-to-Many : 기계번역 모형, word sequence를 입력으로 받아, word sequence 를 출력
    • 여러 개의 단어로 구성된 문장을 입력으로 받아서 여러 개의 단어로 구성된 문장을 반환한다.
      구글 번역기 등이 이에 해당한다.
  • Many-to-Many : 비디오의 frame을 입력으로 받아, frame 속 대상에 이름을 붙이는 모형
    • 동영상 같은 경우는 여러 개의 이미지 프레임에 대해 여러 개의 설명이나 번역 형태로 결과를 반환한다.

 


LSTM  과 GRU

LSTM(Long Short-Term Memory)

LSTM은 RNN의 변형된 구조로, 기울기 소실 문제를 해결하기 위해 설계되었습니다. LSTM은 셀 상태(cell state)와 여러 개의 게이트(gate)를 도입하여, 장기 의존성을 효과적으로 학습할 수 있습니다. LSTM은 입력게이트(input gate), 출력게이트(output gate), 망각게이트(forget gate)를 사용하여 정보를 저장하고 삭제하는 과정을 제어합니다.

  • 셀 상태와 여러 개의 게이트를 도입하여 장기 의존성을 학습할 수 있습니다.
  • 긴 시퀀스에서도 효과적으로 학습할 수 있습니다.

GRU(Gated Recurrent Unit)

GRU는 LSTM의 간소화된 버전으로, 계산량을 줄이면서도 비슷한 성능을 제공합니다. GRU는 업데이트 게이트(update gate)와 리셋 게이트(reset gate)를 사용하여, 중요한 정보를 효과적으로 저장하고, 불필요한 정보를 제거합니다. GRU는 LSTM과 달리 셀 상태를 가지지 않으며, 두 개의 게이트만을 사용하여 정보를 제어합니다.

  • GRU는 구조가 단순하여 계산속도가 빠르고, 메모리 사용량이 적어, LSTM보다 빠른 학습속도를 제공합니다.
  • 긴 시퀀스에서도 효과적으로 학습할 수 있습니다.