
딥러닝의 여러 모델 중 RNN(Recurrent Neural Networks)은 특히 순차적인 데이터를 처리하는 데 강력한 성능을 발휘합니다. RNN의 개념, 동작 방식, 활용 사례, 그리고 한계점과 이를 극복한 LSTM에 대해 정리하고자 합니다.
RNN이란 무엇인가?
RNN은 시간적 순서가 중요한 데이터를 처리하도록 설계된 신경망입니다. 일반적인 인공신경망이 입력과 출력 간의 단순한 매핑을 수행하는 것과 달리, RNN은 과거의 입력을 기억하며 현재의 출력에 반영합니다. 이러한 특징 덕분에 텍스트, 음성, 비디오 등 연속된 데이터(sequence data)를 다루는 데 적합합니다.
주요 활용 분야
RNN은 다양한 분야에서 순차 데이터를 처리하는 데 사용됩니다. 주요 활용 사례는 다음과 같습니다.
- 음성 인식(Speech Recognition): 음성 데이터를 분석해 텍스트로 변환
- 기계 번역(Machine Translation): 한 언어의 문장을 다른 언어로 번역
- 텍스트 요약(Text Summarization): 긴 문서를 핵심 내용으로 요약
- 감성 분석(Sentiment Analysis): 문장의 긍·부정 감정 분류
- 이미지/비디오 캡션 생성: 시각 데이터를 설명하는 문장 생성
- 질의 응답(Question Answering): 질문 입력시 관련된 답변 생성
RNN의 동작 방식
RNN의 가장 큰 특징은 순환 구조(recurrence)입니다. 각 시점(time step)마다 입력과 이전의 상태(hidden state)를 결합해 현재의 출력을 만들어냅니다.

계산 과정을 간단히 풀어보면 다음과 같습니다.
입력 처리: 각 시점의 입력과 이전 시점의 hidden state를 결합해 새로운 hidden state를 계산
- ht: 현재 시점의 hidden state
- W: hidden state의 가중치 행렬
- U: 입력의 가중치 행렬
- xt: 현재 입력 벡터
ht = tanh(W · ht-1 + U · xt)
이렇게 만든 ht는 다음 시점의 입력으로 넘어가서 시간적인 문맥(context)을 이어주는 역할을 합니다.
출력 계산: hidden state를 기반으로 출력(yt)을 계산
- V: 출력 가중치 행렬
- softmax 함수를 사용하여 분류 문제라면 클래스 확률로 변환
yt = V · ht
RNN의 각 시점(time step)은 두 가지 출력을 만듭니다.
- yt: 최종 출력 (예측값)
- ht: 다음 시점을 위한 hidden state
🚨 왜 두 개의 출력이 필요할까?
- ht: 시간적 문맥을 유지하며 RNN의 연속성을 만듦
- ex. 예를 들어 “나는 밥을 …” 다음에 올 단어를 예측할 때 이전 단어들의 문맥을 고려해야 합니다.
- yt: 현재 시점의 실제 예측 결과
- ex. 품사 태깅(POS-tagging)에서는 각 단어마다 품사를 출력해야 합니다.
Time Step t
x_t --------┐
│
+-----▼------+
| |
h_{t-1} ----> RNN ----> h_t ----> 다음 RNN에 전달
│
▼
y_t (출력)

이때, 파란색 박스인 ht-1과 ht는 hidden state 입니다.
학습해야 하는 파라미터 V, W, U는 모든 hidden state에서 동일합니다. 즉, 파라미터를 공유하여 사용합니다.
hidden state 계산은 파라미터의 개수를 바탕으로 계산합니다.
- ht-1이 128차원이고 ht가 128차원이라면, W의 크기는 128X128 입니다.
- x의 크기가 32차원이고 ht이 128차원이라면, U의 크기는 128X32 입니다.
- y의 크기가 10차원이고 ht가 128차원이라면, V의 크기는 10X128 입니다.
RNN의 학습 과정

- 초기화: 학습을 시작할 때, U, V, W 파라미터들은 랜덤 값으로 초기화됩니다.
- 입력 및 출력: 품사 태깅 예시처럼 "The baby can walk"과 같은 문장이 RNN의 입력으로 들어가고, 각 단어에 대한 예측 품사가 각 스텝의 출력으로 나옵니다.
- 손실 계산: 예측값과 정답값을 비교하여 손실(Loss)을 계산합니다. Cross Entropy Loss가 주로 사용되며, 각 스텝의 손실을 합산하여 전체 손실을 구합니다.
- 파라미터 업데이트: 계산된 전체 손실을 바탕으로 BackPropagation 알고리즘을 통해 U, V, W 파라미터들을 업데이트하여 모델을 학습시킵니다.
다양한 RNN 구조
✔︎ Stacked RNN

여러 층의 RNN을 쌓아 더 깊은 표현을 학습합니다. 하위 RNN의 출력을 상위 RNN의 입력으로 전달하는 방식입니다. 복잡한 시퀀스를 처리할 때 사용됩니다.
✔︎ Bidirectional RNN

RNN의 기본 형태는 과거에서 미래로만 정보를 전달하지만, Bidirectional RNN은 입력 시퀀스를 양방향으로 처리합니다.
- Forward RNN: 과거에서 현재로 정보 전달
- Backward RNN: 미래에서 현재로 정보 전달
이 두 가지 정보를 결합하여 더 풍부한 문맥 정보를 얻습니다. 예를 들어, 문장에서 한 단어의 품사를 결정할 때, 앞뒤 단어 모두를 고려해야 할 때 매우 유용합니다.
RNN의 한계점
RNN은 순차 데이터 처리에 혁신을 가져왔지만, 다음과 같은 한계가 있었습니다.
1. 기울기 소실(Vanishing Gradient)
긴 시퀀스를 처리할 때, 역전파 과정에서 gradient가 점점 작아져 학습이 잘되지 않는 문제
- NN은 시퀀스의 각 시점에서 이전의 상태(hidden state)를 기반으로 다음 상태를 계산합니다.
- 이때 학습을 위해 역전파(Backpropagation Through Time, BPTT)를 사용하여 가중치 W를 업데이트합니다.
- 문제는 시퀀스가 길어질수록 기울기(gradient)가 아주 작아져서 0에 가까워지는 현상이 발생합니다.
→ 모델이 먼 과거의 입력 정보를 학습하지 못하고, 최근 정보만 반영
→ 긴 문맥(long-term dependencies)을 기억하는 데 실패
2. 기울기 폭발(Exploding Gradient)
반대로 gradient가 너무 커져서 가중치가 발산하는 문제
- 기울기 소실의 반대 상황입니다.
- 반복 곱셈 과정에서 WW의 고유값이 1보다 크면 gradient가 점점 커져서 무한대로 발산하는 문제가 발생합니다.
→ 가중치가 지나치게 커지면서 학습이 불안정해지고 발산(divergence)
→ Loss가 NaN으로 튀어버리거나 모델이 완전히 깨짐
3. 병렬처리 불가
데이터가 순차적으로 처리되므로 학습 속도가 느림

LSTM: RNN의 한계를 극복한 모델
이러한 한계를 극복하기 위해 LSTM(Long Short-Term Memory)이 등장했습니다.

- LSTM은 셀 상태(cell state)와 게이트 구조를 도입해 중요한 정보는 유지하고, 불필요한 정보는 잊어버립니다.
- 덕분에 긴 문맥도 효과적으로 학습할 수 있으며, 자연어 처리, 번역, 챗봇 등에 폭넓게 사용됩니다.
'딥러닝' 카테고리의 다른 글
| Encoder-Decoder와 Transformer: 자연어 처리의 핵심 구조 (3) | 2025.07.23 |
|---|
댓글