RNN 구조
Recurrent Neural Network(RNN)은 시계열 데이터와 같은 연속적인 정보를 처리할 때 많이 사용되는 신경망이다.
RNN은 기본적으로 과거의 정보를 기억하면서 새로운 정보를 처리하는 방식으로 작동한다
(CNN이 공간적 특징을 추출하여 학습한다면, RNN은 시계열 데이터의 시간적 특징을 추출하여 학습한다고 보면 된다!)
특히 RNN은 LSTM과 Transformer의 발전에 굉장히 중요한 역할을 하기 때문에, 정확하게 알아둘 필요가 있다.
RNN은 입력 벡터 X를 받아 내부적 연산을 통해서 출력 벡터 y_hat을 출력하는 순전파(feedforward)과정을 가진다.
RNN에서 시계열 데이터를 처리하는 것은 뇌의 기억(Memory)을 모방하는 것과 유사하다. 특정 단어를 번역할 때, RNN의 내부상태 h가 baseball을 처리한 값들로 세팅이되게 된다. 이런 내부 연산을 통해 단어를 번역하고, 그 다음 단어를 번역할 때 앞선 단어를 번역할 때 생성된 내부상태(Hidden State)가 그 다음에 입력된 단어를 번역할 때 영향을 끼치게 된다.
예를 들어, bat이라는 단어가 존재한다고 생각해보자. bat는 '박쥐'라는 뜻과 '방망이'라는 2가지 뜻을 가지고 있다. 그런데, 만약 앞에 bat이라는 단어 앞에 baseball이라는 단어가 존재한다면 어떻게 될까? 그러면 bat이라는 단어는 '방망이'라고 번역이 될 확률이 더 높아지게 될 것이다.
RNN 모형을 시간의 흐름에 맞춰 풀어서 살펴보자.
- h_0: 초기 벡터로써, 무작위 또는 사용자 지정으로 설정된다.
- x_0: 입력으로써, 단어 임베딩 벡터를 의미한다. (임베딩 방식은 자유롭지만 보통 one-hot이 사용된다)
- W_h: Context Vector의 weight로써, 학습이 진행되어 업데이트 된다.
- W_x: Neural Network의 weight로써, 학습이 진행되어 업데이트 된다.
- W_y: hidden state의 weight로써, 학습이 진행되어 업데이트 된다.
여기서 W(가중치)들은 backprogation(역전파)로 학습이 진행되어 점점 업데이트가 되어 간다. 중요한 것은 W_x, W_y, W_h가 새로운 단어 벡터를 입력받을 때마다 새롭게 갱신되는 것이 아니라, 동일한 것으로 계속 업데이트 하여 반복 수행된다는 것이다. (Weights are shared over time steps.)
RNN은 이전 h를 넘겨 받아 현재의 인풋과 합쳐 업데이트 시켜가는데, 그 과정은 아래와 같다. 이 때, tanh함수를 활성화함수로 사용한다.
RNN은 목표값인 y를 h_t를 사용하여 예측한다. 이 때, 소프트맥스 함수를 사용하여 업데이트 하는데, 그 계산과정은 아래와 같다.
(산출된 확률 중, 계산 확률이 가장 높은 것을 예측값으로 선택하게 된다)
RNN 쟁점
지금까지 RNN의 구조에 대해 살펴봤다면, RNN에 대해 알아두어야 할 중요한 쟁점들을 소개하고자 한다.
- Order matters
RNN의 경우, 입력되는 순서가 중요하다. 왜냐하면 RNN은 Sequence 데이터를 처리하기 위해 설계되었기 때문이다. 때문에 입력의 순서에 따라 데이터의 의미가 달라질 수 있다. 이러한 이유로 Pairwise encoding도 반영하기가 어렵다.
(Pairwise encoding은 일반적으로 두 요소 간의 관계를 인코딩하는 기술을 의미한다. 이는 주로 두 입력 간의 상호작용이나 관계를 모델링하는데, RNN의 Sequence적인 특성 때문에 불가능하다.)
- Preserves long-term
RNN의 경우 이전 최초의 정보를 온전히 반영하기가 어렵다. 이전 정보를 반영하기는 하지만, 굉장히 긴 Sequence를 처리하게 되면 Vanishing Gradient 문제를 겪게 될 수 있고 이는 시간이 지남에 따라 입력 시퀸스의 초기 부분에서 받은 정보가 사라지거나 희석되는 문제를 야기할 수 있다.
Reference
경희대학교 산업경영공학과 머신러닝 강의
https://www.youtube.com/watch?v=OkTyY28XMuQ
'Analytics' 카테고리의 다른 글
[ML/DL] Long Short-Term Memory(LSTM) (0) | 2024.08.15 |
---|---|
[Causal Inference] Causal Inference for The Brave and True 리뷰 (0) | 2024.08.12 |
[NLP] Text Representation (0) | 2024.06.14 |
[ML/DL] 인공 신경망(Neural Networks) (0) | 2024.05.10 |
[Data] 텐서(Tensor) 구조와 연산 (0) | 2024.05.08 |