버티의 블로그
[자연어처리 #03] RNN and LSTM 본문
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은 위 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를 사용하고자 한다.
위처럼 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 구조를 추가했다.
LSTM의 Four Regulations 순서는 다음과 같다.
- Forget Gate : 이전 상태와 새로운 입력을 얼마나 잊어버릴 것인지 결정
- Input Gate : 이전 상태와 새로운 입력을 얼마나 활용할 것인지 결정
- Cell : Input Gate와 Forget Gate에서 나온 데이터를 적절히 Mix
- Output Gate : 정보를 모두 종합하여 다음 상태를 결정
여기서 복잡성을 줄이기 위해 Cell을 없앤 간소화 버전을 GRU라고도 한다.
또한 인과관계를 무시하고 뒤의 데이터를 참조해도 괜찮을 때, 아래와 같은 Bi-LSTM 구조를 사용하기도 한다. self-feed back을 할 때 반대 방향으로도 진행하는 방식이다.
'AI > 자연어처리' 카테고리의 다른 글
[자연어처리 #06] BERT and GPT (0) | 2024.07.02 |
---|---|
[자연어처리 #05] Attention & Transformer (0) | 2024.07.01 |
[자연어처리 #04] Seq2Seq (0) | 2024.06.30 |
[자연어처리 #02] Text Mining (0) | 2024.06.23 |
[자연어처리 #01] Text Preprocessing (0) | 2024.06.23 |