欲速不達

일을 급히 하고자 서두르면 도리어 이루지 못한다.

Fantastic AI, Fantastic World

DS | Data Science/ML | Machine Learning

[RNN] Recurrent Neural Network : 순환신경망

_껀이_ 2022. 9. 23. 14:39
728x90
반응형

 MLP와 같은 방식은 input 데이터로 위치나 순서와 상관없이 형성된 데이터를 사용하여 모델을 학습한다. 반면에 CNN은 regional feature를 학습하기 때문에 일정 크기의 kernel을 활용하여 Convolution 연산으로 학습을 한다. 

 

 하지만 소리, 문자열, 주가 등의 시퀀스 데이터는 독립적인 데이터라(i.i.d)는 머신러닝의 가정을 위배하는 경우가 많기 때문에 학습이 원활하게 이루어지지 않는 경우가 있다. local 적인 측면에 집중한 CNN 또한 이러한 시퀀스 데이터에 적용하기가 쉽지 않다. 

 

 이러한 문제를 해결하기 위해 순환신경망(RNN : Recurrent Neural Network)이라는 개념이 나오게 되었다.

 

 

 

1. 시퀀스 데이터 (Sequence data)

 : 시퀀스 데이터는 데이터의 순서와 배치 등이 의미를 가지는 데이터로써, 데이터끼리의 독립이 보장되지 않는다.

 

 예를 들어, 음악 데이터 같은 경우, 데이터의 순서를 바꾸게 되면 전혀 다른 멜로디로 들린다. 또, 어떤 소설의 문자열을 데이터화했다고 가정할 경우도 마찬가지로, 배치를 바꾸게 되면 전혀 다른 내용이나 혹은 아예 문법과는 상관없는 글자들의 집합이 될 수도 있다.

 이는 독립동등분포 가정을 위배한 것으로, 데이터의 확률분포가 바뀐다고 볼 수 있다.

 

 그렇다면 데이터의 확률 분포를 다루기 위해 조건부확률을 사용하여 이전 시퀀스의 정보를 통해 앞으로 발생할 데이터의 확률분포를 다룰수 있을까??

 

 베이즈 정리을 사용하면 가능하다.

 

베이즈 정리
1~t 스텝의 확률 = 1~t-1 스텝의 데이터가 주어졌을때 t 스텝의 데이터가 발생할 확률

 

 1~t까지의 시퀀스가 있을때, t까지의 전체 시퀀스의 확률분포는 각 스텝에서의 조건부확률의 곱으로 볼수있다. 이는 chain rule을 통해서 정리될 수 있다.

 

 위의 예시 이미지에서는 모든 과거 정보(시퀀스 스텝)을 사용한 식이지만, 실제 시퀀스 데이터를 분석할 때 모든 과거 정보가 필요한 것은 아니다.

 위에서 보이다 싶이 조건부에 들어가는 X_s-1,...,X1 부분의 길이는 가변적이다. 

 

 이런 가변적인 조건부 부분을 단순화하기 위해 고안된 방법은 다음과 같다.

  • 가변부를 고정된 길이 τ만큼만의 시퀀스를 사용하는 경우 : 자기회귀모델(Autoregressive Model -> AR(τ))

  • 바로 전 스텝을 제외한 나머지 정보들을 잠재변수(Hidden Variable) Ht로 인코딩해서 활용하는 경우 : 잠재AR모델

 위의 잠재AR모데로가 같이 Ht라는 잠재변수로 인코딩을 하게 될 경우, 조건부 부분이 Xt-1, Ht 라는 고정길이로 변환된다. 이러한 잠재변수 Ht를 반복적으로 사용하여 시퀀스 데이터의 패턴을 학습하는 것이 RNN이다.

 

 

 

2. RNN : Recurrent Neural Network 순환신경망

 기본적인 모양은 MLP와 같다. 그러나 과거 정보를 다룰 수 없기 때문에 그 전 스텝의 잠재변수 Ht-1와 현재 스텝의 input 데이터를 함께 사용한다. 이때 가중치 행렬 W들은 시퀀스 스텝 t에 의해 변화하지 않는다.

 

  • RNN의 역전파는 잠재변수의 연결그래프에 따라 순차적으로 계산된다.
  • 이를 Back Propagation Through Time이라 하며 BPTT라 한다.

 

 

3. BPTT : Back Propagation Through Time

 BPTT는 모든 시점 t를 계산한 후(순전파)에 실행된다. 잠재변수에 들어오는 gradient vector는 두 개이며, 다음 스텝의 잠재변수에서 계산된 vector와 output에서 계산된 vector이다. 

BPTT 수식

 BPTT 수식은 위와 같다. 가중치행렬의 미분을 계산할때, 전체 손실함수의 미분값은 각 스텝에서의 loss값의 미분값을 모두 합한 것과 같다. Wh로 미분된 이 값을 전개해보면 위의 빨간 원 부분의 값이 나오게 된다. 잠재변수 ht의 Wh로 미분 한 값은 위와 같이 전개된다. 파란 박스의 값은 시퀀스가 길어질수록 불안정해지기 쉽자. 이 값이 1보다 커지면 계속해서 증가하게 되고 1보다 작아지면 굉장히 작은 값으로 떨어지기 때문에 불안정한 것이다.

 

 이렇게 되면 gradient vanishing 문제나 gradient exploding 문제가 발생할 수 있고 적절한 수렴을 끌어낼 수 없기 때문에 모델의 학습이 불가능해질 수도 있다. 이를 해결하기 위해 BPTT를 끊어내는 truncated BPTT 개념이나 잔차(residual)를 사용한 모델(LSTM, GRU 등)이 등장하게 되었다.

 

 

 

 

 * BPTT 참고 링크 : https://davi06000.tistory.com/92

 

[ Boost Camp ] BPTT를 이해해 보자

// BPTT? BPTT는 RNN에서 계산되는 back propagation으로 sequential data의 특성으로 인해 발생하는 hidden state를 따라 역행하면서 전파되는 gradient의 계산 방법이다. Back Propagation Through Time의 약자..

davi06000.tistory.com

* LSTM, GRU 참고 링크 : https://blog.naver.com/winddori2002/221992543837

 

[바람돌이/딥러닝] LSTM, GRU 이론 및 개념(Long Short Term Memory, Gated Recurrent Unit)

안녕하세요. 저번 포스팅에선 RNN(Recurrent Neural Network)의 이론을 정리했습니다. 이번 포스팅에...

blog.naver.com

 

 

 

참고자료 : 네이버부스트캠프 AI Tech 강의자료

728x90
반응형