Boostcamp AI Tech

[Boostcamp Day-4] AI Math - RNN 첫걸음

ju_young 2021. 8. 5. 12:16
728x90

시퀀스 데이터

시퀀스 데이터로 소리, 문자열, 주가 등이 있을 것이고 시간 순서에 따라 나열된 데이터인 시계열(time-series) 데이터 또한 시퀀스 데이터에 속한다.

 

시퀀스 데이터는 순서가 바뀌거나 과거의 정보에 손실이 발생하면 확률분포도 바뀌게 되는데 가령 예를 들어 '개가 사람을 물었다'와 '사람이 개를 물었다'와 같이 두 개의 문장은 문법적으로 맞지만 의미로는 사람이 개를 물었다라는 말은 맞지 않는다. 이렇게 순서가 바뀌었을 때 예측 분포가 상당히 달라질 수 있다는 의미이다. 이것은 독립동등분포 가정을 위배했다고 말하기도 한다.

 

독립동등분포라는 것은 각 확률 변수들이 독립적이며 모두 동일한 확률분포를 가지고 있는 것을 말한다.

 

시퀀스 데이터를 다룰 때 과거의 정보를 가지고 미래에 발생할 데이터의 확률분포를 다뤄야하는데 이때 조건부확률을 이용한다. 다음과 같이 과거의 X(1)~X(t-1)까지의 정보가 주어졌을 때 X(t)에대한 조건부확률분포와 X(1)~X(t-1)까지의 확률분포를 곱해주면 X(1)~X(t)까지의 결합확률분포를 모델링할 수 있다.

위 수식을 반복적으로 적용하면 다음과 같은 수식을 얻을 수 있다.

하지만 위 조건부확률은 과거의 모든 정보를 사용하지만 시퀀스 데이터를 사용할 때 과거의 정보 중 필요하지않는 정보도 있을 수 있기 때문에 모든 정보들이 필요한 것은 아니다. 따라서 시퀀스 데이터를 다루기 위해선 길이가 가변적인 데이터를 다룰 수 있는 모델이 필요하다. 무슨 말이냐면 다음과 같이 X(t)시점을 예측하기 위해 필요한 X(1)~X(t-1) 데이터와 X(t+1)시점을 예측하기 위해 필요한 X(1)~X(t) 데이터가 필요하듯이 각 시점에 따라 길이가 다른 모델이 필요하다는 것이다.

앞서 언급했듯이 시퀀스 데이터를 다룰 때 과거의 모든 정보를 사용할 필요없이 몇 개의 정보만 필요할 수 있다고 했다. 즉, 처음 시점부터 이전 정보까지의 가변적인 길이를 사용하는 것이 아닌 고정된 길이 τ만큼의 시퀀스만 다룰 수 있는 모델이 필요하다. 이러한 모델을 AR(τ)(Autoregressive Model), 자기회귀모델이라고 부른다.

또 다른 방법으로 다음과 같이 이전 정보를 제외한 나머지 벙보들을 H(t)와 같은 잠재변수로 인코딩해서 활용하는 잠재 AR 모델이있다. 이런 모델을 통해 가변적인 길이의 시퀀스 데이터를 고정된 길이로 모델링을 할 수 있다. 또한 이러한 잠재변수 H(t)를 심경망을 통해 반복적으로 사용하여 시퀀스 데이터의 패턴을 학습하는 모델이 RNN이다.

 

RNN

가장 기본적인 RNN 모형은 다음과 같이 MLP와 유사한 모양이다. 

여기서 가중치행렬 W(1)과 W(2)는 서로 공유하는 가중치행렬로서 불변의 성질을 가지고 있다. 또한 위와 같은 RNN 모형은 입력이 현재 데이터만 받는 모델이기 때문에 과거의 정보를 다룰 수가 없다.

 

과거의 정보를 다루기 위해서는 다음과 같은 모델을 사용할 수 있는데 간단히 순서를 설명하면 H(t)를 현재시점 X(t+1)에 다시 사용한 후 이 H(t)를 복제해서 다음 순서 H(t+1) 잠재변수에 인코딩한다.

위 수식의 각 변수들의 의미를 정리하면 다음과 같다.

 

  • H(t) : 현재 시점의 잠재변수
  • X(t) : 현재 데이터
  • W(x)(1) : 입력데이터에서부터 선형모델을 통해 잠재변수를 인코딩하는 가중치행렬
  • H(t-1) : 이전 시점의 잠재변수
  • W(H)(1) : 현재 시점의 잠재변수로 인코딩하는 가중치행렬
  • W(2) : 출력으로 만들어주는 가중치행렬

 

위에서 보듯이 가중치행렬이 총 3개가 나오는데 이 3개의 가중치행렬은 t(현재 데이터)에 따라 변하지않는다. 따라서 각각의 시점에서 활용될 수 있다. 반대로 잠재변수와 입력데이터는 t에 따라 변한다.

 

이해하기 쉽게 그림으로 표현하면 다음과 같다.

BPTT(Backpropagation Through Time)

지금까지는 순전파(forwardpropagation)을 진행하였고 RNN에서도 역전파를 수행하는데 RNN에서는 맨 마지막 시점의 gradient가 과거의 시점으로 타고 올라가는 순서로 진행된다. 이것을 BPTT라고 부른다. 아래의 그림에서 빨간색 화살표가 BPTT에 해당한다.

BPTT를 통한 RNN의 가중치행렬의 미분 계산은 다음 링크를 참고하자.

https://d2l.ai/chapter_recurrent-neural-networks/bptt.html

 

8.7. Backpropagation Through Time — Dive into Deep Learning 0.17.0 documentation

 

d2l.ai

 

기울기 소실

RNN은 시퀀스 길이가 길어질수록 기울기 소실문제가 발생하는데 이 문제를 해결하기 위해서는 일정 지점에서 끊는 truncated BPTT의 방법이 필요하다. 이 방법은 아래 그림에서 t+1까지의 gradient vector를 받지않고 끊은 후에 출력 O(t)의 gradient를 받는 것을 말한다.

이런 문제들을 해결하기위해 LSTM(Long Short Term Memory)GRU(Gated Recurrent Units)이 등장하였다.

728x90