0. RNN (Recurrent Neural Network)
RNN(Recurrent Neural Network)은 시간적으로 순차적인 데이터를 처리할 수 있도록 설계된 인공신경망으로, 과거 정보를 현재의 계산에 활용할 수 있는 순환 구조를 가진 모델입니다. 시간에 따라 동일한 가중치를 공유하는 것이 특징이라고 할 수도 있습니다. 이러한 특징은 시계열 데이터, 자연어 처리(NLP), 음성 인식, 주가 예측 등 순서와 맥락이 중요한 데이터 처리에서 강점을 보입니다.
1. First-order System과 RNN의 유사성
First-order system은 시스템 동역학(dynamics)을 기술할 때 사용되는 수학적 모델로, 시스템의 현재 상태가 이전 상태와 현재 입력에 의해 결정되는 구조를 가집니다. 주로 시간에 따라 변화하는 시스템을 모델링하는 데 사용되는데, 이 First-order system이 RNN의 핵심 아이디어와 밀접하게 연결됩니다.
- First-order system :
\[
x_t = f(x_{t-1}, u_t)
\]
현재 상태 \(x_t\)는 이전 상태 \(x_{t-1}\) 및 현재 입력 \(u_t\)와의 함수 관계로 정의됩니다.
여기서 \(f\)는 상태 전이를 나타내는 함수입니다.
- RNN은 이를 일반화한 형태로, 상태 전이와 출력 계산을 학습 가능한 뉴럴 네트워크로 근사합니다:
- \(x_t\): hidden state (RNN의 히든 레이어)
- \(u_t\): 현재 입력
- \(y_t = h(x_t)\): 출력
First-order System은 상태 변화가 1개의 이전 상태(1-step lag)에 의존하나, RNN은 이전 상태 여러개에 의존할 수 도 있습니다. 음 결국은 핵심 아이디어가 비슷하다고 이해하고 넘어가시면 좋을 것 같습니다.
2. RNN의 개념 및 수식
기존의 신경망들은 전부 은닉층에서 활성화 함수를 지난 값은 오직 출력층 방향으로만 향했습니다. 이를 피드 포워드 신경망(Feed Forward Neural Network)이라고 합니다. 그러나 Recurrent Neural Network는 은닉층의 노드에서 다음 계산의 노드에 전달합니다.
2.1 RNN의 구조
RNN은 입력 데이터의 순차적 특성을 활용하기 위해 이전 단계의 정보를 hidden state를 통해 저장하고 이를 다음 단계 계산에 포함합니다.
- 입력층 ($x_t$) : 순차 데이터의 각 시점별 입력 값을 받음.
- 은닉층 ($W_{xh}x_t + W_{hh}h_{t-1}$) : 현재 입력과 이전 은닉 상태 정보를 결합하여 처리.
- 출력층 ($h_t$) : 각 시점의 예측 결과를 출력.
2.2 RNN 수식
은닉 상태 계산
$$
h_t = \sigma(W_{xh}x_t + W_{hh}h_{t-1} + b_h)
$$
RNN의 가장 기본적인 연산으로, 현재 시점의 은닉 상태 \( h_t \) 를 계산합니다.
- \( h_t \) :
현재 시점의 은닉 상태. 시점에서의 은닉 상태 벡터입니다. 이는 과거 입력( $h_{t-1}$ )과 현재 입력( $x_t$ )의 정보를 종합하여 계산됩니다. 은닉 상태는 순환 신경망이 기억을 유지할 수 있는 핵심입니다.
- \( x_t \) :
현재 시점의 입력. t 시점에서 들어오는 입력 벡터입니다.
- \( W_{xh} \) :
입력에서 은닉층으로의 가중치 행렬. 이 행렬은 입력 벡터 $x_t$를 은닉 상태 벡터의 차원으로 변환하는 역할을 합니다.
$W_{xh}x_t$는 입력 $x_t$의 각 특징(feature)에 가중치를 부여해 은닉 공간에서의 표현(representation)을 학습하는 것인데, $W_xh$의 각 행은 은닉 상태의 특정 노드가 입력 데이터를 어떻게 해석할지를 결정합니다.
자연어 처리를 예로 들면, $x_t$가 단어 임베딩이라면, $W_xh$는 이 단어가 은닉 상태 공간에서 어떤 의미(감정, 주제 등)를 나타낼지 결정합니다.
음.. 좀더 쉽게 감정분석 모델로 예를 들어드리면
"hate"와 "love" 같은 단어 임베딩( $x_t$ )이 감정에 따라 각기 다른 방향으로 가중치 ($W_xh$) 업데이트를 진행합니다.
- "hate": 가중치가 음수로 조정 → 부정적인 감정에 기여.
- "love": 가중치가 양수로 조정 → 긍정적인 감정에 기여.
이 과정을 통해 모델은 단어별로 감정을 구분하고, 문맥에 따라 적절한 감정 점수를 계산할 수 있는겁니다.
- \( W_{hh} \) :
이전 시점의 은닉 상태 ($h_{t-1}$)를 현재 은닉 상태($h_t$)로 연결하는 가중치 행렬 입니다. 이는 RNN이 시간 축의 연속성을 유지하고, 이전 시점에서 학습된 정보를 현재 시점에 반영할 수 있도록 합니다. 이 과정에서 $W_{hh}$의 값은 이전 은닉 상태가 얼마나 중요한지, 그리고 현재 상태에 어떤 방식으로 기여할지 결정합니다.
시간 축에서 $h_{t-1}$가 문맥 정보(문장 앞부분의 주제)를 포함한다고 가정하면, $W_{hh}$는 이 정보를 적절히 조정해 $h_t$로 전달하는 역할을 합니다.
- \( b_h \) :
은닉층의 편향 벡터. 이 값은 비선형 변환 이전에 출력값을 조정하는 역할로, 은닉 상태의 선형 변환에 일정한 상수를 더하는 역할을 하여 학습이 더 유연하게 이루어지도록 합니다. (학습 초기 안정성, 비선형 변환)
- \( \sigma \) :
활성화 함수 (주로 tanh 또는 ReLU 사용)는 비선형성을 추가하여 모델이 복잡한 패턴을 학습할 수 있도록 합니다.
출력 계산
$$
y_t = W_{hy}h_t + b_y
$$
이 수식은 현재 시점의 출력 $y_t$ 를 계산합니다. 은닉 상태 $h_t$ 에서 출력으로 변환하는 과정을 나타냅니다.
- \( y_t \) :
t 시점(현재 시점)에서의 출력 벡터입니다. 텍스트 생성 모델에서는 예측된 다음 단어의 확률 분포로 사용됩니다.
- \( W_{hy} \) :
은닉 상태 벡터 $h_t$에서 출력 벡터 $y_t$로 변환하는 가중치 행렬로, 은닉 상태의 정보를 출력 공간으로 투영하는 역할을 합니다.
- \( b_y \)
: 출력층의 편향 벡터
이와 같은 수식을 통해 RNN이 과거 상태와 현재 입력의 조합을 바탕으로 과거 시점의 정보를 반영한 현재 상태를 계산할 수 있는 것입니다.
3. RNN의 주요 특징
3.1 순차적 데이터 처리
RNN은 이전 시점의 정보를 현재 시점에 반영하므로 시간 의존성(Time Dependency)을 가진 데이터를 효과적으로 처리합니다. 이는 일반적인 피드포워드 신경망과의 가장 큰 차별점입니다.
3.2 파라미터 공유
일반적인 신경망에서는 서로 다른 입력에 대해 다른 가중치를 사용하지만, RNN은 시간적으로 동일한 가중치를 사용하여 시간에 따른 연속성을 보장합니다.
예를 들어
- CNN에서 이미지 구역별로 가중치를 공유한다면,
- RNN에서는 시간별로 가중치를 공유합니다.
RNN에서는 모든 시간 단계에서 동일한 가중치 $W_xh$, $W_hh$, $W_hy$
를 사용하여 계산을 진행합니다. 이를 통해 모델의 복잡도를 줄이고, 시퀸스의 길이에 관계없이 유연하게 처리할 수 있게 됩니다.
첫 번째 시점에서 학습된 가중치가 두 번째 시점에서도 그대로 사용 된다는 것입니다. 즉, $W_xh$, $W_hh$, $W_hy$
파라미터 공유의 장점은 크게 두 가지가 있습니다.
모델 복잡도 감소 :
- 시퀀스의 길이에 관계없이 동일한 가중치를 사용하므로, 매 시간 단계마다 별도로 가중치를 학습할 필요가 없습니다. 이는 모델의 파라미터 수를 크게 줄여서, 모델의 복잡도를 낮추고, 과적합을 방지하는데 도움을 줍니다.
시퀀스 길이에 유연성 제공 :
- 파라미터 공유 덕분에 RNN은 어떤 길이의 시퀀스라도 처리할 수 있게 됩니다. 가중치가 공유되므로, 입력 시퀀스의 길이가 늘어나거나 줄어들어도 모델이 동일한 방식으로 동작할 수 있습니다.
3.3 다양한 입력-출력 구조
RNN은 문제의 유형에 따라 입력과 출력의 형식을 자유롭게 설정할 수 있습니다:
- One-to-One: 고정 입력-출력 (예: 이미지 분류).
- One-to-Many: 하나의 입력으로 여러 출력 (예: 이미지 캡셔닝).
- Many-to-One: 여러 입력으로 하나의 출력 (예: 감정 분석).
- Many-to-Many: 입력과 출력 모두 시퀀스 (예: 기계 번역, 동영상 설명 생성).
4. 학습 과정과 알고리즘
RNN의 학습은 시간에 따라 펼쳐진(unfolded) 구조로 표현되며, 이를 통해 역전파 알고리즘을 확장한 시간 역전파(BPTT: Backpropagation Through Time)를 사용합니다.
4.1 학습 과정
- 순전파 (Forward propagation) : 시퀀스의 각 시점에서 은닉 상태와 출력을 계산.
- 손실 계산 (Loss Calculation) : 각 시점의 출력과 목표값 간의 오차를 계산.
- 역전파 (Backward propagation) : 시간 축을 따라 손실의 기울기를 계산하고, 가중치를 업데이트.
4.2 BPTT의 원리
BPTT는 RNN의 순환 구조를 시간에 따라 펼쳐서 일반적인 피드포워드 신경망처럼 취급합니다. 이렇게 펼친 구조에서 각 시간 단계는 동일한 가중치를 공유합니다.
그래디언트 계산
1. 순전파: 입력 시퀀스를 통해 네트워크를 순방향으로 실행하여 각 시간 단계의 은닉 상태와 출력을 계산합니다.
2. 역전파: 출력에서 발생한 오차를 시간을 거슬러 올라가며 전파합니다. 각 시간 단계에서 다음을 계산합니다:
- 출력 층의 그래디언트
- 은닉 층의 그래디언트
- 가중치에 대한 그래디언트
3. 그래디언트 누적: 각 시간 단계에서 계산된 가중치 그래디언트를 누적합니다. 이는 동일한 가중치가 여러 시간 단계에서 사용되기 때문입니다.
가중치 업데이트
누적된 그래디언트를 사용하여 네트워크의 가중치를 업데이트합니다. 이때 학습률을 적용하여 가중치를 조정합니다.
장기 의존성 문제
BPTT는 시퀀스가 길어질수록 그래디언트가 불안정해지는 문제가 있습니다. 이는 그래디언트가 시간을 거슬러 올라갈수록 점점 작아지거나(기울기 소실) 커지는(기울기 폭발) 현상 때문입니다.
5. RNN의 한계점과 개선
5-1. 한계점
- 기울기 소실 문제 (Vanishing Gradient) :
- 긴 시퀀스를 학습할 때, 역전파 과정에서 기울기가 0으로 수렴하여 초반 정보 학습이 어려움.
- 기울기 폭발 문제 (Exploding Gradient) :
- 역전파 과정에서 기울기가 급격히 커져 학습이 불안정해짐.
- 장기 의존성 문제 (Long-term Dependency) :
- 초기 시점의 정보가 후반부까지 전달되지 못함.
5.2 개선 모델
LSTM (Long Short-Term Memory):
- 셀 상태(Cell State)와 게이트 메커니즘(입력, 삭제, 출력 게이트)을 통해 중요한 정보를 선택적으로 전달.
GRU (Gated Recurrent Unit):
- LSTM의 간소화된 버전으로, 업데이트 게이트와 리셋 게이트로 구성.
변형 구조:
- Bi-directional RNN : 양방향 정보를 활용.
- Attention Mechanism : 중요한 정보에 가중치를 부여.
6. 결론
RNN은 시간적 데이터를 처리하는 강력한 모델로, 입력 시퀀스의 맥락 정보(과거 시점)를 기반으로 현재 시점의 출력과 은닉 상태를 계산합니다. 하지만 기울기 소실과 같은 한계점을 가지며, 이를 극복하기 위해 LSTM, GRU 등 변형 모델이 제안되었습니다. 이러한 RNN의 발전과 응용은 다양한 시퀀스 데이터 처리 문제에서 주로 사용되고 있으므로 NLP, 음성, 시계열 데이터를 다룬다면 확실하게 알고 넘어가는 것이 좋습니다.
그럼 이제 다음 글에서는 음성 또는 텍스트 데이터를 활용해 RNN을 구현해보도록 하겠습니다.
'DL' 카테고리의 다른 글
[DL] 아인슈타인 합의 표기법(Einstein Summation Notation) (0) | 2024.04.17 |
---|