RNN은 데이터를 순서대로 읽으면서, 앞서 처리한 정보를 다음 계산에 전달하는 신경망입니다. 문장이나 시간에 따른 측정값처럼 순서가 중요한 데이터를 다루지만, 기본형 RNN은 멀리 떨어진 정보의 관계를 학습하기 어렵다는 한계가 있습니다. 문장 분류 예시로 정보가 이어지는 방식과 LSTM·GRU가 보완하는 부분을 짚습니다.
RNN은 무엇이며, 왜 순서를 고려하나요?
RNN은 이전 단계의 정보를 현재 입력과 함께 계산하는 구조입니다. 이름은 Recurrent Neural Network의 약자로, 한국어로는 순환 신경망이라고 부릅니다. 여기서 순환은 앞선 계산에서 만든 상태를 다음 단계의 계산에 다시 사용한다는 뜻입니다.
예를 들어 ‘영화는 재미있지 않다’라는 문장을 판단하려면 ‘재미있지’만 보고 긍정이라고 결정해서는 안 됩니다. 뒤에 오는 ‘않다’와 앞부분의 관계까지 반영해야 합니다. 글의 단어나 시간별 센서 측정값처럼 순서에 따라 의미가 달라지는 데이터를 시퀀스 데이터라고 합니다.
RNN은 이런 데이터를 한 단계씩 처리하며 내부 상태를 갱신합니다. 입력이 시간별 온도라면 한 단계는 한 시점의 측정값이고, 문장이라면 글자나 단어 등으로 나눈 한 단위가 될 수 있습니다. TensorFlow 공식 가이드도 RNN을 이전 단계의 정보를 내부 상태에 담아 순서 데이터를 처리하는 구조로 설명합니다.
문장을 읽는 동안 어떤 정보가 이어질까요?
다음 단계로 이어지는 것은 앞 문장 원문 자체가 아니라, 지금까지의 입력을 반영한 숫자 묶음입니다. 이를 은닉 상태라고 합니다. 계산 중간에 사용하는 내부 표현이며, 사람이 읽는 요약문이나 모든 내용을 보존한 기록은 아닙니다.
설명을 위해 ‘영화는 / 재미있지 / 않다’를 각각 한 단계의 입력으로 정해 보겠습니다. 실제 시스템의 문장 분할 방식은 다를 수 있습니다. 각 입력을 계산 가능한 숫자로 바꾼 뒤, 앞 단계의 은닉 상태와 함께 처리합니다. 단어의 특성을 숫자로 표현하는 방법이 궁금하다면 임베딩의 뜻과 원리를 먼저 읽어도 좋습니다.
- ‘영화는’을 처리합니다. 첫 입력과 초기 상태를 이용해 새 상태를 만듭니다.
- ‘재미있지’를 처리합니다. 현재 입력과 앞서 만든 상태를 결합해 상태를 갱신합니다.
- ‘않다’를 처리합니다. 다시 상태를 갱신한 뒤, 마지막 상태를 감정 분류 계산에 사용합니다.
이 예시는 문장 분류 모델의 구성을 설명하기 위한 것입니다. 실제 모델이 반드시 부정으로 맞힌다는 실험 결과는 아닙니다. 입력과 이전 상태를 결합해 새 상태를 만드는 관계는 Dive into Deep Learning의 RNN 설명과 수식에서 확인할 수 있습니다.

은닉 상태와 최종 답은 다릅니다
은닉 상태는 다음 계산에 전달할 내부 정보이고, 최종 답은 그 정보를 작업 목적에 맞게 변환한 결과입니다. 위 예시에서는 마지막 상태를 이용해 긍정·부정 분류 점수를 계산합니다. 다른 구성에서는 매 단계의 상태로 출력값을 만들 수도 있습니다.
‘RNN은 마지막에만 답한다’거나 ‘모든 단계에서 반드시 단어를 출력한다’고 이해하면 곤란합니다. 문장 전체를 분류할지, 매 시점의 값을 예측할지에 따라 출력 구성을 정합니다. TensorFlow 공식 가이드의 출력과 상태 설명에서도 마지막 출력만 반환하는 방식과 전체 단계의 출력을 반환하는 방식을 구분합니다.
정보를 전달하는 것과 학습하는 것은 어떻게 다른가요?
문장을 읽으며 은닉 상태가 바뀌는 것은 현재 입력을 처리하는 과정이고, 학습은 예측 오차를 줄이도록 계산 규칙을 조정하는 과정입니다. 두 변화를 구분하면 RNN의 ‘기억’을 더 정확히 이해할 수 있습니다.
입력과 이전 상태가 새 상태에 어느 정도 영향을 줄지 정하는 학습 가능한 수치를 가중치라고 합니다. 기본형 RNN은 각 단계에서 같은 가중치를 재사용합니다. 문장이 길어져도 단어마다 새 모델이 생기지는 않습니다. 같은 계산 규칙을 반복해서 적용하면서 상태가 달라집니다. RNN의 가중치 공유 설명에 근거한 구분입니다.
학습할 때는 예측과 정답의 차이를 구한 뒤, 그 차이에 영향을 준 앞선 계산들을 거슬러 올라가 가중치를 얼마나 바꿀지 계산합니다. 이때 조정 방향과 크기를 알려 주는 수치가 기울기입니다. RNN의 계산을 시간 순서대로 펼쳐 놓고 기울기를 역방향으로 계산하는 방법을 시간 역전파(BPTT)라고 부릅니다.
‘않다’를 읽은 뒤 부정 문장으로 분류해야 한다면, 학습은 마지막 분류 계산뿐 아니라 앞부분의 정보를 전달한 계산에도 영향을 줍니다. 다만 일반적인 추론에서는 이미 학습한 가중치를 사용하며, 새 문장을 읽었다는 이유만으로 가중치를 자동 수정하지는 않습니다. 시간 역전파의 원리는 상태 전달과 가중치 학습을 구분하는 근거가 됩니다.
기본형 RNN은 왜 긴 문맥을 배우기 어려울까요?
기본형 RNN의 어려움은 오래전 정보까지 학습 신호를 안정적으로 전달하기 어렵다는 점과, 한 문장 안의 상태 계산을 순서대로 이어 가야 한다는 점입니다. 문장이 일정 길이를 넘으면 반드시 실패한다는 고정된 경계가 있는 것은 아닙니다.
앞선 계산으로 전달되는 학습 신호가 약해지거나 커집니다
앞부분의 단서와 마지막 판단 사이가 멀어지면, 학습 신호는 더 많은 계산 단계를 거쳐야 합니다. 이 과정에서 기울기가 매우 작아지면 앞선 계산을 충분히 수정하기 어려워집니다. 이것이 기울기 소실입니다. 반대로 기울기가 지나치게 커져 학습이 불안정해지는 현상은 기울기 폭발이라고 합니다.
이를 ‘앞 내용을 잊는다’고 표현하기도 하지만, 정확히는 멀리 떨어진 정보의 관계를 학습하기 어렵다는 문제입니다. 입력을 언제나 몇 단어까지만 저장한다는 뜻은 아닙니다. 지나치게 큰 기울기의 크기를 제한하는 기울기 클리핑은 폭발 문제를 완화하는 방법이지만, 소실 문제까지 같은 방식으로 해결하지는 않습니다. RNN 학습의 어려움을 분석한 원 논문은 두 문제를 구분해 다룹니다.
다음 상태는 이전 상태의 계산을 기다려야 합니다
기본형 RNN에서 현재 상태를 계산하려면 이전 상태가 필요합니다. 여러 문장을 묶어 처리할 수는 있어도, 한 문장 안의 모든 상태를 서로 독립적으로 한꺼번에 계산하기는 어렵습니다. 순서가 길어질수록 이 의존 관계가 계산 효율에 부담을 줍니다. 트랜스포머 원 논문도 순환 구조의 이러한 제약을 설명합니다.
LSTM·GRU와 트랜스포머는 무엇이 다른가요?
LSTM과 GRU는 정보를 유지하고 갱신하는 방식을 보완한 RNN 계열입니다. 트랜스포머는 순환 대신 입력 위치 사이의 관계를 직접 계산하는 다른 구조를 사용합니다. 아래의 ‘기본형 RNN’은 LSTM·GRU와 구분하기 위한 표현입니다.
| 구조 | 정보를 다루는 방식 | 이해할 차이 |
|---|---|---|
| 기본형 RNN | 입력과 이전 상태로 새 상태 계산 | 단순한 순환 구조, 긴 관계 학습에 어려움 |
| LSTM | 별도 기억 상태와 정보 조절 장치 사용 | 정보를 오래 유지하는 경로 보완 |
| GRU | 상태의 유지·갱신 비율 조절 | LSTM보다 단순한 상태 구성 |
| 트랜스포머 | 입력 위치 사이의 관련성 계산 | 기본 구조가 순환에 의존하지 않음 |
LSTM은 정보를 얼마나 남기고 새로 받아들일지 조절하는 장치를 둡니다. 이런 장치를 게이트라고 하며, 별도의 기억 상태와 함께 사용합니다. GRU는 업데이트 게이트와 리셋 게이트로 이전 상태를 얼마나 유지하고 새 계산에 반영할지 조절합니다. 두 방식 모두 사람이 보존할 단어를 직접 지정하는 것이 아니라, 학습을 통해 조절 방식을 익힙니다. 각각 LSTM 구조 설명과 GRU를 제안한 원 논문에 근거합니다.
LSTM과 GRU도 순환 계산을 사용하므로 모든 길이의 문맥을 완벽하게 처리하거나 순차 계산의 제약을 없애지는 않습니다. 어떤 구조를 쓸지는 필요한 정보의 거리, 데이터, 실행 환경에 맞춰 평가해야 합니다.
트랜스포머는 각 입력이 다른 입력과 얼마나 관련 있는지 계산하는 셀프 어텐션을 사용합니다. 이는 순환 구조의 상태 전달과 다른 연결 방식이며, 학습 중 여러 위치를 병렬 처리하는 데 유리합니다. 다만 이 설명을 ‘답변 문장도 항상 한 번에 생성한다’는 뜻으로 받아들이면 안 됩니다. 원 논문의 디코더도 앞서 생성한 출력을 이용해 다음 출력을 만듭니다.
이제 같은 문장에서 ‘RNN은 어떤 상태를 다음 단계로 넘기는가’, ‘LSTM은 그 정보의 유지 방식을 어떻게 조절하는가’를 구분해 보세요. 그다음 트랜스포머와 셀프 어텐션의 원리를 읽으면, 정보를 전달하는 경로가 어떻게 달라지는지 연결해서 이해할 수 있습니다.
자주 묻는 질문
RNN은 이전에 입력한 다른 문장도 계속 기억하나요?
자동으로 계속 기억하지는 않습니다. 상태를 언제 초기화하고 다음 입력 묶음에 전달할지는 구현 설정에 달려 있습니다. TensorFlow의 Keras RNN 가이드는 일반적인 배치 간 상태 초기화와 상태를 유지하는 설정을 구분합니다. 상태 유지 기능은 대화 기록을 영구 저장하는 기능과도 다릅니다.
양방향 RNN은 미래를 예측한다는 뜻인가요?
아닙니다. 주어진 데이터를 앞에서 뒤로, 뒤에서 앞으로 각각 처리해 두 방향의 정보를 활용한다는 뜻입니다. 아직 관측하지 않은 미래 데이터를 알아내는 기능은 아닙니다. 실시간 예측에서는 예측 시점에 실제로 사용할 수 있는 입력 범위를 지켜야 합니다.
RNN은 문장에만 사용할 수 있나요?
아닙니다. 시간별 온도나 센서 측정값처럼 순서가 있는 수치 데이터에도 적용할 수 있습니다. 한 단계에 여러 측정값을 함께 넣을 수도 있습니다. 다만 순서 데이터라는 이유만으로 RNN이 최선이라고 정할 수는 없으며, 실제 과제의 오차와 처리 비용을 비교해야 합니다.
참고 자료
- Working with RNNs — TensorFlow
- 9.4. Recurrent Neural Networks — Dive into Deep Learning
- 9.7. Backpropagation Through Time — Dive into Deep Learning
- On the difficulty of training Recurrent Neural Networks — arXiv
- 10.1. Long Short-Term Memory (LSTM) — Dive into Deep Learning
- Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation — arXiv
- Attention Is All You Need — arXiv