버티의 블로그

[자연어처리 #03] RNN and LSTM 본문

AI/자연어처리

[자연어처리 #03] RNN and LSTM

ㅤ버티ㅤ 2024. 6. 30. 22:16
728x90

RNN

Recurrent Neural Network로, 시계열 데이터를 처리하기에 좋은 뉴럴 네트워크 구조이다. 시간 별로 같은 weight를 공유한다는 특징이 있어 과거와 현재는 같은 weight를 사용한다.

First-Order System현재 시간의 상태가 이전 시간의 상태와 관련있다고 가정하는 것으로 첫번째 식이고 상태x_t라고 한다. 이 시스템은 외부 입력 없이 시간에 따라 혼자 작동하므로, autonomous system이라고도 한다. 이때 현재의 입력에도 관계가 있는 경우가 2번째 식이고 입력u_t이다.

그러나 First-Order System에서 모든 시간 t에서 x_t가 관측 가능하진 않다. 보이지 않는 변수나 입력이 있을 수 있기 때문에 일부만 관측 가능하다. 이렇게 관측 가능한 상태의 모음출력(y_t)라고 한다. 최종적으로 위 식처럼 x_t와 y_t의 식을 정리한 것이 State-Space Model이라고 한다.

RNN Structure (그림이 약간 다른데, x를 u, h를 x라고 바꿔 생각)

 

RNN은 위 State-Space Model에서 입력을 u_t, Hidden Layer를 x_t, 출력을 y_t라고 보면 된다. 일반적인 NN와 다른 점은, Hidden Layer인 x가 self-feed back을 하면서 시간에 따라 혼자 작동한다는 점이다.

 

그럼 여기서 초기 조건인 x_0을 정의해야 한다. 보통 랜덤값이나 0, 1로 초기화한다.

 

이제 State-Space Model의 x와 y를 위한 함수 f와 h가 있는데, self-feed back을 하는 부분이 f, hidden layer에서 output으로 가는 부분이 h이다. 우리는 이 함수들을 근사하기 위해 NN를 사용하고자 한다. 

State-Space Model as RNN

 

위처럼 weight를 곱하고 bias를 더한 다음, 마지막에 activation function을 곱하여 사용한다. training도 똑같이 back-propagation을 사용한다.


LSTM

위에서 본 RNN은 한계가 있는데, 계속 self-feedback하면서 W_xx가 곱해질 때, W_xx가 1보다 크면 언젠가는 무한대로 발산하므로 exploding gradient 문제가, 1보다 작으면 0으로 수렴하기 때문에 vanishing gradient 문제가 있다. 그래서 이 gradient의 범위를 조절해 해결하는 새로운 구조인 LSTM이 탄생하였다.

 

LSTM은 전체적으로 State-Space Model 구조는 동일하지만, Gradient flow를 제어하기 위해 Gate 구조를 추가했다.

RNN vs LSTM (이제 input을 x로, state를 h, output을 z라고 보자)

 

LSTM의 Four Regulations 순서는 다음과 같다.

  1. Forget Gate : 이전 상태와 새로운 입력을 얼마나 잊어버릴 것인지 결정
  2. Input Gate : 이전 상태와 새로운 입력을 얼마나 활용할 것인지 결정
  3. Cell : Input Gate와 Forget Gate에서 나온 데이터를 적절히 Mix
  4. Output Gate : 정보를 모두 종합하여 다음 상태를 결정

여기서 복잡성을 줄이기 위해 Cell을 없앤 간소화 버전GRU라고도 한다.

 

또한 인과관계를 무시하고 뒤의 데이터를 참조해도 괜찮을 때, 아래와 같은 Bi-LSTM 구조를 사용하기도 한다. self-feed back을 할 때 반대 방향으로도 진행하는 방식이다.

LSTM(왼) vs Bi-LSTM(오)