딥러닝 강의에서 배운 Recurrent Neural Network의 기본 구조와 학습 방식에 대한 인사이트를 정리해보았다. 특히 시간 차원을 가진 데이터를 어떻게 효율적으로 학습하는지 흥미로웠다.
1. RNN의 기본 구조는 기억력에 있다.
RNN의 핵심은 Hidden State라는 개념이다. Hidden State는 과거 정보를 담고 있는 일종의 기억 장치로, 현재 입력과 함께 출력과 다음 Hidden State를 결정한다. 이 구조 덕분에 시간적 패턴을 인식할 수 있다.
2. 세 가지 핵심 Weight Matrix. RNN에서는 주로 세 종류의 Weight Matrix가 사용된다. 입력에서 Hidden State로 가는 Wxh, Hidden State에서 다음 Hidden State로 가는 Whh, 그리고 Hidden State에서 출력으로 가는 Why이다. 이 세 가지 Weight Matrix가 모든 시간 단계에서 공유된다는 점이 중요하다.
3. 네트워크 표현의 두 가지 방식. RNN은 보통 두 가지 방식으로 표현된다. 첫 번째는 자기 자신에게 연결된 피드백 루프가 있는 형태, 두 번째는 시간에 따라 펼쳐진(unfolded) 형태이다. 두 번째 방식이 학습 과정을 이해하는 데 더 직관적이다.
4. Hyperbolic Tangent의 역할. Hidden State 계산 시 대부분의 RNN 모델이 activation function으로 Hyperbolic Tangent(tanh)를 사용한다. 이는 -1에서 1 사이의 값을 출력하는데, 이 범위가 과거 정보를 긍정적(양수)으로 또는 부정적(음수)으로 활용하는 메모리 역할에 적합하기 때문이다.
5. Backpropagation Through Time의 등장
일반적인 신경망은 Backpropagation 알고리즘으로 학습하지만, RNN은 시간 개념이 있어 Backpropagation Through Time(BPTT)이라는 변형된 알고리즘을 사용한다. 이는 시간 차원의 의존성을 고려한 학습 방식이다.
6. Weight Sharing의 의미와 효율성
RNN의 큰 특징은 모든 시간 단계에서 동일한 Weight를 공유한다는 점이다. 예를 들어 시간 단계가 10,000개라도 학습해야 할 파라미터의 수는 증가하지 않는다. 이는 계산량은 많지만 모델의 복잡도는 제한하는 효과가 있다.
7. Gradient 계산의 복잡성. 같은 Weight를 공유하더라도 각 시간 단계에서 계산되는 Gradient는 다르다. 이 다양한 Gradient 값들을 어떻게 하나의 업데이트로 통합할 것인가가 BPTT의 핵심 문제이다. 일반적으로는 각 시간 단계에서 얻은 Gradient의 평균을 사용한다.
8. 장기 의존성의 문제
시간 단계가 매우 길어지면 계산해야 할 Gradient의 양이 너무 많아지는 문제가 있다. 이를 해결하기 위해 Truncated BPTT라는 방법을 사용하는데, 이는 무한히 과거로 거슬러 올라가지 않고 특정 시점에서 계산을 중단하는 방식이다.
9. RNN 구조의 유연성
RNN은 기본적인 구조이며, 실제로는 더 복잡한 LSTM과 같은 변형 모델이 많이 사용된다. 하지만 기본 RNN을 이해하는 것이 이러한 발전된 모델을 이해하는 기초가 된다.
결론적으로, RNN은 시간에 따른 패턴을 학습할 수 있는 강력한 도구이다. Weight Sharing을 통해 파라미터 수를 제한하면서도 시간적 의존성을 모델링할 수 있다는 점이 가장 큰 장점이다. BPTT라는 특별한 학습 알고리즘을 통해 효율적으로 학습할 수 있지만, 시간 단계가 길어질수록 계산 복잡성이 증가하는 문제가 있다. 이는 더 발전된 모델과 알고리즘의 개발 동기가 되었다.